/ Hex Artifact Content
Login

Artifact a89fe72e4a00652fdad88911e73ad376a351a477ec86a822f602863f01a495d3:


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 48 41 56 45 5f 53 54 44 49 4e 54 5f 48  ed(HAVE_STDINT_H
1f20: 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  )   /* Use this 
1f30: 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20  case if we have 
1f40: 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a  ANSI headers */.
1f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1f60: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1f70: 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74  (void*)(intptr_t
1f80: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
1f90: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1fa0: 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70  (X)  ((int)(intp
1fb0: 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 69 66 20  tr_t)(X)).#elif 
1fc0: 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46  defined(__PTRDIF
1fd0: 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68  F_TYPE__)  /* Th
1fe0: 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77  is case should w
1ff0: 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23  ork for GCC */.#
2000: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2010: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2020: 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46  void*)(__PTRDIFF
2030: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64  _TYPE__)(X)).# d
2040: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
2050: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
2060: 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  t)(__PTRDIFF_TYP
2070: 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21  E__)(X)).#elif !
2080: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
2090: 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73  )       /* Works
20a0: 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f   for compilers o
20b0: 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a  ther than LLVM *
20c0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
20d0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
20e0: 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72   ((void*)&((char
20f0: 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e  *)0)[X]).# defin
2100: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2110: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28  INT(X)  ((int)((
2120: 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a  (char*)X)-(char*
2130: 29 30 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  )0)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 20 7c 7c 20  d(i386)      || 
6dd0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
6de0: 29 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  )      || define
6df0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6e00: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6e10: 5f 5f 78 38 36 5f 36 34 29 20 20 7c 7c 20 64 65  __x86_64)  || de
6e20: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
6e30: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
6e40: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
6e50: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
6e60: 5f 41 4d 44 36 34 29 20 20 7c 7c 20 64 65 66 69  _AMD64)  || defi
6e70: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6e80: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6e90: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6ea0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6eb0: 4d 45 4c 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEL__) || define
6ec0: 64 28 5f 5f 41 41 52 43 48 36 34 45 4c 5f 5f 29  d(__AARCH64EL__)
6ed0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
6ee0: 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e 65  RM64).#   define
6ef0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
6f00: 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69 66  R    1234.# elif
6f10: 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20   defined(sparc) 
6f20: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6f30: 5f 70 70 63 5f 5f 29 20 7c 7c 20 5c 0a 20 20 20  _ppc__) || \.   
6f40: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6f50: 4d 45 42 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEB__) || define
6f60: 64 28 5f 5f 41 41 52 43 48 36 34 45 42 5f 5f 29  d(__AARCH64EB__)
6f70: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6f80: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
6f90: 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20  4321.# else.#   
6fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6fb0: 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69  TEORDER 0.# endi
6fc0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  f.#endif.#if SQL
6fd0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34  ITE_BYTEORDER==4
6fe0: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
6ff0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
7000: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
7010: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
7020: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
7030: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
7040: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
7050: 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  lif SQLITE_BYTEO
7060: 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66  RDER==1234.# def
7070: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7080: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
7090: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
70a0: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
70b0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
70c0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
70d0: 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64  16LE.#else.# ifd
70e0: 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
70f0: 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69  MATION.  const i
7100: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
7110: 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65  1;.# else.  exte
7120: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
7130: 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66  ite3one;.# endif
7140: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7150: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
7160: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7170: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
7180: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7190: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
71a0: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
71b0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
71c0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
71d0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
71e0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
71f0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
7200: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
7210: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
7220: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
7230: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
7240: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
7250: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
7260: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
7270: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
7280: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
7290: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
72a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
72b0: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
72c0: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
72d0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
72e0: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
72f0: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
7300: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
7310: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
7320: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20  ./*.** Round up 
7330: 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20  a number to the 
7340: 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74  next larger mult
7350: 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73  iple of 8.  This
7360: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66   is used.** to f
7370: 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67  orce 8-byte alig
7380: 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20  nment on 64-bit 
7390: 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a  architectures..*
73a0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38  /.#define ROUND8
73b0: 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29  (x)     (((x)+7)
73c0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e  &~7)../*.** Roun
73d0: 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65  d down to the ne
73e0: 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f  arest multiple o
73f0: 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  f 8.*/.#define R
7400: 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78  OUNDDOWN8(x) ((x
7410: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  )&~7)../*.** Ass
7420: 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69  ert that the poi
7430: 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65  nter X is aligne
7440: 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62  d to an 8-byte b
7450: 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a  oundary.  This.*
7460: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
7470: 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65  only within asse
7480: 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74  rt() to verify t
7490: 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74  hat the code get
74a0: 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65  s.** all alignme
74b0: 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  nt restrictions 
74c0: 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45  correct..**.** E
74d0: 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45  xcept, if SQLITE
74e0: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
74f0: 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65  MALLOC is define
7500: 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75  d, then the.** u
7510: 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63  nderlying malloc
7520: 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  () implementatio
7530: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
7540: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
7550: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
7560: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
7570: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
7580: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
7590: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
75a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
75b0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
75c0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
75d0: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
75e0: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
75f0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
7600: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
7610: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
7620: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
7630: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
7640: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
7650: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
7660: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
7670: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
7680: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
7690: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
76a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
76b0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
76c0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
76d0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
76e0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
76f0: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
7700: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
7710: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
7720: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
7730: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
7740: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
7750: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
7760: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
7770: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e  ditionals.h>.#en
7780: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
7790: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
77a0: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
77b0: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
77c0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
77d0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
77e0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
77f0: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
7800: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7810: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
7820: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
7830: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
7840: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
7850: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
7860: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7870: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
7880: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
7890: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
78a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
78b0: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
78c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
78d0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
78e0: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
78f0: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
7900: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
7910: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
7920: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
7930: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
7940: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
7950: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
7960: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
7970: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
7980: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
7990: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
79a0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
79b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
79c0: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
79d0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
79e0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
79f0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7a00: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
7a10: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7a20: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
7a30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7a40: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
7a50: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
7a60: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
7a70: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
7a80: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
7a90: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
7aa0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
7ab0: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
7ac0: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
7ad0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
7ae0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
7af0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
7b00: 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
7b10: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  E).# define SELE
7b20: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
7b30: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
7b40: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7b50: 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  BLED 0.#endif../
7b60: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7b70: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7b80: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
7b90: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
7ba0: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7bb0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
7bc0: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
7bd0: 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  dle..**.** The s
7be0: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
7bf0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
7c00: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
7c10: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
7c20: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
7c30: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
7c40: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
7c50: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
7c60: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
7c70: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
7c80: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
7c90: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
7ca0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7cb0: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
7cc0: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
7cd0: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
7ce0: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
7cf0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
7d00: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
7d10: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
7d20: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
7d30: 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69  BusyHandler)(voi
7d40: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
7d50: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
7d60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79  */.  void *pBusy
7d70: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7d80: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
7d90: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
7da0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
7db0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
7dd0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7de0: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
7df0: 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c  /.  u8 bExtraFil
7e00: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7e10: 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65        /* Include
7e20: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73   sqlite3_file as
7e30: 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f   callback arg */
7e40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
7e50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7e60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
7e70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7e80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
7e90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
7ea0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
7eb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
7ec0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
7ed0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
7ee0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
7ef0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
7f00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
7f10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
7f20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
7f30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7f40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
7f50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
7f60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
7f70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
7f80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
7f90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
7fa0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
7fb0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
7fc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
7fd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
7fe0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
7ff0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
8000: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
8010: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
8020: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
8030: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
8040: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
8050: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
8060: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
8070: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
8080: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
8090: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
80a0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
80b0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
80c0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
80d0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
80e0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
80f0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
8100: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
8110: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
8120: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
8130: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
8140: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
8150: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
8160: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
8170: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
8180: 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61   the.** one para
8190: 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72  meter that destr
81a0: 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20  uctors normally 
81b0: 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76  want.  So we hav
81c0: 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a  e to introduce.*
81d0: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
81e0: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
81f0: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
8200: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
8210: 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  ny.** pointer wi
8220: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
8230: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
8240: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
8250: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
8260: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
8270: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
8280: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
8290: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
82a0: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
82b0: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
82c0: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
82d0: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
82e0: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
82f0: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
8300: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
8310: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
8320: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
8330: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
8340: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
8350: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
8360: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
8370: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
8380: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
8390: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
83a0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
83b0: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
83c0: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
83d0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
83e0: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
83f0: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
8400: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
8410: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
8420: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
8430: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
8440: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
8450: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
8460: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
8470: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
8480: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
8490: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
84a0: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
84b0: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
84c0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
84d0: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
84e0: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
84f0: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
8500: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
8510: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
8520: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
8530: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
8540: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
8550: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
8560: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
8570: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
8580: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
8590: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
85a0: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
85b0: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
85c0: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
85d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
85e0: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
85f0: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
8600: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8610: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
8620: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
8630: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
8640: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
8650: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
8660: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
8670: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
8680: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
8690: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
86a0: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
86b0: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
86c0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
86d0: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
86e0: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
86f0: 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  ITE_WSD.  #defin
8700: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
8710: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8720: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
8730: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
8740: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
8750: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
8760: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
8770: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
8780: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
8790: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
87a0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
87b0: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
87c0: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
87d0: 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74  berately.** left
87e0: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
87f0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
8800: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
8810: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
8820: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
8830: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
8840: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
8850: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
8860: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
8870: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
8880: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
8890: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
88a0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
88b0: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
88c0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
88d0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
88e0: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
88f0: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
8900: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
8910: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
8920: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
8930: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
8940: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
8950: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8960: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
8970: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
8980: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
8990: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
89a0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
89b0: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
89c0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
89d0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
89e0: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
89f0: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
8a00: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
8a10: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
8a20: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
8a30: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
8a40: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
8a50: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
8a60: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
8a70: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
8a80: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
8a90: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
8aa0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
8ab0: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
8ac0: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
8ad0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
8ae0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
8af0: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
8b00: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
8b10: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b20: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
8b30: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
8b40: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
8b50: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
8b60: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
8b70: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
8b80: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
8b90: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
8ba0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
8bb0: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
8bc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8bd0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
8be0: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
8bf0: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
8c00: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
8c10: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
8c20: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
8c30: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
8c40: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
8c50: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
8c60: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
8c70: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
8c80: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
8c90: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
8ca0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
8cb0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
8cc0: 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a  ruct FKey FKey;.
8cd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8ce0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75  uncDestructor Fu
8cf0: 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79  ncDestructor;.ty
8d00: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d10: 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79  cDef FuncDef;.ty
8d20: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d30: 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66  cDefHash FuncDef
8d40: 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74  Hash;.typedef st
8d50: 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69  ruct IdList IdLi
8d60: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
8d70: 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a  ct Index Index;.
8d80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
8d90: 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78  ndexSample Index
8da0: 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20  Sample;.typedef 
8db0: 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20  struct KeyClass 
8dc0: 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65  KeyClass;.typede
8dd0: 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  f struct KeyInfo
8de0: 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65   KeyInfo;.typede
8df0: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
8e00: 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79  de Lookaside;.ty
8e10: 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f  pedef struct Loo
8e20: 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61  kasideSlot Looka
8e30: 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65  sideSlot;.typede
8e40: 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  f struct Module 
8e50: 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20  Module;.typedef 
8e60: 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
8e70: 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a  xt NameContext;.
8e80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8e90: 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65  arse Parse;.type
8ea0: 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70  def struct PreUp
8eb0: 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a  date PreUpdate;.
8ec0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8ed0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50  rintfArguments P
8ee0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a  rintfArguments;.
8ef0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52  typedef struct R
8f00: 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61 6d  enameToken Renam
8f10: 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20  eToken;.typedef 
8f20: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
8f30: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
8f40: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
8f50: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
8f60: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
8f70: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
8f80: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
8f90: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
8fa0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8fb0: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
8fc0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
8fd0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
8fe0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
8ff0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73  struct sqlite3_s
9000: 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a 20  tr StrAccum; /* 
9010: 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20 66  Internal alias f
9020: 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20 2a  or sqlite3_str *
9030: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
9040: 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79   Table Table;.ty
9050: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
9060: 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b  leLock TableLock
9070: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9080: 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79   Token Token;.ty
9090: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65  pedef struct Tre
90a0: 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a  eView TreeView;.
90b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90c0: 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a  rigger Trigger;.
90d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90e0: 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65  riggerPrg Trigge
90f0: 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74  rPrg;.typedef st
9100: 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
9110: 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79   TriggerStep;.ty
9120: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70  pedef struct Unp
9130: 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61  ackedRecord Unpa
9140: 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65  ckedRecord;.type
9150: 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65 72  def struct Upser
9160: 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64 65  t Upsert;.typede
9170: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
9180: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
9190: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
91a0: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
91b0: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
91c0: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
91d0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
91e0: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
91f0: 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20  f struct Window 
9200: 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66 20  Window;.typedef 
9210: 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68  struct With With
9220: 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  ;.../*.** The bi
9230: 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
9240: 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
9250: 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
9260: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
9270: 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
9280: 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
9290: 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
92a0: 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
92b0: 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
92c0: 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
92d0: 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
92e0: 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
92f0: 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
9300: 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
9310: 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
9320: 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66   ix86..*/.#ifdef
9330: 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
9340: 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20 53  TYPE.  typedef S
9350: 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59  QLITE_BITMASK_TY
9360: 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73  PE Bitmask;.#els
9370: 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20  e.  typedef u64 
9380: 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  Bitmask;.#endif.
9390: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
93a0: 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
93b0: 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
93c0: 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
93d0: 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
93e0: 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
93f0: 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
9400: 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
9410: 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
9420: 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
9430: 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
9440: 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41  <(n)).#define MA
9450: 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e  SKBIT32(n) (((un
9460: 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28  signed int)1)<<(
9470: 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42  n)).#define ALLB
9480: 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d 61  ITS      ((Bitma
9490: 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c 69  sk)-1)../* A VLi
94a0: 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72 64  st object record
94b0: 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74 77  s a mapping betw
94c0: 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f 76  een parameters/v
94d0: 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61 72  ariables/wildcar
94e0: 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51 4c  ds.** in the SQL
94f0: 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63 68   statement (such
9500: 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c 20   as $abc, @pqr, 
9510: 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68 65  or :xyz) and the
9520: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72 69   integer.** vari
9530: 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73 6f  able number asso
9540: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
9550: 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65 65   parameter.  See
9560: 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73 63   the format desc
9570: 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74 68  ription.** on th
9580: 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64  e sqlite3VListAd
9590: 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20  d() routine for 
95a0: 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  more information
95b0: 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72 65  .  A VList is re
95c0: 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e 20  ally.** just an 
95d0: 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72  array of integer
95e0: 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69 6e  s..*/.typedef in
95f0: 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20  t VList;../*.** 
9600: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
9610: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
9620: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
9630: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
9640: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
9650: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
9660: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
9670: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
9680: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
9690: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
96a0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
96b0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
96c0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
96d0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
96e0: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
96f0: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69 6e  e "pcache.h".#in
9700: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
9710: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
9720: 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45  ./* The SQLITE_E
9730: 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d  XTRA_DURABLE com
9740: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
9750: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
9760: 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63   default.** sync
9770: 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20  hronous setting 
9780: 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69 73  to EXTRA.  It is
9790: 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f   no longer suppo
97a0: 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rted..*/.#ifdef 
97b0: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
97c0: 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55  ABLE.# warning U
97d0: 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  se SQLITE_DEFAUL
97e0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20  T_SYNCHRONOUS=3 
97f0: 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54  instead of SQLIT
9800: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
9810: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9820: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9830: 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OUS 3.#endif../*
9840: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63  .** Default sync
9850: 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a  hronous levels..
9860: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
9870: 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72  (for historcal r
9880: 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45  easons) the PAGE
9890: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20  R_SYNCHRONOUS_* 
98a0: 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a  macros differ.**
98b0: 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
98c0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
98d0: 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e  NOUS value by 1.
98e0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
98f0: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
9900: 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c 54  US       DEFAULT
9910: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20  _SYNCHRONOUS.** 
9920: 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20 20    OFF           
9930: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
9940: 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20            0.**  
9950: 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32   NORMAL        2
9960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9970: 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20           1.**   
9980: 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20  FULL          3 
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99a0: 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45          2.**   E
99b0: 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20 20  XTRA         4  
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99d0: 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54         3.**.** T
99e0: 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  he "PRAGMA synch
99f0: 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e  ronous" statemen
9a00: 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20  t also uses the 
9a10: 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65  zero-based numbe
9a20: 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  rs..** In other 
9a30: 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d  words, the zero-
9a40: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72  based numbers ar
9a50: 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65  e used for all e
9a60: 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63  xternal interfac
9a70: 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e  es.** and the on
9a80: 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20 61  e-based values a
9a90: 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  re used internal
9aa0: 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ly..*/.#ifndef S
9ab0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9ac0: 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69  NCHRONOUS.# defi
9ad0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
9ae0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32 0a  T_SYNCHRONOUS 2.
9af0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
9b00: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
9b10: 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20  L_SYNCHRONOUS.# 
9b20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
9b30: 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52  FAULT_WAL_SYNCHR
9b40: 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45 46  ONOUS SQLITE_DEF
9b50: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9b60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
9b70: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
9b80: 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64  e to be accessed
9b90: 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69   by the system i
9ba0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
9bb0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9bc0: 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  g structure.  Th
9bd0: 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ere are normally
9be0: 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74   two of these st
9bf0: 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74  ructures.** in t
9c00: 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20  he sqlite.aDb[] 
9c10: 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69  array.  aDb[0] i
9c20: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
9c30: 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20  ase file and.** 
9c40: 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61  aDb[1] is the da
9c50: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
9c60: 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61   to hold tempora
9c70: 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69  ry tables.  Addi
9c80: 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61  tional.** databa
9c90: 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63  ses may be attac
9ca0: 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44  hed..*/.struct D
9cb0: 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62 53  b {.  char *zDbS
9cc0: 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
9cd0: 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  me of this datab
9ce0: 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d  ase. (schema nam
9cf0: 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29  e, not filename)
9d00: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
9d10: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
9d20: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
9d30: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
9d40: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
9d50: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
9d60: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
9d70: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
9d80: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
9d90: 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20  .  u8 bSyncSet; 
9da0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
9db0: 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  if "PRAGMA synch
9dc0: 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65  ronous=N" has be
9dd0: 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65  en run */.  Sche
9de0: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
9df0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
9e00: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
9e10: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
9e20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
9e30: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
9e40: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9e50: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
9e60: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
9e70: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
9e80: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
9e90: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
9ea0: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
9eb0: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
9ec0: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
9ed0: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
9ee0: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
9ef0: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
9f00: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
9f10: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
9f20: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
9f30: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
9f40: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
9f50: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
9f60: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
9f70: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
9f80: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a  red object..**.*
9f90: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
9fa0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
9fb0: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
9fc0: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
9fd0: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
9fe0: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
9ff0: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
a000: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
a010: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
a020: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
a030: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
a040: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
a050: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a060: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
a070: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
a080: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
a090: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
a0a0: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
a0b0: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
a0c0: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
a0d0: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
a0e0: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
a0f0: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
a100: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
a110: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
a120: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
a130: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
a140: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
a150: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
a160: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
a170: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
a180: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
a190: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
a1a0: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
a1b0: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
a1c0: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
a1d0: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
a1e0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
a1f0: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
a200: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
a210: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
a220: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
a230: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
a240: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
a250: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
a260: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a270: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
a280: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
a290: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
a2a0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
a2b0: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
a2c0: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
a2d0: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
a2e0: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
a2f0: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
a300: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
a310: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
a320: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
a330: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
a340: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
a350: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
a360: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
a370: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
a380: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
a390: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
a3a0: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
a3b0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
a3c0: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
a3d0: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
a3e0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
a3f0: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
a400: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
a410: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
a420: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
a430: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
a440: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
a450: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
a460: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
a470: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
a480: 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53   in the.** Db.pS
a490: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
a4a0: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ld..*/.#define D
a4b0: 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49  bHasProperty(D,I
a4c0: 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61  ,P)     (((D)->a
a4d0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a4e0: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d  chemaFlags&(P))=
a4f0: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
a500: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
a510: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
a520: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
a530: 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d  hemaFlags&(P))!=
a540: 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74  0).#define DbSet
a550: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a560: 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e      (D)->aDb[I].
a570: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a580: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
a590: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
a5a0: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
a5b0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a5c0: 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50  schemaFlags&=~(P
a5d0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  )../*.** Allowed
a5e0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
a5f0: 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  DB.pSchema->flag
a600: 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  s field..**.** T
a610: 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  he DB_SchemaLoad
a620: 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61  ed flag is set a
a630: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
a640: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a650: 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69  n.** read into i
a660: 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62  nternal hash tab
a670: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e  les..**.** DB_Un
a680: 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73  resetViews means
a690: 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72   that one or mor
a6a0: 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c  e views have col
a6b0: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a  umn names that.*
a6c0: 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c  * have been fill
a6d0: 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20  ed out.  If the 
a6e0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
a6f0: 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  these column nam
a700: 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e  es might.** chan
a710: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76  ges and so the v
a720: 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  iew will need to
a730: 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64   be reset..*/.#d
a740: 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c  efine DB_SchemaL
a750: 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20  oaded    0x0001 
a760: 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68   /* The schema h
a770: 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a  as been loaded *
a780: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72  /.#define DB_Unr
a790: 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30  esetViews    0x0
a7a0: 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65  002  /* Some vie
a7b0: 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20  ws have defined 
a7c0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a  column names */.
a7d0: 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79  #define DB_Empty
a7e0: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
a7f0: 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69  4  /* The file i
a800: 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20  s empty (length 
a810: 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65 66  0 bytes) */.#def
a820: 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e 74  ine DB_ResetWant
a830: 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20 2f  ed     0x0008  /
a840: 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68 65  * Reset the sche
a850: 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61 4c  ma when nSchemaL
a860: 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ock==0 */../*.**
a870: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
a880: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
a890: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
a8a0: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
a8b0: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
a8c0: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
a8d0: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
a8e0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
a8f0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
a900: 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a  KER_THREADS+1)..
a910: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
a920: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
a930: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
a940: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
a950: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
a960: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
a970: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
a980: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
a990: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
a9a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a9b0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
a9c0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
a9d0: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
a9e0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
a9f0: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
aa00: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
aa10: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
aa20: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
aa30: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
aa40: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
aa50: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
aa60: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
aa70: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
aa80: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
aa90: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
aaa0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
aab0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
aac0: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
aad0: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
aae0: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
aaf0: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
ab00: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
ab10: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
ab20: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
ab30: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
ab40: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
ab50: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
ab60: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
ab70: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
ab80: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
ab90: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
aba0: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
abb0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
abc0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
abd0: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
abe0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
abf0: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
ac00: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
ac10: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
ac20: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
ac30: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
ac40: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
ac50: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
ac60: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
ac70: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
ac80: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
ac90: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
aca0: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
acb0: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
acc0: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
acd0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
ace0: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
acf0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
ad00: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
ad10: 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  jects..*/.struct
ad20: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
ad30: 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20  32 bDisable;    
ad40: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f         /* Only o
ad50: 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61  perate the looka
ad60: 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a  side when zero *
ad70: 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  /.  u16 sz;     
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
ad90: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
ada0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
adb0: 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20   u8 bMalloced;  
adc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
add0: 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69   if pStart obtai
ade0: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
adf0: 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 75  _malloc() */.  u
ae00: 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20 20  32 nSlot;       
ae10: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ae20: 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73 6c   of lookaside sl
ae30: 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ots allocated */
ae40: 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33 5d  .  u32 anStat[3]
ae50: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
ae60: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
ae70: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
ae80: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
ae90: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e 69  kasideSlot *pIni
aea0: 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  t;   /* List of 
aeb0: 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65 76  buffers not prev
aec0: 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a 20  iously used */. 
aed0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
aee0: 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74  pFree;   /* List
aef0: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75   of available bu
af00: 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
af10: 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
af20: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
af30: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65   of available me
af40: 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20  mory space */.  
af50: 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20  void *pEnd;     
af60: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
af70: 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f   byte past end o
af80: 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  f available spac
af90: 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c  e */.};.struct L
afa0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20  ookasideSlot {. 
afb0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
afc0: 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78  pNext;    /* Nex
afd0: 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20  t buffer in the 
afe0: 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75 66  list of free buf
aff0: 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  fers */.};../*.*
b000: 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20 66  * A hash table f
b010: 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  or built-in func
b020: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
b030: 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e 2d  .  (Application-
b040: 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63 74  defined.** funct
b050: 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75 6c  ions use a regul
b060: 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20 66  ar table table f
b070: 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a  rom hash.h.).**.
b080: 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e  ** Hash each Fun
b090: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69  cDef structure i
b0a0: 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  nto one of the F
b0b0: 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73  uncDefHash.a[] s
b0c0: 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69  lots..** Collisi
b0d0: 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46  ons are on the F
b0e0: 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20 63  uncDef.u.pHash c
b0f0: 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20 53  hain.  Use the S
b100: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28  QLITE_FUNC_HASH(
b110: 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63 6f  ).** macro to co
b120: 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e 20  mpute a hash on 
b130: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d  the function nam
b140: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
b150: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
b160: 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e 63  Z 23.struct Func
b170: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
b180: 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55  Def *a[SQLITE_FU
b190: 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20  NC_HASH_SZ];    
b1a0: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
b1b0: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
b1c0: 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  /.};.#define SQL
b1d0: 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43 2c  ITE_FUNC_HASH(C,
b1e0: 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53 51  L) (((C)+(L))%SQ
b1f0: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
b200: 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  Z)..#ifdef SQLIT
b210: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b220: 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f  ATION./*.** Info
b230: 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20  rmation held in 
b240: 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61  the "sqlite3" da
b250: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
b260: 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65  n object and use
b270: 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75  d.** to manage u
b280: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
b290: 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  on..*/.typedef s
b2a0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
b2b0: 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75  erauth sqlite3_u
b2c0: 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20  serauth;.struct 
b2d0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
b2e0: 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65   {.  u8 authLeve
b2f0: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
b300: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75     /* Current au
b310: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76  thentication lev
b320: 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74  el */.  int nAut
b330: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
b340: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
b350: 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20   the zAuthPW in 
b360: 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  bytes */.  char 
b370: 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20  *zAuthPW;       
b380: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73           /* Pass
b390: 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74  word used to aut
b3a0: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63  henticate */.  c
b3b0: 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20  har *zAuthUser; 
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b3d0: 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74  User name used t
b3e0: 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a  o authenticate *
b3f0: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
b400: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
b410: 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74  te3_userauth.aut
b420: 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e  hLevel */.#defin
b430: 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20  e UAUTH_Unknown 
b440: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74      0     /* Aut
b450: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20  hentication not 
b460: 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23  yet checked */.#
b470: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69  define UAUTH_Fai
b480: 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f  l        1     /
b490: 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63  * User authentic
b4a0: 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a  ation failed */.
b4b0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73  #define UAUTH_Us
b4c0: 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20  er        2     
b4d0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
b4e0: 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65   as a normal use
b4f0: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  r */.#define UAU
b500: 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33  TH_Admin       3
b510: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
b520: 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69  cated as an admi
b530: 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a  nistrator */../*
b540: 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20   Functions used 
b550: 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74  only by user aut
b560: 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63  horization logic
b570: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55   */.int sqlite3U
b580: 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e  serAuthTable(con
b590: 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
b5a0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68  qlite3UserAuthCh
b5b0: 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33  eckLogin(sqlite3
b5c0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38  *,const char*,u8
b5d0: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
b5e0: 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c  UserAuthInit(sql
b5f0: 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
b600: 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71  ite3CryptFunc(sq
b610: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
b620: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
b630: 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  **);..#endif /* 
b640: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
b650: 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f  ENTICATION */../
b660: 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72  *.** typedef for
b670: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
b680: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  on callback func
b690: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  tion..*/.#ifdef 
b6a0: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
b6b0: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70  ENTICATION.  typ
b6c0: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
b6d0: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
b6e0: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
b6f0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b700: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b720: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
b730: 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
b740: 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  );.#else.  typed
b750: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
b760: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
b770: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
b780: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b790: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7b0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
b7c0: 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  *);.#endif..#ifn
b7d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b7e0: 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68  DEPRECATED./* Th
b7f0: 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20 53  is is an extra S
b800: 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72  QLITE_TRACE macr
b810: 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  o that indicates
b820: 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e   "legacy" tracin
b830: 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c  g.** in the styl
b840: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61  e of sqlite3_tra
b850: 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ce().*/.#define 
b860: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47  SQLITE_TRACE_LEG
b870: 41 43 59 20 20 20 20 20 20 20 20 20 20 30 78 34  ACY          0x4
b880: 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65  0     /* Use the
b890: 20 6c 65 67 61 63 79 20 78 54 72 61 63 65 20 2a   legacy xTrace *
b8a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b8b0: 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45 20  _TRACE_XPROFILE 
b8c0: 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20 20         0x80     
b8d0: 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61 63  /* Use the legac
b8e0: 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a 23 65  y xProfile */.#e
b8f0: 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  lse.#define SQLI
b900: 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20  TE_TRACE_LEGACY 
b910: 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66 69           0.#defi
b920: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
b930: 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20 20  XPROFILE        
b940: 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  0.#endif /* SQLI
b950: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
b960: 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ED */.#define SQ
b970: 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 4c 45  LITE_TRACE_NONLE
b980: 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30 66 20  GACY_MASK  0x0f 
b990: 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 66 6c      /* Normal fl
b9a0: 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45  ags */.../*.** E
b9b0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
b9c0: 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e  nection is an in
b9d0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
b9e0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
b9f0: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c  e..*/.struct sql
ba00: 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  ite3 {.  sqlite3
ba10: 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20  _vfs *pVfs;     
ba20: 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74         /* OS Int
ba30: 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75  erface */.  stru
ba40: 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  ct Vdbe *pVdbe; 
ba50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
ba60: 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74  t of active virt
ba70: 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a  ual machines */.
ba80: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74    CollSeq *pDflt
ba90: 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  Coll;           
baa0: 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63  /* The default c
bab0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
bac0: 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20  e (BINARY) */.  
bad0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d  sqlite3_mutex *m
bae0: 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  utex;         /*
baf0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   Connection mute
bb00: 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20  x */.  Db *aDb; 
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb20: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b       /* All back
bb30: 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44  ends */.  int nD
bb40: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
bb50: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
bb60: 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75  r of backends cu
bb70: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
bb80: 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67 73  /.  u32 mDbFlags
bb90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bba0: 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f 72    /* flags recor
bbb0: 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73 74  ding internal st
bbc0: 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c 61  ate */.  u64 fla
bbd0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bbe0: 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20         /* flags 
bbf0: 73 65 74 74 61 62 6c 65 20 62 79 20 70 72 61 67  settable by prag
bc00: 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a  mas. See below *
bc10: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
bc20: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
bc30: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
bc40: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
bc50: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
bc60: 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20    i64 szMmap;   
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f  /* Default mmap_
bc90: 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  size setting */.
bca0: 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f 63    u32 nSchemaLoc
bcb0: 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
bcc0: 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74 20  /* Do not reset 
bcd0: 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20  the schema when 
bce0: 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75 6e  non-zero */.  un
bcf0: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
bd00: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
bd10: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
bd20: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
bd30: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
bd40: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
bd50: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
bd60: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
bd70: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
bd80: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
bd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bda0: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
bdb0: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
bdc0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
bdd0: 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20 20  int iSysErrno;  
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bdf0: 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f   Errno value fro
be00: 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65 72  m last system er
be10: 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f  ror */.  u16 dbO
be20: 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  ptFlags;        
be30: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
be40: 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c  to enable/disabl
be50: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  e optimizations 
be60: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
be70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be80: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
be90: 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f  ing */.  u8 auto
bea0: 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20  Commit;         
beb0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75         /* The au
bec0: 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20  to-commit flag. 
bed0: 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f  */.  u8 temp_sto
bee0: 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  re;             
bef0: 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a     /* 1: file 2:
bf00: 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75   memory 0: defau
bf10: 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f  lt */.  u8 mallo
bf20: 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20  cFailed;        
bf30: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
bf40: 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20   we have seen a 
bf50: 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a  malloc failure *
bf60: 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61  /.  u8 bBenignMa
bf70: 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  lloc;           
bf80: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75    /* Do not requ
bf90: 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65  ire OOMs if true
bfa0: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
bfb0: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
bfc0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
bfd0: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
bfe0: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
bff0: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
c000: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
c010: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
c020: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
c030: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
c040: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
c050: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
c060: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
c070: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
c080: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
c090: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
c0a0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
c0b0: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
c0c0: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
c0d0: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
c0e0: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
c0f0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
c100: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
c110: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
c120: 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20 20  /.  u8 mTrace;  
c130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c140: 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72    /* zero or mor
c150: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 66  e SQLITE_TRACE f
c160: 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f 53  lags */.  u8 noS
c170: 68 61 72 65 64 43 61 63 68 65 3b 20 20 20 20 20  haredCache;     
c180: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
c190: 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61 63  if no shared-cac
c1a0: 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  he backends */. 
c1b0: 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20 20   u8 nSqlExec;   
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c1d0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e 64  * Number of pend
c1e0: 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f  ing OP_SqlExec o
c1f0: 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20  pcodes */.  int 
c200: 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20  nextPagesize;   
c210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
c220: 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55  esize after VACU
c230: 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33  UM if >0 */.  u3
c240: 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20  2 magic;        
c250: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
c260: 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20  agic number for 
c270: 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d  detect library m
c280: 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  isuse */.  int n
c290: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
c2a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
c2b0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
c2c0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20  lite3_changes() 
c2d0: 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43  */.  int nTotalC
c2e0: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
c2f0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
c300: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
c310: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20  total_changes() 
c320: 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b  */.  int aLimit[
c330: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b  SQLITE_N_LIMIT];
c340: 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a     /* Limits */.
c350: 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72    int nMaxSorter
c360: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
c370: 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20  /* Maximum size 
c380: 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65  of regions mappe
c390: 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20  d by sorter */. 
c3a0: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49   struct sqlite3I
c3b0: 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f  nitInfo {      /
c3c0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
c3d0: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
c3e0: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
c3f0: 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20  int newTnum;    
c400: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
c410: 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65  ootpage of table
c420: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
c430: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62  ed */.    u8 iDb
c440: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c450: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64        /* Which d
c460: 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20  b file is being 
c470: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
c480: 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20     u8 busy;     
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c4a0: 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e  * TRUE if curren
c4b0: 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  tly initializing
c4c0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c4d0: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20 3a   orphanTrigger :
c4e0: 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61 74   1; /* Last stat
c4f0: 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65  ement is orphane
c500: 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a  d TEMP trigger *
c510: 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  /.    unsigned i
c520: 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20 31  mposterTable : 1
c530: 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e  ; /* Building an
c540: 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20   imposter table 
c550: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c560: 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31 3b  reopenMemdb : 1;
c570: 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73 20     /* ATTACH is 
c580: 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e 20  really a reopen 
c590: 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a 20  using MemDB */. 
c5a0: 20 20 20 63 68 61 72 20 2a 2a 61 7a 49 6e 69 74     char **azInit
c5b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
c5c0: 2a 20 22 74 79 70 65 22 2c 20 22 6e 61 6d 65 22  * "type", "name"
c5d0: 2c 20 61 6e 64 20 22 74 62 6c 5f 6e 61 6d 65 22  , and "tbl_name"
c5e0: 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 7d 20   columns */.  } 
c5f0: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
c600: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
c610: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c620: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
c630: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
c640: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
c650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c660: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c670: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c680: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
c690: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c6b0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c6c0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c6d0: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
c6e0: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
c6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c700: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
c710: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
c720: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
c730: 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20  nVDestroy;      
c740: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c750: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50  ber of active OP
c760: 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  _VDestroy operat
c770: 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ions */.  int nE
c780: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
c790: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c7a0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
c7b0: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
c7c0: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
c7d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
c7e0: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
c7f0: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
c800: 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28    int (*xTrace)(
c810: 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c  u32,void*,void*,
c820: 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54  void*);     /* T
c830: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
c840: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
c850: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c870: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
c880: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
c890: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
c8a0: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
c8b0: 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69  .  void (*xProfi
c8c0: 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  le)(void*,const 
c8d0: 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20  char*,u64);  /* 
c8e0: 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69  Profiling functi
c8f0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  on */.  void *pP
c900: 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20  rofileArg;      
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
c930: 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f   profile functio
c940: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 76 6f  n */.#endif.  vo
c950: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c970: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
c980: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
c990: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d   */.  int (*xCom
c9a0: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
c9b0: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
c9c0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
c9d0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
c9e0: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
c9f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
ca00: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
ca10: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
ca20: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
ca30: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
ca40: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
ca50: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
ca60: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
ca70: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
ca80: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
ca90: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
caa0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
cab0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
cac0: 34 29 3b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  4);.  Parse *pPa
cad0: 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
cae0: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 70      /* Current p
caf0: 61 72 73 65 20 2a 2f 0a 23 69 66 64 65 66 20 53  arse */.#ifdef S
cb00: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
cb10: 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f  UPDATE_HOOK.  vo
cb20: 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72  id *pPreUpdateAr
cb30: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  g;          /* F
cb40: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
cb50: 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62   xPreUpdateCallb
cb60: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ack */.  void (*
cb70: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
cb80: 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74  ck)(   /* Regist
cb90: 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ered using sqlit
cba0: 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f  e3_preupdate_hoo
cbb0: 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a  k() */.    void*
cbc0: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68  ,sqlite3*,int,ch
cbd0: 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63  ar const*,char c
cbe0: 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e  onst*,sqlite3_in
cbf0: 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  t64,sqlite3_int6
cc00: 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61  4.  );.  PreUpda
cc10: 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20  te *pPreUpdate; 
cc20: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
cc30: 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65  t for active pre
cc40: 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b  -update callback
cc50: 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   */.#endif /* SQ
cc60: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
cc70: 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69  PDATE_HOOK */.#i
cc80: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cc90: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
cca0: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
ccb0: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
ccc0: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
ccd0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
cce0: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
ccf0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
cd00: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
cd10: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
cd20: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
cd30: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
cd40: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
cd50: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
cd60: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
cd70: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
cd80: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
cd90: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
cda0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
cdb0: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
cdc0: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
cdd0: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73   volatile int is
cde0: 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20  Interrupted; /* 
cdf0: 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f  True if sqlite3_
ce00: 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65  interrupt has be
ce10: 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20  en called */.   
ce20: 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31   double notUsed1
ce30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ce40: 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31  Spacer */.  } u1
ce50: 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f  ;.  Lookaside lo
ce60: 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
ce70: 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d    /* Lookaside m
ce80: 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74  alloc configurat
ce90: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
cea0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
ceb0: 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  RIZATION.  sqlit
cec0: 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20  e3_xauth xAuth; 
ced0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65           /* Acce
cee0: 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  ss authorization
cef0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
cf00: 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20  oid *pAuthArg;  
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cf20: 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  1st argument to 
cf30: 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20  the access auth 
cf40: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  function */.#end
cf50: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
cf60: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
cf70: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28  CALLBACK.  int (
cf80: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
cf90: 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20   *);     /* The 
cfa0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
cfb0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  k */.  void *pPr
cfc0: 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20  ogressArg;      
cfd0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
cfe0: 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73   to the progress
cff0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75   callback */.  u
d000: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
d010: 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  sOps;        /* 
d020: 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  Number of opcode
d030: 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63  s for progress c
d040: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
d050: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
d060: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
d070: 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  LE.  int nVTrans
d080: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d090: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
d0a0: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
d0b0: 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c  */.  Hash aModul
d0c0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
d0d0: 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20     /* populated 
d0e0: 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  by sqlite3_creat
d0f0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
d100: 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74  VtabCtx *pVtabCt
d110: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
d120: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
d130: 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74  ive vtab connect
d140: 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61  /create */.  VTa
d150: 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20  ble **aVTrans;  
d160: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69             /* Vi
d170: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74  rtual tables wit
d180: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
d190: 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ons */.  VTable 
d1a0: 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20  *pDisconnect;   
d1b0: 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e         /* Discon
d1c0: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
d1d0: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
d1e0: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
d1f0: 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20   Hash aFunc;    
d200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d210: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
d220: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
d230: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
d240: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
d250: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
d260: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d270: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
d280: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
d290: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
d2a0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
d2b0: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
d2c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
d2d0: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
d2e0: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
d2f0: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
d300: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
d310: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
d320: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
d330: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
d340: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
d350: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
d360: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
d370: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
d380: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
d390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d3a0: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
d3b0: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
d3c0: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
d3d0: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
d3e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d3f0: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
d400: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
d410: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
d420: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
d430: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
d440: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
d450: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
d460: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
d470: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
d480: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d490: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
d4a0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d4b0: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
d4c0: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
d4d0: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
d4e0: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
d4f0: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
d500: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
d510: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
d520: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
d530: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
d540: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
d550: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
d560: 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  STER.  ** mutex,
d570: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
d580: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
d590: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
d5a0: 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20  notify.c..  **. 
d5b0: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
d5c0: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
d5d0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
d5e0: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
d5f0: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
d600: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
d610: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
d620: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
d630: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
d640: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
d650: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
d660: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
d670: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
d680: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
d690: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
d6a0: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
d6b0: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
d6c0: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
d6d0: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
d6e0: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
d6f0: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
d700: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
d710: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
d720: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
d730: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
d740: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
d750: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
d760: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
d770: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
d780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
d790: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
d7a0: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
d7b0: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
d7c0: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
d7d0: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
d7e0: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
d7f0: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
d800: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
d810: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
d820: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
d830: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
d840: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
d850: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
d860: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
d870: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
d880: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
d890: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
d8a0: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
d8b0: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
d8c0: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
d8d0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
d8e0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
d8f0: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45  #define SCHEMA_E
d900: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
d910: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
d920: 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  c).#define ENC(d
d930: 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d  b)        ((db)-
d940: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
d950: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
d960: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
d970: 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  gs..**.** Value 
d980: 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
d990: 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
d9a0: 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c  ()):.**      SQL
d9b0: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
d9c0: 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46    == PAGER_FULLF
d9d0: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
d9e0: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
d9f0: 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f  c == PAGER_CKPT_
da00: 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20  FULLFSYNC.**    
da10: 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70    SQLITE_CacheSp
da20: 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f  ill    == PAGER_
da30: 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23  CACHE_SPILL.*/.#
da40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
da50: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
da60: 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74  0000001  /* OK t
da70: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
da80: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
da90: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
daa0: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30 30  ileFmt  0x000000
dab0: 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  02  /* Create ne
dac0: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
dad0: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
dae0: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
daf0: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
db00: 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  004  /* Show ful
db10: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
db20: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
db30: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
db40: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30  Sync      0x0000
db50: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
db60: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
db70: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
db80: 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  e SQLITE_CkptFul
db90: 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30  lFSync  0x000000
dba0: 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  10  /* Use full 
dbb0: 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70  fsync for checkp
dbc0: 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oint */.#define 
dbd0: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
dbe0: 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32 30  l     0x00000020
dbf0: 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c    /* OK to spill
dc00: 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a   pager cache */.
dc10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
dc20: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
dc30: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
dc40: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
dc50: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
dc60: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
dc70: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
dc80: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
dc90: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
dca0: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
dce0: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
dcf0: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd20: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
dd30: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
dd40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd50: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
dd60: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
dd70: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
dd80: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
dd90: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ddc0: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
ddd0: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
dde0: 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43  e SQLITE_IgnoreC
ddf0: 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30 32  hecks   0x000002
de00: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e  00  /* Do not en
de10: 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73  force check cons
de20: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
de30: 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  ne SQLITE_ReadUn
de40: 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30  commit   0x00000
de50: 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43  400  /* READ UNC
de60: 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72  OMMITTED in shar
de70: 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  ed-cache */.#def
de80: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70  ine SQLITE_NoCkp
de90: 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30  tOnClose  0x0000
dea0: 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63  0800  /* No chec
deb0: 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28  kpoint on close(
dec0: 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66  )/DETACH */.#def
ded0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
dee0: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 30  seOrder   0x0000
def0: 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  1000  /* Reverse
df00: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
df10: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
df20: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
df30: 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20      0x00002000  
df40: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
df50: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
df60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
df70: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
df80: 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66  00004000  /* Enf
df90: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
dfa0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
dfb0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dfc0: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
dfd0: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e  x00008000  /* En
dfe0: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
dff0: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
e000: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
e010: 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30  ension  0x000100
e020: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
e030: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
e040: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
e050: 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30 78  oadExtFunc    0x
e060: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61  00020000  /* Ena
e070: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
e080: 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f  on() SQL func */
e090: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e0a0: 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30  EnableTrigger  0
e0b0: 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72  x00040000  /* Tr
e0c0: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69  ue to enable tri
e0d0: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
e0e0: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
e0f0: 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30 30         0x0008000
e100: 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20  0  /* Defer all 
e110: 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  FK constraints *
e120: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e130: 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20  _QueryOnly      
e140: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44  0x00100000  /* D
e150: 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20  isable database 
e160: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e170: 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69  ne SQLITE_CellSi
e180: 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30 30  zeCk     0x00200
e190: 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74  000  /* Check bt
e1a0: 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f  ree cell sizes o
e1b0: 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e  n load */.#defin
e1c0: 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b  e SQLITE_Fts3Tok
e1d0: 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30 30  enizer  0x004000
e1e0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74  00  /* Enable ft
e1f0: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20  s3_tokenizer(2) 
e200: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e210: 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20  E_EnableQPSG    
e220: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
e230: 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74  Query Planner St
e240: 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65  ability Guarante
e250: 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  e*/.#define SQLI
e260: 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20 20  TE_TriggerEQP   
e270: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
e280: 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45 58   Show trigger EX
e290: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e2a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e2b0: 54 45 5f 52 65 73 65 74 44 61 74 61 62 61 73 65  TE_ResetDatabase
e2c0: 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a    0x02000000  /*
e2d0: 20 52 65 73 65 74 20 74 68 65 20 64 61 74 61 62   Reset the datab
e2e0: 61 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ase */.#define S
e2f0: 51 4c 49 54 45 5f 4c 65 67 61 63 79 41 6c 74 65  QLITE_LegacyAlte
e300: 72 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20  r    0x04000000 
e310: 20 2f 2a 20 4c 65 67 61 63 79 20 41 4c 54 45 52   /* Legacy ALTER
e320: 20 54 41 42 4c 45 20 62 65 68 61 76 69 6f 75 72   TABLE behaviour
e330: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e340: 54 45 5f 4e 6f 53 63 68 65 6d 61 45 72 72 6f 72  TE_NoSchemaError
e350: 20 20 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a    0x08000000  /*
e360: 20 44 6f 20 6e 6f 74 20 72 65 70 6f 72 74 20 73   Do not report s
e370: 63 68 65 6d 61 20 70 61 72 73 65 20 65 72 72 6f  chema parse erro
e380: 72 73 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  rs*/.#define SQL
e390: 49 54 45 5f 44 65 66 65 6e 73 69 76 65 20 20 20  ITE_Defensive   
e3a0: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
e3b0: 2a 20 49 6e 70 75 74 20 53 51 4c 20 69 73 20 6c  * Input SQL is l
e3c0: 69 6b 65 6c 79 20 68 6f 73 74 69 6c 65 20 2a 2f  ikely hostile */
e3d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e3e0: 44 71 73 44 44 4c 20 20 20 20 20 20 20 20 20 30  DqsDDL         0
e3f0: 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 64 62  x20000000  /* db
e400: 6c 2d 71 75 6f 74 65 64 20 73 74 72 69 6e 67 73  l-quoted strings
e410: 20 61 6c 6c 6f 77 65 64 20 69 6e 20 44 44 4c 2a   allowed in DDL*
e420: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e430: 5f 44 71 73 44 4d 4c 20 20 20 20 20 20 20 20 20  _DqsDML         
e440: 30 78 34 30 30 30 30 30 30 30 20 20 2f 2a 20 64  0x40000000  /* d
e450: 62 6c 2d 71 75 6f 74 65 64 20 73 74 72 69 6e 67  bl-quoted string
e460: 73 20 61 6c 6c 6f 77 65 64 20 69 6e 20 44 4d 4c  s allowed in DML
e470: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e480: 45 5f 45 6e 61 62 6c 65 56 69 65 77 20 20 20 20  E_EnableView    
e490: 20 30 78 38 30 30 30 30 30 30 30 20 20 2f 2a 20   0x80000000  /* 
e4a0: 45 6e 61 62 6c 65 20 74 68 65 20 75 73 65 20 6f  Enable the use o
e4b0: 66 20 76 69 65 77 73 20 2a 2f 0a 0a 2f 2a 20 46  f views */../* F
e4c0: 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69  lags used only i
e4d0: 66 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23  f debugging */.#
e4e0: 64 65 66 69 6e 65 20 48 49 28 58 29 20 20 28 28  define HI(X)  ((
e4f0: 75 36 34 29 28 58 29 3c 3c 33 32 29 0a 23 69 66  u64)(X)<<32).#if
e500: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
e510: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e520: 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 48  SqlTrace       H
e530: 49 28 30 78 30 31 30 30 30 30 30 29 20 2f 2a 20  I(0x0100000) /* 
e540: 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20  Debug print SQL 
e550: 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a  as it executes *
e560: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e570: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20  _VdbeListing    
e580: 48 49 28 30 78 30 32 30 30 30 30 30 29 20 2f 2a  HI(0x0200000) /*
e590: 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20   Debug listings 
e5a0: 6f 66 20 56 44 42 45 20 70 72 6f 67 73 20 2a 2f  of VDBE progs */
e5b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e5c0: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 48  VdbeTrace      H
e5d0: 49 28 30 78 30 34 30 30 30 30 30 29 20 2f 2a 20  I(0x0400000) /* 
e5e0: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
e5f0: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
e600: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
e610: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 48 49  dbeAddopTrace HI
e620: 28 30 78 30 38 30 30 30 30 30 29 20 2f 2a 20 54  (0x0800000) /* T
e630: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
e640: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
e650: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e660: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 48  VdbeEQP        H
e670: 49 28 30 78 31 30 30 30 30 30 30 29 20 2f 2a 20  I(0x1000000) /* 
e680: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
e690: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66  ERY PLAN */.#def
e6a0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 61 72 73 65  ine SQLITE_Parse
e6b0: 72 54 72 61 63 65 20 20 20 20 48 49 28 30 78 32  rTrace    HI(0x2
e6c0: 30 30 30 30 30 30 29 20 2f 2a 20 50 52 41 47 4d  000000) /* PRAGM
e6d0: 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d 4f  A parser_trace=O
e6e0: 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  N */.#endif../*.
e6f0: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
e700: 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44  s for sqlite3.mD
e710: 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e  bFlags.*/.#defin
e720: 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43  e DBFLAG_SchemaC
e730: 68 61 6e 67 65 20 20 20 30 78 30 30 30 31 20 20  hange   0x0001  
e740: 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48  /* Uncommitted H
e750: 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65  ash table change
e760: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46  s */.#define DBF
e770: 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74 69  LAG_PreferBuilti
e780: 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50 72  n  0x0002  /* Pr
e790: 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c  eference to buil
e7a0: 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64  t-in funcs */.#d
e7b0: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63  efine DBFLAG_Vac
e7c0: 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30 30  uum         0x00
e7d0: 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79  04  /* Currently
e7e0: 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a   in a VACUUM */.
e7f0: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56  #define DBFLAG_V
e800: 61 63 75 75 6d 49 6e 74 6f 20 20 20 20 20 30 78  acuumInto     0x
e810: 30 30 30 38 20 20 2f 2a 20 43 75 72 72 65 6e 74  0008  /* Current
e820: 6c 79 20 72 75 6e 6e 69 6e 67 20 56 41 43 55 55  ly running VACUU
e830: 4d 20 49 4e 54 4f 20 2a 2f 0a 23 64 65 66 69 6e  M INTO */.#defin
e840: 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b  e DBFLAG_SchemaK
e850: 6e 6f 77 6e 4f 6b 20 20 30 78 30 30 31 30 20 20  nownOk  0x0010  
e860: 2f 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e 6f  /* Schema is kno
e870: 77 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20 2a  wn to be valid *
e880: 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66  /../*.** Bits of
e890: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f   the sqlite3.dbO
e8a0: 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68  ptFlags field th
e8b0: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74  at are used by t
e8c0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  he.** sqlite3_te
e8d0: 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
e8e0: 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
e8f0: 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e  IZATIONS,...) in
e900: 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65  terface to.** se
e910: 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c  lectively disabl
e920: 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
e930: 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  zations..*/.#def
e940: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
e950: 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31  Flattener 0x0001
e960: 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74     /* Query flat
e970: 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  tening */.#defin
e980: 65 20 53 51 4c 49 54 45 5f 57 69 6e 64 6f 77 46  e SQLITE_WindowF
e990: 75 6e 63 20 20 20 20 20 30 78 30 30 30 32 20 20  unc     0x0002  
e9a0: 20 2f 2a 20 55 73 65 20 78 49 6e 76 65 72 73 65   /* Use xInverse
e9b0: 20 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e 63   for window func
e9c0: 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
e9d0: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
e9e0: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
e9f0: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
ea00: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
ea10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
ea20: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
ea30: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
ea40: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23  t factoring */.#
ea50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
ea60: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
ea70: 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  010   /* DISTINC
ea80: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
ea90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eaa0: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
eab0: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76   0x0020   /* Cov
eac0: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
ead0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
eae0: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
eaf0: 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f  in 0x0040   /* O
eb00: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
eb10: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
eb20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61  efine SQLITE_Tra
eb30: 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30 30  nsitive     0x00
eb40: 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69  80   /* Transiti
eb50: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ve constraints *
eb60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eb70: 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20  _OmitNoopJoin   
eb80: 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74  0x0100   /* Omit
eb90: 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69   unused tables i
eba0: 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69  n joins */.#defi
ebb0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f  ne SQLITE_CountO
ebc0: 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30 20  fView    0x0200 
ebd0: 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f    /* The count-o
ebe0: 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74  f-view optimizat
ebf0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
ec00: 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74  QLITE_CursorHint
ec10: 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  s    0x0400   /*
ec20: 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69   Add OP_CursorHi
ec30: 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64  nt opcodes */.#d
ec40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
ec50: 74 34 20 20 20 20 20 20 20 20 20 20 30 78 30 38  t4          0x08
ec60: 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54  00   /* Use STAT
ec70: 34 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a 20  4 data */.   /* 
ec80: 54 48 33 20 65 78 70 65 63 74 73 20 74 68 65 20  TH3 expects the 
ec90: 53 74 61 74 34 20 20 20 5e 5e 5e 5e 5e 5e 20 76  Stat4   ^^^^^^ v
eca0: 61 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38 30  alue to be 0x080
ecb0: 30 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67 65  0.  Don't change
ecc0: 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   it */.#define S
ecd0: 51 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20 20  QLITE_PushDown  
ece0: 20 20 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a       0x1000   /*
ecf0: 20 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20 6f   The push-down o
ed00: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
ed10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 69  define SQLITE_Si
ed20: 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78 32  mplifyJoin   0x2
ed30: 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74  000   /* Convert
ed40: 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f   LEFT JOIN to JO
ed50: 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  IN */.#define SQ
ed60: 4c 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20 20  LITE_SkipScan   
ed70: 20 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a 20      0x4000   /* 
ed80: 53 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23 64  Skip-scans */.#d
ed90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 6f  efine SQLITE_Pro
eda0: 70 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38 30  pagateConst 0x80
edb0: 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 73  00   /* The cons
edc0: 74 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f 6e  tant propagation
edd0: 20 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20   opt */.#define 
ede0: 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20  SQLITE_AllOpts  
edf0: 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f        0xffff   /
ee00: 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69  * All optimizati
ee10: 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ons */../*.** Ma
ee20: 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67  cros for testing
ee30: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
ee40: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72  optimizations ar
ee50: 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73  e enabled or dis
ee60: 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  abled..*/.#defin
ee70: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
ee80: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
ee90: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
eea0: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
eeb0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
eec0: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
eed0: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
eee0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
eef0: 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52  k))==0)../*.** R
ef00: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74  eturn true if it
ef10: 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f   OK to factor co
ef20: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
ef30: 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74  ns into the init
ef40: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f  ialization.** co
ef50: 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  de. The argument
ef60: 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65   is a Parse obje
ef70: 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ct for the code 
ef80: 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64  generator..*/.#d
ef90: 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f  efine ConstFacto
efa0: 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43  rOk(P) ((P)->okC
efb0: 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a  onstFactor)../*.
efc0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
efd0: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
efe0: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
eff0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
f000: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
f010: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
f020: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
f030: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
f040: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
f050: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
f060: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
f070: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
f080: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
f090: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
f0a0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
f0b0: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
f0c0: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
f0d0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
f0e0: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
f0f0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
f100: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
f110: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
f120: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
f130: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f140: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
f150: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
f160: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
f170: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
f180: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f190: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
f1a0: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
f1b0: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
f1c0: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
f1d0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f1e0: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
f1f0: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
f200: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
f210: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
f220: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
f230: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
f240: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
f250: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
f260: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  * structure.  Fo
f270: 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69  r global built-i
f280: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a  n functions (ex:
f290: 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29   substr(), max()
f2a0: 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20  , count()).** a 
f2b0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
f2c0: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
f2d0: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
f2e0: 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
f2f0: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20   object..** For 
f300: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
f310: 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
f320: 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20  ed functions, a 
f330: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a  pointer to this.
f340: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ** structure is 
f350: 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e  held in the db->
f360: 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65  aHash hash table
f370: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48  ..**.** The u.pH
f380: 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65  ash field is use
f390: 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20  d by the global 
f3a0: 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20  built-ins.  The 
f3b0: 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  u.pDestructor.**
f3c0: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
f3d0: 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  y per-connection
f3e0: 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f   app-def functio
f3f0: 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ns..*/.struct Fu
f400: 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72  ncDef {.  i8 nAr
f410: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
f420: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
f430: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
f440: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
f450: 75 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u32 funcFlags;  
f460: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
f470: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
f480: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
f490: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
f4a0: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
f4b0: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
f4c0: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
f4d0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
f4e0: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
f4f0: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
f500: 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33  *xSFunc)(sqlite3
f510: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
f520: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
f530: 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73  /* func or agg-s
f540: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
f550: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
f560: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
f570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f580: 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20  * Agg finalizer 
f590: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61 6c  */.  void (*xVal
f5a0: 75 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ue)(sqlite3_cont
f5b0: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
f5c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
f5d0: 72 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65 20  rrent agg value 
f5e0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e 76  */.  void (*xInv
f5f0: 65 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  erse)(sqlite3_co
f600: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
f610: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
f620: 69 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65 70  inverse agg-step
f630: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
f640: 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51   *zName;   /* SQ
f650: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
f660: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69  nction. */.  uni
f670: 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66  on {.    FuncDef
f680: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
f690: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
f6a0: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
f6b0: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
f6c0: 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63  .    FuncDestruc
f6d0: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
f6e0: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
f6f0: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
f700: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
f710: 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a    } u;.};../*.**
f720: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
f730: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
f740: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
f750: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
f760: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
f770: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
f780: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
f790: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
f7a0: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
f7b0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
f7c0: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
f7d0: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
f7e0: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
f7f0: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
f800: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
f810: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
f820: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
f830: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
f840: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
f850: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
f860: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
f870: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
f880: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
f890: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
f8a0: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
f8b0: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
f8c0: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
f8d0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
f8e0: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
f8f0: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
f900: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
f910: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
f920: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
f930: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
f940: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
f950: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
f960: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
f970: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
f980: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
f990: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
f9a0: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
f9b0: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
f9c0: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
f9d0: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
f9e0: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
f9f0: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
fa00: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
fa10: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
fa20: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
fa30: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
fa40: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
fa50: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
fa60: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
fa70: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
fa80: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
fa90: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
faa0: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
fab0: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
fac0: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
fad0: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
fae0: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
faf0: 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f    And.** SQLITE_
fb00: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75  FUNC_CONSTANT mu
fb10: 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
fb20: 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49  s SQLITE_DETERMI
fb30: 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a  NISTIC.  There.*
fb40: 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73  * are assert() s
fb50: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
fb60: 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20   code to verify 
fb70: 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  this..**.** Valu
fb80: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
fb90: 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
fba0: 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51  rt()):.**     SQ
fbb0: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
fbc0: 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61      ==  NC_MinMa
fbd0: 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f  xAgg      == SF_
fbe0: 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20  MinMaxAgg.**    
fbf0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
fc00: 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41  GTH    ==  OPFLA
fc10: 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20  G_LENGTHARG.**  
fc20: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54     SQLITE_FUNC_T
fc30: 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46  YPEOF    ==  OPF
fc40: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a  LAG_TYPEOFARG.**
fc50: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
fc60: 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53  _CONSTANT  ==  S
fc70: 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53  QLITE_DETERMINIS
fc80: 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49  TIC from the API
fc90: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
fca0: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65  UNC_ENCMASK   de
fcb0: 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f  pends on SQLITE_
fcc0: 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74  UTF* macros in t
fcd0: 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e  he API.*/.#defin
fce0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
fcf0: 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a  CMASK  0x0003 /*
fd00: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
fd10: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20  LITE_UTF16BE or 
fd20: 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69  UTF16LE */.#defi
fd30: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
fd40: 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f  IKE     0x0004 /
fd50: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
fd60: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
fd70: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
fd80: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
fd90: 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  E     0x0008 /* 
fda0: 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c  Case-sensitive L
fdb0: 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f  IKE-type functio
fdc0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fdd0: 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20  ITE_FUNC_EPHEM  
fde0: 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65    0x0010 /* Ephe
fdf0: 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
fe00: 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
fe10: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fe20: 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20  NEEDCOLL 0x0020 
fe30: 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
fe40: 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
fe50: 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65   be called*/.#de
fe60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fe70: 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30  _LENGTH   0x0040
fe80: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
fe90: 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
fea0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
feb0: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
fec0: 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0080 /* Built-i
fed0: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
fee0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
fef0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
ff00: 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75      0x0100 /* Bu
ff10: 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
ff20: 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
ff30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
ff40: 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30  _COALESCE 0x0200
ff50: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
ff60: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
ff70: 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
ff80: 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
ff90: 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75  ELY 0x0400 /* Bu
ffa0: 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28  ilt-in unlikely(
ffb0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
ffc0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ffd0: 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30  C_CONSTANT 0x080
ffe0: 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e  0 /* Constant in
fff0: 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73  puts give a cons
10000 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23  tant output */.#
10010 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10020 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30  NC_MINMAX   0x10
10030 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d  00 /* True for m
10040 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61  in() and max() a
10050 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65  ggregates */.#de
10060 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10070 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30  _SLOCHNG  0x2000
10080 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65   /* "Slow Change
10090 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e  ". Value constan
100a0 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20  t during a.     
100b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
100d0 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d  * single query -
100e0 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76   might change ov
100f0 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69  er time */.#defi
10100 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41  ne SQLITE_FUNC_A
10110 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20 2f  FFINITY 0x4000 /
10120 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e  * Built-in affin
10130 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ity() function *
10140 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10150 5f 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20 30  _FUNC_OFFSET   0
10160 78 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x8000 /* Built-i
10170 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28  n sqlite_offset(
10180 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
10190 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
101a0 43 5f 57 49 4e 44 4f 57 20 20 20 30 78 30 30 30  C_WINDOW   0x000
101b0 31 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  10000 /* Built-i
101c0 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75  n window-only fu
101d0 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
101e0 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e  e SQLITE_FUNC_IN
101f0 54 45 52 4e 41 4c 20 30 78 30 30 30 34 30 30 30  TERNAL 0x0004000
10200 30 20 2f 2a 20 46 6f 72 20 75 73 65 20 62 79 20  0 /* For use by 
10210 4e 65 73 74 65 64 50 61 72 73 65 28 29 20 6f 6e  NestedParse() on
10220 6c 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ly */../*.** The
10230 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65   following three
10240 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f   macros, FUNCTIO
10250 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20  N(), LIKEFUNC() 
10260 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20  and AGGREGATE() 
10270 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  are.** used to c
10280 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61  reate the initia
10290 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46  lizers for the F
102a0 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
102b0 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54  s..**.**   FUNCT
102c0 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
102d0 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
102e0 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  c).**     Used t
102f0 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
10300 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
10310 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
10320 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
10330 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
10340 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63  C function xFunc
10350 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
10360 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68  rg arguments. Th
10370 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70  e.**     value p
10380 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73  assed as iArg is
10390 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
103a0 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69  *) and made avai
103b0 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20  lable.**     as 
103c0 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73  the user-data (s
103d0 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
103e0 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ()) for the func
103f0 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20  tion. If.**     
10400 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20  argument bNC is 
10410 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53  true, then the S
10420 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
10430 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e  OLL flag is set.
10440 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49  .**.**   VFUNCTI
10450 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10460 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10470 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
10480 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
10490 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
104a0 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
104b0 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46  flag..**.**   DF
104c0 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
104d0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
104e0 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
104f0 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
10500 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
10510 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10520 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a  TANT flag and.**
10530 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51       adds the SQ
10540 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
10550 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f  G flag.  Used fo
10560 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75  r date & time fu
10570 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61  nctions.**     a
10580 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b  nd functions lik
10590 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e  e sqlite_version
105a0 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e  () that can chan
105b0 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69  ge, but not duri
105c0 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67  ng.**     a sing
105d0 6c 65 20 71 75 65 72 79 2e 20 20 54 68 65 20 69  le query.  The i
105e0 41 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20  Arg is ignored. 
105f0 20 54 68 65 20 75 73 65 72 2d 64 61 74 61 20 69   The user-data i
10600 73 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20  s always set.** 
10610 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f      to a NULL po
10620 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20  inter.  The bNC 
10630 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
10640 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50   used..**.**   P
10650 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20  URE_DATE(zName, 
10660 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
10670 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
10680 73 65 64 20 66 6f 72 20 22 70 75 72 65 22 20 64  sed for "pure" d
10690 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f  ate/time functio
106a0 6e 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69  ns, this macro i
106b0 73 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e  s like DFUNCTION
106c0 0a 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20 74  .**     except t
106d0 68 61 74 20 69 74 20 64 6f 65 73 20 73 65 74 20  hat it does set 
106e0 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
106f0 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20  CONSTANT flags. 
10700 20 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20   iArg is.**     
10710 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20  ignored and the 
10720 75 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68  user-data for th
10730 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73  ese functions is
10740 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20   set to an .**  
10750 20 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e     arbitrary non
10760 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20  -NULL pointer.  
10770 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65  The bNC paramete
10780 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  r is not used..*
10790 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
107a0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
107b0 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
107c0 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
107d0 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
107e0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
107f0 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
10800 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
10810 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
10820 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
10830 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
10840 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
10850 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
10860 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
10870 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
10880 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
10890 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
108a0 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
108b0 57 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  WFUNCTION(zName,
108c0 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 78 53 74   nArg, iArg, xSt
108d0 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c  ep, xFinal, xVal
108e0 75 65 2c 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a  ue, xInverse).**
108f0 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
10900 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65  ate an aggregate
10910 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
10920 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10930 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43   by.**     the C
10940 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70   functions xStep
10950 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65   and xFinal. The
10960 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61   first four para
10970 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72  meters.**     ar
10980 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e  e interpreted in
10990 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
109a0 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72   the first 4 par
109b0 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20  ameters to.**   
109c0 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a    FUNCTION()..**
109d0 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a  .**   LIKEFUNC(z
109e0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
109f0 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20  , flags).**     
10a00 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
10a10 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
10a20 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
10a30 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a   function zName.
10a40 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65  **     that acce
10a50 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
10a60 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d  ts and is implem
10a70 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20  ented by a call 
10a80 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63  to C.**     func
10a90 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41  tion likeFunc. A
10aa0 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20  rgument pArg is 
10ab0 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20  cast to a (void 
10ac0 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20  *) and made.**  
10ad0 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20     available as 
10ae0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  the function use
10af0 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
10b00 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68  user_data()). Th
10b10 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66  e.**     FuncDef
10b20 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20  .flags variable 
10b30 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
10b40 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68  lue passed as th
10b50 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70  e flags.**     p
10b60 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65  arameter..*/.#de
10b70 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  fine FUNCTION(zN
10b80 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10b90 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10ba0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10bb0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10bc0 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
10bd0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10be0 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
10bf0 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
10c00 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
10c10 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10c20 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e  } }.#define VFUN
10c30 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
10c40 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10c50 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10c60 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
10c70 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10c80 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
10c90 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
10ca0 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
10cb0 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10cc0 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44   {0} }.#define D
10cd0 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10ce0 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
10cf0 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
10d00 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
10d10 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
10d20 46 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78  F8, \.   0, 0, x
10d30 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
10d40 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
10d50 66 69 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a  fine PURE_DATE(z
10d60 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10d70 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
10d80 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10d90 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
10da0 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f  ITE_UTF8|SQLITE_
10db0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c  FUNC_CONSTANT, \
10dc0 0a 20 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69  .   (void*)&sqli
10dd0 74 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46  te3Config, 0, xF
10de0 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
10df0 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
10e00 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e  ine FUNCTION2(zN
10e10 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10e20 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74   bNC, xFunc, ext
10e30 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
10e40 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  rg,SQLITE_FUNC_C
10e50 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
10e60 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
10e70 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
10e80 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53  xtraFlags,\.   S
10e90 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
10ea0 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
10eb0 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
10ec0 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
10ed0 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e   STR_FUNCTION(zN
10ee0 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
10ef0 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10f00 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10f10 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49  UNC_SLOCHNG|SQLI
10f20 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10f30 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10f40 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30  L), \.   pArg, 0
10f50 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10f60 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66  , #zName, }.#def
10f70 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  ine LIKEFUNC(zNa
10f80 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66  me, nArg, arg, f
10f90 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
10fa0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
10fb0 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
10fc0 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76  8|flags, \.   (v
10fd0 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69  oid *)arg, 0, li
10fe0 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c  keFunc, 0, 0, 0,
10ff0 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
11000 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
11010 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
11020 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
11030 69 6e 61 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a  inal, xValue) \.
11040 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
11050 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
11060 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
11070 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
11080 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
11090 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61  xStep,xFinal,xVa
110a0 6c 75 65 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30  lue,0,#zName, {0
110b0 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  }}.#define AGGRE
110c0 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  GATE2(zName, nAr
110d0 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
110e0 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61  p, xFinal, extra
110f0 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
11100 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
11110 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
11120 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
11130 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  gs, \.   SQLITE_
11140 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
11150 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
11160 2c 78 46 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65  ,xFinal,0,#zName
11170 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 57  , {0}}.#define W
11180 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
11190 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
111a0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78  xStep, xFinal, x
111b0 56 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 2c  Value, xInverse,
111c0 20 66 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53   f) \.  {nArg, S
111d0 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
111e0 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
111f0 4f 4c 4c 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c  OLL)|f, \.   SQL
11200 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
11210 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
11220 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76  inal,xValue,xInv
11230 65 72 73 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  erse,#zName, {0}
11240 7d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4e  }.#define INTERN
11250 41 4c 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  AL_FUNCTION(zNam
11260 65 2c 20 6e 41 72 67 2c 20 78 46 75 6e 63 29 20  e, nArg, xFunc) 
11270 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
11280 45 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c  E_FUNC_INTERNAL|
11290 53 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49  SQLITE_UTF8|SQLI
112a0 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
112b0 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75  , \.   0, 0, xFu
112c0 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
112d0 61 6d 65 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a  ame, {0} }.../*.
112e0 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73  ** All current s
112f0 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74  avepoints are st
11300 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
11310 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61   list starting a
11320 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61  t.** sqlite3.pSa
11330 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72  vepoint. The fir
11340 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68  st element in th
11350 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f  e list is the mo
11360 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f  st recently.** o
11370 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  pened savepoint.
11380 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   Savepoints are 
11390 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73  added to the lis
113a0 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a  t by the vdbe.**
113b0 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
113c0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  struction..*/.st
113d0 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b  ruct Savepoint {
113e0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
113f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11400 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f         /* Savepo
11410 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65  int name (nul-te
11420 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69  rminated) */.  i
11430 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
11440 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11450 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11460 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c  deferred fk viol
11470 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20  ations */.  i64 
11480 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
11490 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
114a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
114b0 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f  erred imm fk. */
114c0 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
114d0 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
114e0 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74         /* Parent
114f0 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61   savepoint (if a
11500 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ny) */.};../*.**
11510 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
11520 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73  re used as the s
11530 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20  econd parameter 
11540 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  to sqlite3Savepo
11550 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73  int(),.** and as
11560 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
11570 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70   to the OP_Savep
11580 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
11590 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56  ..*/.#define SAV
115a0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20  EPOINT_BEGIN    
115b0 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45    0.#define SAVE
115c0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20  POINT_RELEASE   
115d0 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   1.#define SAVEP
115e0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20  OINT_ROLLBACK   
115f0 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  2.../*.** Each S
11600 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69  QLite module (vi
11610 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69  rtual table defi
11620 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e  nition) is defin
11630 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ed by an.** inst
11640 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11650 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c  owing structure,
11660 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
11670 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a  qlite3.aModule.*
11680 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f  * hash table..*/
11690 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b  .struct Module {
116a0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
116b0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
116c0 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  ;       /* Callb
116d0 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a  ack pointers */.
116e0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
116f0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
11700 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70         /* Name p
11710 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
11720 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 69 6e  module() */.  in
11730 74 20 6e 52 65 66 4d 6f 64 75 6c 65 3b 20 20 20  t nRefModule;   
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11750 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11760 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
11770 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 76 6f 69   object */.  voi
11780 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
11790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117a0 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
117b0 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
117c0 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
117d0 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
117e0 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
117f0 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
11800 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
11810 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b   Table *pEpoTab;
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11830 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f        /* Eponymo
11840 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69  us table for thi
11850 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s module */.};..
11860 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  /*.** informatio
11870 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
11880 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61  umn of an SQL ta
11890 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61  ble is held in a
118a0 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
118b0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
118c0 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d  .*/.struct Colum
118d0 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  n {.  char *zNam
118e0 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
118f0 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c  f this column, \
11900 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79  000, then the ty
11910 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44  pe */.  Expr *pD
11920 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61  flt;     /* Defa
11930 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ult value of thi
11940 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
11950 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
11960 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
11970 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
11980 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
11990 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
119a0 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
119b0 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
119c0 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
119d0 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
119e0 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
119f0 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
11a00 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
11a10 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
11a20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
11a30 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c  ated size of val
11a40 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d  ue in this colum
11a50 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d  n. sizeof(INT)==
11a60 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
11a70 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
11a80 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
11a90 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
11aa0 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
11ab0 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
11ac0 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
11ad0 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
11ae0 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
11af0 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
11b00 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
11b10 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
11b20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
11b30 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
11b40 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
11b50 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
11b60 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
11b70 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11b80 41 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30  AG_HASTYPE  0x00
11b90 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61  04    /* Type na
11ba0 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d  me follows colum
11bb0 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e  n name */.#defin
11bc0 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45  e COLFLAG_UNIQUE
11bd0 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
11be0 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61  Column def conta
11bf0 69 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72 20  ins "UNIQUE" or 
11c00 22 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  "PK" */.#define 
11c10 43 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52 45  COLFLAG_SORTERRE
11c20 46 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55 73  F 0x0010   /* Us
11c30 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77 69  e sorter-refs wi
11c40 74 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  th this column *
11c50 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c  /../*.** A "Coll
11c60 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20  ating Sequence" 
11c70 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
11c80 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11c90 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
11ca0 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74  ructure. Concept
11cb0 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69  ually, a collati
11cc0 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73  ng sequence cons
11cd0 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61  ists of a name a
11ce0 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73  nd.** a comparis
11cf0 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  on routine that 
11d00 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65  defines the orde
11d10 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e  r of that sequen
11d20 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c  ce..**.** If Col
11d30 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c  lSeq.xCmp is NUL
11d40 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  L, it means that
11d50 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e   the.** collatin
11d60 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e  g sequence is un
11d70 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65  defined.  Indice
11d80 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e  s built on an un
11d90 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61  defined.** colla
11da0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61  ting sequence ma
11db0 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72  y not be read or
11dc0 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72   written..*/.str
11dd0 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20  uct CollSeq {.  
11de0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11df0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
11e00 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
11e10 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65  equence, UTF-8 e
11e20 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65  ncoded */.  u8 e
11e30 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
11e40 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
11e50 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43  ng handled by xC
11e60 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mp() */.  void *
11e70 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  pUser;          
11e80 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
11e90 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20  t to xCmp() */. 
11ea0 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69   int (*xCmp)(voi
11eb0 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  d*,int, const vo
11ec0 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  id*, int, const 
11ed0 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28  void*);.  void (
11ee0 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20  *xDel)(void*);  
11ef0 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
11f00 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  r pUser */.};../
11f10 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65  *.** A sort orde
11f20 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  r can be either 
11f30 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a  ASC or DESC..*/.
11f40 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
11f50 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f  O_ASC       0  /
11f60 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
11f70 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
11f80 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44  fine SQLITE_SO_D
11f90 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53  ESC      1  /* S
11fa0 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
11fb0 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
11fc0 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45  e SQLITE_SO_UNDE
11fd0 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73  FINED -1 /* No s
11fe0 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66  ort order specif
11ff0 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  ied */../*.** Co
12000 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79  lumn affinity ty
12010 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65  pes..**.** These
12020 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e   used to have mn
12030 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65  emonic name like
12040 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   'i' for SQLITE_
12050 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a  AFF_INTEGER and.
12060 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54  ** 't' for SQLIT
12070 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74  E_AFF_TEXT.  But
12080 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c   we can save a l
12090 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20  ittle space and 
120a0 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73  improve.** the s
120b0 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79  peed a little by
120c0 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76   numbering the v
120d0 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76  alues consecutiv
120e0 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72  ely..**.** But r
120f0 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74  ather than start
12100 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65   with 0 or 1, we
12110 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e   begin with 'A'.
12120 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77    That way,.** w
12130 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66  hen multiple aff
12140 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20  inity types are 
12150 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74  concatenated int
12160 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a  o a string and.*
12170 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34  * used as the P4
12180 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77   operand, they w
12190 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64  ill be more read
121a0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  able..**.** Note
121b0 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e   also that the n
121c0 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65  umeric types are
121d0 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65   grouped togethe
121e0 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e  r so that testin
121f0 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72  g.** for a numer
12200 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e  ic type is a sin
12210 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  gle comparison. 
12220 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79   And the BLOB ty
12230 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a  pe is first..*/.
12240 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12250 46 46 5f 4e 4f 4e 45 20 20 20 20 20 30 78 34 30  FF_NONE     0x40
12260 20 20 2f 2a 20 27 40 27 20 2a 2f 0a 23 64 65 66    /* '@' */.#def
12270 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  ine SQLITE_AFF_B
12280 4c 4f 42 20 20 20 20 20 30 78 34 31 20 20 2f 2a  LOB     0x41  /*
12290 20 27 41 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20   'A' */.#define 
122a0 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
122b0 20 20 20 20 30 78 34 32 20 20 2f 2a 20 27 42 27      0x42  /* 'B'
122c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
122d0 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
122e0 30 78 34 33 20 20 2f 2a 20 27 43 27 20 2a 2f 0a  0x43  /* 'C' */.
122f0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12300 46 46 5f 49 4e 54 45 47 45 52 20 20 30 78 34 34  FF_INTEGER  0x44
12310 20 20 2f 2a 20 27 44 27 20 2a 2f 0a 23 64 65 66    /* 'D' */.#def
12320 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  ine SQLITE_AFF_R
12330 45 41 4c 20 20 20 20 20 30 78 34 35 20 20 2f 2a  EAL     0x45  /*
12340 20 27 45 27 20 2a 2f 0a 0a 23 64 65 66 69 6e 65   'E' */..#define
12350 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69   sqlite3IsNumeri
12360 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28  cAffinity(X)  ((
12370 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  X)>=SQLITE_AFF_N
12380 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54  UMERIC)../*.** T
12390 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
123a0 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20  SK values masks 
123b0 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63  off the signific
123c0 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a  ant bits of an.*
123d0 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65  * affinity value
123e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
123f0 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20  ITE_AFF_MASK    
12400 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64   0x47../*.** Add
12410 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75  itional bit valu
12420 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f  es that can be O
12430 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69  Red with an affi
12440 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20  nity without.** 
12450 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66  changing the aff
12460 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  inity..**.** The
12470 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
12480 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e  flag is a combin
12490 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20  ation of NULLEQ 
124a0 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a  and JUMPIFNULL..
124b0 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20  ** It causes an 
124c0 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65  assert() to fire
124d0 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
124e0 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73  nd to a comparis
124f0 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69  on.** operator i
12500 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  s NULL.  It is a
12510 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20  dded to certain 
12520 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
12530 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65  tors to.** prove
12540 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e   that the operan
12550 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f  ds are always NO
12560 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69  T NULL..*/.#defi
12570 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  ne SQLITE_KEEPNU
12580 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20  LL     0x08  /* 
12590 55 73 65 64 20 62 79 20 76 65 63 74 6f 72 20 3d  Used by vector =
125a0 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66 69  = or <> */.#defi
125b0 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  ne SQLITE_JUMPIF
125c0 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20  NULL   0x10  /* 
125d0 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20  jumps if either 
125e0 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
125f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12600 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30  E_STOREP2      0
12610 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65  x20  /* Store re
12620 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20  sult in reg[P2] 
12630 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70  rather than jump
12640 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
12650 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20  TE_NULLEQ       
12660 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55  0x80  /* NULL=NU
12670 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
12680 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20  LITE_NOTNULL    
12690 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72    0x90  /* Asser
126a0 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20  t that operands 
126b0 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a  are never NULL *
126c0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  /../*.** An obje
126d0 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
126e0 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
126f0 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ach virtual tabl
12700 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20  e present in.** 
12710 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
12720 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ema..**.** If th
12730 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
12740 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65  a is shared, the
12750 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69  n there is one i
12760 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a  nstance of this.
12770 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ** structure for
12780 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
12790 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74  onnection (sqlit
127a0 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74  e3*) that uses t
127b0 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68  he shared.** sch
127c0 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63  ema. This is bec
127d0 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61  ause each databa
127e0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  se connection re
127f0 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75  quires its own u
12800 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63  nique.** instanc
12810 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  e of the sqlite3
12820 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73  _vtab* handle us
12830 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
12840 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a   virtual table.*
12850 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
12860 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  . sqlite3_vtab* 
12870 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20  handles can not 
12880 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65  be shared betwee
12890 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  n.** database co
128a0 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
128b0 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
128c0 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
128d0 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d  atabase.** schem
128e0 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
128f0 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
12900 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
12910 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
12920 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12930 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
12940 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
12950 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
12960 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
12970 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
12980 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
12990 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
129a0 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
129b0 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
129c0 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
129d0 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
129e0 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
129f0 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68  l tables.** with
12a00 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
12a10 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70   So that they ap
12a20 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20  pear as part of 
12a30 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74  the callers.** t
12a40 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
12a50 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
12a60 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
12a70 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
12a80 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
12a90 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
12aa0 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
12ab0 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
12ac0 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
12ad0 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
12ae0 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
12af0 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
12b00 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
12b10 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
12b20 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
12b30 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
12b40 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
12b50 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
12b60 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
12b70 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
12b80 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
12b90 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
12ba0 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
12bb0 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
12bc0 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
12bd0 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
12be0 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
12bf0 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
12c00 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
12c10 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
12c20 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
12c30 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
12c40 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
12c50 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
12c60 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
12c70 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
12c80 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
12c90 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
12ca0 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
12cb0 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
12cc0 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
12cd0 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
12ce0 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
12cf0 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
12d00 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
12d10 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
12d20 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
12d30 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e  ot.** deleted an
12d40 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  d the sqlite3_vt
12d50 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20  ab* handles are 
12d60 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28  not xDisconnect(
12d70 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  )ed.** immediate
12d80 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65  ly. Instead, the
12d90 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d  y are moved from
12da0 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
12db0 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e  le list to.** an
12dc0 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73  other linked lis
12dd0 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20  t headed by the 
12de0 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
12df0 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ect member of th
12e00 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
12e10 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63  ng sqlite3 struc
12e20 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74  ture. They are t
12e30 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73  hen deleted/xDis
12e40 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78  connected.** nex
12e50 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
12e60 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
12e70 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
12e80 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
12e90 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
12ea0 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
12eb0 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
12ec0 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
12ed0 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
12ee0 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
12ef0 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
12f00 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
12f10 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
12f20 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
12f30 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
12f40 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
12f50 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
12f60 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
12f70 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
12f80 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
12f90 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
12fa0 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
12fb0 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
12fc0 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
12fd0 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
12fe0 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  ated by.** sqlit
12ff0 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73  e3DbMalloc(), us
13000 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
13010 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64  on handle stored
13020 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73   in VTable.db as
13030 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72  .** the first ar
13040 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  gument..*/.struc
13050 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  t VTable {.  sql
13060 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
13070 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
13080 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
13090 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
130a0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f  is table */.  Mo
130b0 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20  dule *pMod;     
130c0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
130d0 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70  er to module imp
130e0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
130f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
13100 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f  Vtab;      /* Po
13110 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e  inter to vtab in
13120 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
13130 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
13140 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13150 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
13160 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
13170 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e  .  u8 bConstrain
13180 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
13190 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
131a0 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
131b0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65  d */.  int iSave
131c0 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
131d0 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65   /* Depth of the
131e0 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b   SAVEPOINT stack
131f0 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e   */.  VTable *pN
13200 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
13210 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65  /* Next in linke
13220 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76  d list (see abov
13230 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  e) */.};../*.** 
13240 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65  The schema for e
13250 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e  ach SQL table an
13260 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73  d view is repres
13270 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a  ented in memory.
13280 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ** by an instanc
13290 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
132a0 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
132b0 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
132c0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
132d0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
132e0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
132f0 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
13300 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
13310 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
13320 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
13330 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
13340 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
13350 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
13360 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
13370 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
13380 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
13390 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
133a0 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
133b0 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
133c0 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
133d0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
133e0 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
133f0 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
13400 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
13410 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
13420 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
13430 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
13440 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
13450 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  n */.  ExprList 
13460 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41  *pCheck;    /* A
13470 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ll CHECK constra
13480 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  ints */.        
13490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
134a0 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65  *   ... also use
134b0 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  d as column name
134c0 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57 20   list in a VIEW 
134d0 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
134e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
134f0 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72  t BTree page for
13500 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13510 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20 20 20   u32 nTabRef;   
13520 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13530 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
13540 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75  his Table */.  u
13550 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  32 tabFlags;    
13560 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54      /* Mask of T
13570 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
13580 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20  i16 iPKey;      
13590 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e       /* If not n
135a0 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f  egative, use aCo
135b0 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20  l[iPKey] as the 
135c0 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e  rowid */.  i16 n
135d0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
135e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
135f0 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
13600 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  le */.  LogEst n
13610 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20  RowLogEst;   /* 
13620 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69  Estimated rows i
13630 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73  n table - from s
13640 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
13650 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  e */.  LogEst sz
13660 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  TabRow;     /* E
13670 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
13680 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20   each table row 
13690 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64  in bytes */.#ifd
136a0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
136b0 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45  _COSTMULT.  LogE
136c0 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20  st costMult;    
136d0 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c   /* Cost multipl
136e0 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68  ier for using th
136f0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  is table */.#end
13700 69 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b  if.  u8 keyConf;
13710 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61            /* Wha
13720 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20  t to do in case 
13730 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  of uniqueness co
13740 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20  nflict on iPKey 
13750 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
13760 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
13770 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66  E.  int addColOf
13780 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73  fset;    /* Offs
13790 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42  et in CREATE TAB
137a0 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61  LE stmt to add a
137b0 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   new column */.#
137c0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
137d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
137e0 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f  LTABLE.  int nMo
137f0 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a  duleArg;      /*
13800 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
13810 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75  ents to the modu
13820 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  le */.  char **a
13830 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20  zModuleArg;  /* 
13840 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68  0: module 1: sch
13850 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65  ema 2: vtab name
13860 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20   3...: args */. 
13870 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65   VTable *pVTable
13880 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ;     /* List of
13890 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e   VTable objects.
138a0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69   */.#endif.  Tri
138b0 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
138c0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69    /* List of tri
138d0 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20  ggers stored in 
138e0 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68  pSchema */.  Sch
138f0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
13900 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74    /* Schema that
13910 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74   contains this t
13920 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  able */.  Table 
13930 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f  *pNextZombie;  /
13940 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61  * Next on the Pa
13950 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c  rse.pZombieTab l
13960 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
13970 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
13980 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61  for Table.tabFla
13990 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f  gs..**.** TF_OOO
139a0 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74  Hidden applies t
139b0 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77  o tables or view
139c0 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65   that have hidde
139d0 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61  n columns that a
139e0 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62  re.** followed b
139f0 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  y non-hidden col
13a00 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20  umns.  Example: 
13a10 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c   "CREATE VIRTUAL
13a20 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a   TABLE x USING.*
13a30 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e  * vtab1(a HIDDEN
13a40 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22  , b);".  Since "
13a50 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64  b" is a non-hidd
13a60 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61  en column but "a
13a70 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20  " is hidden,.** 
13a80 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  the TF_OOOHidden
13a90 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64   attribute would
13aa0 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63   apply in this c
13ab0 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65  ase.  Such table
13ac0 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65  s require.** spe
13ad0 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75  cial handling du
13ae0 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63  ring INSERT proc
13af0 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69  essing..*/.#defi
13b00 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20  ne TF_Readonly  
13b10 20 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20        0x0001    
13b20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73  /* Read-only sys
13b30 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  tem table */.#de
13b40 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61  fine TF_Ephemera
13b50 6c 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20  l       0x0002  
13b60 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61    /* An ephemera
13b70 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
13b80 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  ne TF_HasPrimary
13b90 4b 65 79 20 20 20 30 78 30 30 30 34 20 20 20 20  Key   0x0004    
13ba0 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70  /* Table has a p
13bb0 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
13bc0 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63  efine TF_Autoinc
13bd0 72 65 6d 65 6e 74 20 20 20 30 78 30 30 30 38 20  rement   0x0008 
13be0 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
13bf0 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
13c00 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
13c10 65 66 69 6e 65 20 54 46 5f 48 61 73 53 74 61 74  efine TF_HasStat
13c20 31 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20  1        0x0010 
13c30 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73 74     /* nRowLogEst
13c40 20 73 65 74 20 66 72 6f 6d 20 73 71 6c 69 74 65   set from sqlite
13c50 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65 66 69 6e  _stat1 */.#defin
13c60 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  e TF_WithoutRowi
13c70 64 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f  d    0x0020    /
13c80 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49  * No rowid.  PRI
13c90 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20  MARY KEY is the 
13ca0 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
13cb0 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
13cc0 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 4e    0x0040    /* N
13cd0 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22  o user-visible "
13ce0 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f  rowid" column */
13cf0 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48  .#define TF_OOOH
13d00 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 30 30  idden       0x00
13d10 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d  80    /* Out-of-
13d20 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c  Order hidden col
13d30 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  umns */.#define 
13d40 54 46 5f 53 74 61 74 73 55 73 65 64 20 20 20 20  TF_StatsUsed    
13d50 20 20 20 30 78 30 31 30 30 20 20 20 20 2f 2a 20     0x0100    /* 
13d60 51 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 64 65  Query planner de
13d70 63 69 73 69 6f 6e 73 20 61 66 66 65 63 74 65 64  cisions affected
13d80 20 62 79 0a 20 20 20 20 20 20 20 20 20 20 20 20   by.            
13d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13da0 20 20 20 20 20 20 20 20 20 2a 2a 20 49 6e 64 65           ** Inde
13db0 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 5d 20  x.aiRowLogEst[] 
13dc0 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e  values */.#defin
13dd0 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20  e TF_HasNotNull 
13de0 20 20 20 20 20 30 78 30 32 30 30 20 20 20 20 2f       0x0200    /
13df0 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54 20 4e  * Contains NOT N
13e00 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ULL constraints 
13e10 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53 68  */.#define TF_Sh
13e20 61 64 6f 77 20 20 20 20 20 20 20 20 20 20 30 78  adow          0x
13e30 30 34 30 30 20 20 20 20 2f 2a 20 54 72 75 65 20  0400    /* True 
13e40 66 6f 72 20 61 20 73 68 61 64 6f 77 20 74 61 62  for a shadow tab
13e50 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  le */../*.** Tes
13e60 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
13e70 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
13e80 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
13e90 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
13ea0 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
13eb0 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
13ec0 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
13ed0 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
13ee0 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
13ef0 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
13f00 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
13f10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
13f20 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
13f30 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
13f40 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e  l(X)      ((X)->
13f50 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73  nModuleArg).#els
13f60 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  e.#  define IsVi
13f70 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a  rtual(X)      0.
13f80 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
13f90 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
13fa0 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  e if a column is
13fb0 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69   hidden.  IsOrdi
13fc0 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
13fd0 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73  ().** only works
13fe0 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c   for non-virtual
13ff0 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72   tables (ordinar
14000 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65  y tables and vie
14010 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c  ws) and is.** al
14020 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73  ways false unles
14030 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  s SQLITE_ENABLE_
14040 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69  HIDDEN_COLUMNS i
14050 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a  s defined.  The.
14060 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ** IsHiddenColum
14070 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e  n() macro is gen
14080 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f  eral purpose..*/
14090 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
140a0 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
140b0 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65  N_COLUMNS).#  de
140c0 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
140d0 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
140e0 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
140f0 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
14100 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
14110 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
14120 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
14130 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
14140 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
14150 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  elif !defined(SQ
14160 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
14170 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e  LTABLE).#  defin
14180 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
14190 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
141a0 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
141b0 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
141c0 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
141d0 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
141e0 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20  mn(X) 0.#else.# 
141f0 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
14200 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
14210 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
14220 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
14230 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  lumn(X) 0.#endif
14240 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74  .../* Does the t
14250 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69  able have a rowi
14260 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73  d */.#define Has
14270 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28  Rowid(X)     (((
14280 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
14290 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d  F_WithoutRowid)=
142a0 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69  =0).#define Visi
142b0 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58  bleRowid(X) (((X
142c0 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
142d0 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29  _NoVisibleRowid)
142e0 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ==0)../*.** Each
142f0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
14300 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
14310 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
14320 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
14330 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
14340 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
14350 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
14360 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
14370 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
14380 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
14390 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
143a0 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
143b0 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
143c0 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
143d0 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
143e0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
143f0 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
14400 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
14410 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
14420 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
14430 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
14440 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
14450 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
14460 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
14470 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
14480 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
14490 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
144a0 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
144b0 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
144c0 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
144d0 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
144e0 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
144f0 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c  ex2"..** Equival
14500 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  ent names:.**.**
14510 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20       from-table 
14520 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a  == child-table.*
14530 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65  *       to-table
14540 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65   == parent-table
14550 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
14560 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
14570 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
14580 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
14590 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
145a0 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
145b0 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
145c0 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
145d0 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
145e0 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
145f0 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
14600 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
14610 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
14620 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
14630 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  cked..**.** The 
14640 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65  list of all pare
14650 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61  nts for child Ta
14660 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74  ble X is held at
14670 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20   X.pFKey..**.** 
14680 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  A list of all ch
14690 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62  ildren for a tab
146a0 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63  le named Z (whic
146b0 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e  h might not even
146c0 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65   exist).** is he
146d0 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65  ld in Schema.fke
146e0 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73  yHash with a has
146f0 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73  h key of Z..*/.s
14700 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54  truct FKey {.  T
14710 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20  able *pFrom;    
14720 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69   /* Table contai
14730 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e  ning the REFEREN
14740 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a  CES clause (aka:
14750 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65   Child) */.  FKe
14760 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f  y *pNextFrom;  /
14770 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68  * Next FKey with
14780 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72   the same in pFr
14790 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20  om. Next parent 
147a0 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  of pFrom */.  ch
147b0 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
147c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
147d0 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
147e0 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
147f0 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
14800 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
14810 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61  Next with the sa
14820 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69  me zTo. Next chi
14830 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20  ld of zTo. */.  
14840 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
14850 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69    /* Previous wi
14860 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20  th the same zTo 
14870 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
14880 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14890 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
148a0 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
148b0 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
148c0 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
148d0 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  rred;       /* T
148e0 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
148f0 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
14900 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
14910 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
14920 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  on[2];        /*
14930 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
14940 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
14950 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
14960 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
14970 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69  rigger[2];/* Tri
14980 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
14990 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
149a0 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
149b0 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e  {      /* Mappin
149c0 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
149d0 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
149e0 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
149f0 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
14a00 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
14a10 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
14a20 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
14a30 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ol;           /*
14a40 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20   Name of column 
14a50 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c  in zTo.  If NULL
14a60 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
14a70 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
14a80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
14a90 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
14aa0 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
14ab0 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
14ac0 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
14ad0 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
14ae0 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
14af0 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
14b00 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
14b10 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
14b20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
14b30 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
14b40 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
14b50 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
14b60 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
14b70 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
14b80 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
14b90 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
14ba0 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
14bb0 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
14bc0 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
14bd0 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
14be0 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
14bf0 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
14c00 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
14c10 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
14c20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
14c30 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
14c40 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
14c50 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
14c60 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
14c70 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
14c80 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
14c90 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
14ca0 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
14cb0 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
14cc0 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
14cd0 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
14ce0 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
14cf0 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
14d00 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
14d10 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
14d20 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
14d30 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
14d40 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
14d50 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
14d60 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
14d70 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
14d80 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
14d90 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
14da0 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
14db0 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
14dc0 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
14dd0 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
14de0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
14df0 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
14e00 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
14e10 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
14e20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
14e30 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
14e40 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
14e50 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
14e60 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
14e70 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
14e80 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
14e90 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
14ea0 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
14eb0 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
14ec0 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
14ed0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
14ee0 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
14ef0 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
14f00 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
14f10 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
14f20 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
14f30 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
14f40 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
14f50 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
14f60 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
14f70 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
14f80 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
14f90 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
14fa0 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
14fb0 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
14fc0 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  ey..**.** The fo
14fd0 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63  llowing symbolic
14fe0 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
14ff0 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68   to record which
15000 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69   type.** of acti
15010 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23  on to take..*/.#
15020 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20  define OE_None  
15030 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20     0   /* There 
15040 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74  is no constraint
15050 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65   to check */.#de
15060 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  fine OE_Rollback
15070 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65   1   /* Fail the
15080 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72   operation and r
15090 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
150a0 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
150b0 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32  ne OE_Abort    2
150c0 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63     /* Back out c
150d0 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f  hanges but do no
150e0 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
150f0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
15100 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20   OE_Fail     3  
15110 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65   /* Stop the ope
15120 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65  ration but leave
15130 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67   all prior chang
15140 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
15150 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a  _Ignore   4   /*
15160 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f   Ignore the erro
15170 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65  r. Do not do the
15180 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
15190 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
151a0 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20  Replace  5   /* 
151b0 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  Delete existing 
151c0 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20  record, then do 
151d0 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
151e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 55   */.#define OE_U
151f0 70 64 61 74 65 20 20 20 36 20 20 20 2f 2a 20 50  pdate   6   /* P
15200 72 6f 63 65 73 73 20 61 73 20 61 20 44 4f 20 55  rocess as a DO U
15210 50 44 41 54 45 20 69 6e 20 61 6e 20 75 70 73 65  PDATE in an upse
15220 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  rt */.#define OE
15230 5f 52 65 73 74 72 69 63 74 20 37 20 20 20 2f 2a  _Restrict 7   /*
15240 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
15250 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
15260 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
15270 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
15280 53 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f 2a 20  SetNull  8   /* 
15290 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
152a0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
152b0 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
152c0 53 65 74 44 66 6c 74 20 20 39 20 20 20 2f 2a 20  SetDflt  9   /* 
152d0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
152e0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
152f0 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
15300 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
15310 31 30 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  10  /* Cascade t
15320 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  he changes */.#d
15330 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74  efine OE_Default
15340 20 20 31 31 20 20 2f 2a 20 44 6f 20 77 68 61 74    11  /* Do what
15350 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ever the default
15360 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a   action is */...
15370 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
15380 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
15390 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
153a0 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69  passed as the fi
153b0 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
153c0 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65  to sqlite3VdbeKe
153d0 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20  yCompare and is 
153e0 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  used to control 
153f0 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
15400 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64  n of the two ind
15410 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e  ex keys..**.** N
15420 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72  ote that aSortOr
15430 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b  der[] and aColl[
15440 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20  ] have nField+1 
15450 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a  slots.  There.**
15460 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74   are nField slot
15470 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
15480 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68  s of an index th
15490 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f  en one extra slo
154a0 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77  t.** for the row
154b0 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  id at the end..*
154c0 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
154d0 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20   {.  u32 nRef;  
154e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
154f0 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73  er of references
15500 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f   to this KeyInfo
15510 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20   object */.  u8 
15520 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
15530 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
15540 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53  g - one of the S
15550 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65  QLITE_UTF* value
15560 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46  s */.  u16 nKeyF
15570 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ield;      /* Nu
15580 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75  mber of key colu
15590 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  mns in the index
155a0 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69   */.  u16 nAllFi
155b0 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74  eld;      /* Tot
155c0 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c  al columns, incl
155d0 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f  uding key plus o
155e0 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74  thers */.  sqlit
155f0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
15600 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
15610 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  onnection */.  u
15620 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
15630 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72     /* Sort order
15640 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
15650 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  . */.  CollSeq *
15660 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f  aColl[1];  /* Co
15670 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
15680 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f   for each term o
15690 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a  f the key */.};.
156a0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  ./*.** This obje
156b0 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  ct holds a recor
156c0 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e  d which has been
156d0 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
156e0 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66   individual.** f
156f0 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70  ields, for the p
15700 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67  urposes of doing
15710 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a   a comparison..*
15720 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
15730 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
15740 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
15750 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
15760 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
15770 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
15780 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
15790 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
157a0 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
157b0 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
157c0 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
157d0 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
157e0 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
157f0 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
15800 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
15810 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
15820 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
15830 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
15840 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e  ode..**.** An in
15850 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
15860 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20  bject serves as 
15870 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e  a "key" for doin
15880 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a  g a search on.**
15890 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65   an index b+tree
158a0 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68  . The goal of th
158b0 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66  e search is to f
158c0 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68  ind the entry th
158d0 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20  at.** is closed 
158e0 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72  to the key descr
158f0 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a  ibed by this obj
15900 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63  ect.  This objec
15910 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20  t might hold.** 
15920 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  just a prefix of
15930 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e   the key.  The n
15940 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
15950 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70  is given by.** p
15960 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e  KeyInfo->nField.
15970 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e  .**.** The r1 an
15980 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20  d r2 fields are 
15990 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65  the values to re
159a0 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79  turn if this key
159b0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a   is less than.**
159c0 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
159d0 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74   a key in the bt
159e0 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ree, respectivel
159f0 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f  y.  These are no
15a00 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64  rmally.** -1 and
15a10 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79   +1 respectively
15a20 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69  , but might be i
15a30 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e  nverted to +1 an
15a40 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72  d -1 if the b-tr
15a50 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43  ee.** is in DESC
15a60 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68   order..**.** Th
15a70 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
15a80 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61   functions actua
15a90 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75  lly return defau
15aa0 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20  lt_rc when they 
15ab0 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c  find.** an equal
15ac0 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64  s comparison.  d
15ad0 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
15ae0 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20   -1, 0, or +1.  
15af0 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  If there are.** 
15b00 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73  multiple entries
15b10 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77   in the b-tree w
15b20 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
15b30 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b   (when only look
15b40 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69  ing.** at the fi
15b50 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  rst pKeyInfo->nF
15b60 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66  ields,) then def
15b70 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73  ault_rc can be s
15b80 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63  et to -1 to.** c
15b90 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
15ba0 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74  to find the last
15bb0 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f   match, or +1 to
15bc0 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
15bd0 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65  h to.** find the
15be0 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a   first match..**
15bf0 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
15c00 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
15c10 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e   will set eqSeen
15c20 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79   to true if they
15c30 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64   ever.** get and
15c40 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77   equal results w
15c50 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68  hen comparing th
15c60 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  is structure to 
15c70 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e  a b-tree record.
15c80 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74  .** When default
15c90 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72  _rc!=0, the sear
15ca0 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20  ch might end up 
15cb0 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d  on the record im
15cc0 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66  mediately.** bef
15cd0 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61  ore the first ma
15ce0 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65  tch or immediate
15cf0 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73  ly after the las
15d00 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a  t match.  The.**
15d10 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69   eqSeen field wi
15d20 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74  ll indicate whet
15d30 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78  her or not an ex
15d40 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73  act match exists
15d50 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65   in the.** b-tre
15d60 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  e..*/.struct Unp
15d70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
15d80 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
15d90 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
15da0 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
15db0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
15dc0 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
15dd0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
15de0 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
15df0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15e00 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
15e10 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20  apMem[] */.  i8 
15e20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20  default_rc;     
15e30 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
15e40 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72  esult if keys ar
15e50 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20  e equal */.  u8 
15e60 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
15e70 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74   /* Error detect
15e80 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
15e90 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72  pare (CORRUPT or
15ea0 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20   NOMEM) */.  i8 
15eb0 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
15ec0 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
15ed0 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68  urn if (lhs < rh
15ee0 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20  s) */.  i8 r2;  
15ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
15f00 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
15f10 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f  f (lhs > rhs) */
15f20 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20  .  u8 eqSeen;   
15f30 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
15f40 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f  f an equality co
15f50 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65  mparison has bee
15f60 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  n seen */.};.../
15f70 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
15f80 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
15f90 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
15fa0 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
15fb0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
15fc0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
15fd0 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
15fe0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
15ff0 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
16000 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
16010 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
16020 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
16030 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
16040 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
16050 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
16060 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
16070 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
16080 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
16090 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
160a0 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
160b0 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
160c0 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
160d0 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
160e0 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
160f0 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
16100 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
16110 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
16120 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
16130 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
16140 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
16150 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
16160 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
16170 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
16180 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
16190 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
161a0 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
161b0 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
161c0 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
161d0 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
161e0 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d  e.** first colum
161f0 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
16200 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c3) has an inde
16210 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43  x of 2 in Ex1.aC
16220 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63  ol[]..** The sec
16230 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  ond column to be
16240 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61   indexed (c1) ha
16250 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
16260 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d  in.** Ex1.aCol[]
16270 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f  , hence Ex2.aiCo
16280 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a  lumn[1]==0..**.*
16290 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72  * The Index.onEr
162a0 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d  ror field determ
162b0 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
162c0 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20  not the indexed 
162d0 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20  columns.** must 
162e0 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68  be unique and wh
162f0 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79  at to do if they
16300 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20   are not.  When 
16310 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45  Index.onError=OE
16320 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61  _None,.** it mea
16330 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  ns this is not a
16340 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20   unique index.  
16350 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  Otherwise it is 
16360 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a  a unique index.*
16370 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
16380 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  of Index.onError
16390 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68   indicate the wh
163a0 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ich conflict res
163b0 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72  olution.** algor
163c0 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77  ithm to employ w
163d0 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d  henever an attem
163e0 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
163f0 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75  sert a non-uniqu
16400 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a  e.** element..**
16410 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e  .** While parsin
16420 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  g a CREATE TABLE
16430 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58   or CREATE INDEX
16440 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72   statement in or
16450 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61  der to.** genera
16460 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73  te VDBE code (as
16470 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73   opposed to pars
16480 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f  ing one read fro
16490 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74  m an sqlite_mast
164a0 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70  er.** table as p
164b0 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61  art of parsing a
164c0 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  n existing datab
164d0 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61  ase schema), tra
164e0 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73  nsient instances
164f0 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
16500 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65  cture may be cre
16510 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ated. In this ca
16520 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75  se the Index.tnu
16530 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a  m variable is.**
16540 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
16550 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
16560 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
16570 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  , not a database
16580 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
16590 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65  (it cannot - the
165a0 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69   database page i
165b0 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20  s not allocated 
165c0 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a  until the VDBE.*
165d0 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65  * program is exe
165e0 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76  cuted). See conv
165f0 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69  ertToWithoutRowi
16600 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74  dTable() for det
16610 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ails..*/.struct 
16620 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
16630 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
16640 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
16650 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31  is index */.  i1
16660 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  6 *aiColumn;    
16670 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
16680 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
16690 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
166a0 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c   1st is 0 */.  L
166b0 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45  ogEst *aiRowLogE
166c0 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  st;     /* From 
166d0 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
166e0 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
166f0 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
16700 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
16710 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
16720 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
16730 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
16740 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
16750 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
16760 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
16770 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
16780 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
16790 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
167a0 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
167b0 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
167c0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
167d0 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
167e0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
167f0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
16800 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
16810 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
16820 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
16830 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
16840 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
16850 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
16860 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43  const char **azC
16870 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oll;     /* Arra
16880 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
16890 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
168a0 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  r index */.  Exp
168b0 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65  r *pPartIdxWhere
168c0 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63  ;     /* WHERE c
168d0 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61  lause for partia
168e0 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45  l indices */.  E
168f0 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70  xprList *aColExp
16900 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  r;      /* Colum
16910 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  n expressions */
16920 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
16930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
16940 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
16950 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
16960 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
16970 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
16980 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
16990 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
169a0 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
169b0 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
169c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
169d0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
169e0 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
169f0 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
16a00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16a10 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
16a20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
16a30 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
16a40 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
16a50 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
16a60 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
16a70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
16a80 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
16a90 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f  dxType:2;      /
16aa0 2a 20 30 3a 4e 6f 72 6d 61 6c 20 31 3a 55 4e 49  * 0:Normal 1:UNI
16ab0 51 55 45 2c 20 32 3a 50 52 49 4d 41 52 59 20 4b  QUE, 2:PRIMARY K
16ac0 45 59 2c 20 33 3a 49 50 4b 20 2a 2f 0a 20 20 75  EY, 3:IPK */.  u
16ad0 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72  nsigned bUnorder
16ae0 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74  ed:1;   /* Use t
16af0 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d  his index for ==
16b00 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f   or IN queries o
16b10 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  nly */.  unsigne
16b20 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b  d uniqNotNull:1;
16b30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49    /* True if UNI
16b40 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c  QUE and NOT NULL
16b50 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73   for all columns
16b60 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
16b70 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f  sResized:1;    /
16b80 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65  * True if resize
16b90 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61  IndexObject() ha
16ba0 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
16bb0 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f  .  unsigned isCo
16bc0 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54  vering:1;   /* T
16bd0 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61  rue if this is a
16be0 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   covering index 
16bf0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  */.  unsigned no
16c00 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a  SkipScan:1;   /*
16c10 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75   Do not try to u
16c20 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20  se skip-scan if 
16c30 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  true */.  unsign
16c40 65 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20 20  ed hasStat1:1;  
16c50 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45 73     /* aiRowLogEs
16c60 74 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66 72  t values come fr
16c70 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
16c80 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 4e  */.  unsigned bN
16c90 6f 51 75 65 72 79 3a 31 3b 20 20 20 20 20 2f 2a  oQuery:1;     /*
16ca0 20 44 6f 20 6e 6f 74 20 75 73 65 20 74 68 69 73   Do not use this
16cb0 20 69 6e 64 65 78 20 74 6f 20 6f 70 74 69 6d 69   index to optimi
16cc0 7a 65 20 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  ze queries */.  
16cd0 75 6e 73 69 67 6e 65 64 20 62 41 73 63 4b 65 79  unsigned bAscKey
16ce0 42 75 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  Bug:1;   /* True
16cf0 20 69 66 20 74 68 65 20 62 62 61 37 62 36 39 66   if the bba7b69f
16d00 39 38 34 39 62 35 62 66 20 62 75 67 20 61 70 70  9849b5bf bug app
16d10 6c 69 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  lies */.#ifdef S
16d20 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
16d30 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
16d40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16d50 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
16d60 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
16d70 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
16d80 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
16d90 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
16da0 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
16db0 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
16dc0 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
16dd0 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
16de0 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
16df0 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
16e00 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
16e10 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
16e20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
16e30 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
16e40 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
16e50 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
16e60 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
16e70 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72  c stat1 data for
16e80 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
16e90 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
16ea0 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  0;        /* Non
16eb0 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d  -logarithmic num
16ec0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
16ed0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64  he index */.#end
16ee0 69 66 0a 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  if.  Bitmask col
16ef0 4e 6f 74 49 64 78 65 64 3b 20 20 20 20 20 2f 2a  NotIdxed;     /*
16f00 20 30 20 66 6f 72 20 75 6e 69 6e 64 65 78 65 64   0 for unindexed
16f10 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 54 61 62   columns in pTab
16f20 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
16f30 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
16f40 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a   Index.idxType.*
16f50 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
16f60 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20  _IDXTYPE_APPDEF 
16f70 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61       0   /* Crea
16f80 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45  ted using CREATE
16f90 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
16fa0 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
16fb0 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20  _UNIQUE      1  
16fc0 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61   /* Implements a
16fd0 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
16fe0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
16ff0 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
17000 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20  MARYKEY  2   /* 
17010 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  Is the PRIMARY K
17020 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  EY for the table
17030 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
17040 54 45 5f 49 44 58 54 59 50 45 5f 49 50 4b 20 20  TE_IDXTYPE_IPK  
17050 20 20 20 20 20 20 20 33 20 20 20 2f 2a 20 49 4e         3   /* IN
17060 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
17070 59 20 69 6e 64 65 78 20 2a 2f 0a 0a 2f 2a 20 52  Y index */../* R
17080 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
17090 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41  dex X is a PRIMA
170a0 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
170b0 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72  #define IsPrimar
170c0 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28  yKeyIndex(X)  ((
170d0 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c  X)->idxType==SQL
170e0 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
170f0 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75  ARYKEY)../* Retu
17100 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
17110 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69   X is a UNIQUE i
17120 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
17130 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29  IsUniqueIndex(X)
17140 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72        ((X)->onEr
17150 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f  ror!=OE_None)../
17160 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f  * The Index.aiCo
17170 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72  lumn[] values ar
17180 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74  e normally posit
17190 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75  ive integer.  Bu
171a0 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73  t.** there are s
171b0 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c  ome negative val
171c0 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70  ues that have sp
171d0 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a  ecial meaning:.*
171e0 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57  /.#define XN_ROW
171f0 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20  ID     (-1)     
17200 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
17210 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a  n is the rowid *
17220 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50  /.#define XN_EXP
17230 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20  R      (-2)     
17240 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
17250 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69  n is an expressi
17260 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  on */../*.** Eac
17270 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
17280 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
17290 61 74 34 20 74 61 62 6c 65 20 69 73 20 72 65 70  at4 table is rep
172a0 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
172b0 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74  ry.** using a st
172c0 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20  ructure of this 
172d0 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d  type.  See docum
172e0 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20  entation at the 
172f0 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e  top of the.** an
17300 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66  alyze.c source f
17310 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ile for addition
17320 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
17330 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53  */.struct IndexS
17340 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a  ample {.  void *
17350 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  p;          /* P
17360 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65  ointer to sample
17370 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  d record */.  in
17380 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
17390 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72  /* Size of recor
173a0 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  d in bytes */.  
173b0 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20  tRowcnt *anEq;  
173c0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
173d0 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74   of rows where t
173e0 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68  he key equals th
173f0 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
17400 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20  Rowcnt *anLt;   
17410 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
17420 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65  of rows where ke
17430 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
17440 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
17450 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20  tRowcnt *anDLt; 
17460 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
17470 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79   of distinct key
17480 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
17490 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   sample */.};../
174a0 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
174b0 6c 75 65 73 20 74 6f 20 75 73 65 20 77 69 74 68  lues to use with
174c0 69 6e 20 74 68 65 20 66 6c 61 67 73 20 61 72 67  in the flags arg
174d0 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
174e0 47 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23  GetToken()..*/.#
174f0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 4f  define SQLITE_TO
17500 4b 45 4e 5f 51 55 4f 54 45 44 20 20 20 20 30 78  KEN_QUOTED    0x
17510 31 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61 20  1 /* Token is a 
17520 71 75 6f 74 65 64 20 69 64 65 6e 74 69 66 69 65  quoted identifie
17530 72 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r. */.#define SQ
17540 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f  LITE_TOKEN_KEYWO
17550 52 44 20 20 20 30 78 32 20 2f 2a 20 54 6f 6b 65  RD   0x2 /* Toke
17560 6e 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20  n is a keyword. 
17570 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  */../*.** Each t
17580 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
17590 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
175a0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
175b0 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
175c0 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
175d0 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
175e0 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
175f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
17600 72 79 20 74 68 61 74 20 22 7a 22 20 70 6f 69 6e  ry that "z" poin
17610 74 73 20 74 6f 20 69 73 20 6f 77 6e 65 64 20 62  ts to is owned b
17620 79 20 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 2e  y other objects.
17630 20 20 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20 74    Take care.** t
17640 68 61 74 20 74 68 65 20 6f 77 6e 65 72 20 6f 66  hat the owner of
17650 20 74 68 65 20 22 7a 22 20 73 74 72 69 6e 67 20   the "z" string 
17660 64 6f 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f 63  does not dealloc
17670 61 74 65 20 74 68 65 20 73 74 72 69 6e 67 20 62  ate the string b
17680 65 66 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f 6b  efore.** the Tok
17690 65 6e 20 67 6f 65 73 20 6f 75 74 20 6f 66 20 73  en goes out of s
176a0 63 6f 70 65 21 20 20 56 65 72 79 20 6f 66 74 65  cope!  Very ofte
176b0 6e 2c 20 74 68 65 20 22 7a 22 20 70 6f 69 6e 74  n, the "z" point
176c0 73 20 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65 0a  s to some place.
176d0 2a 2a 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  ** in the middle
176e0 20 6f 66 20 74 68 65 20 50 61 72 73 65 2e 7a 53   of the Parse.zS
176f0 71 6c 20 74 65 78 74 2e 20 20 42 75 74 20 69 74  ql text.  But it
17700 20 6d 69 67 68 74 20 61 6c 73 6f 20 70 6f 69 6e   might also poin
17710 74 20 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69 63  t to a.** static
17720 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75   string..*/.stru
17730 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
17740 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
17750 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
17760 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
17770 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
17780 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
17790 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
177a0 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
177b0 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
177c0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
177d0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
177e0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
177f0 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
17800 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
17810 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
17820 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
17830 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17840 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
17850 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
17860 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
17870 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
17880 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
17890 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
178a0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
178b0 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
178c0 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
178d0 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
178e0 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
178f0 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
17900 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
17910 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
17920 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
17930 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
17940 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
17950 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
17960 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
17970 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
17980 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
17990 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
179a0 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
179b0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
179c0 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
179d0 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
179e0 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
179f0 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
17a00 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
17a10 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
17a20 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
17a30 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
17a40 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
17a50 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
17a60 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
17a70 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
17a80 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
17a90 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
17aa0 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
17ab0 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
17ac0 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
17ad0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
17ae0 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
17af0 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
17b00 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
17b10 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
17b30 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
17b40 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
17b50 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
17b60 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
17b70 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
17b80 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
17b90 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
17ba0 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
17bb0 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
17bc0 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
17bd0 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
17be0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17bf0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
17c00 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
17c10 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78  .  int mnReg, mx
17c20 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61  Reg;       /* Ra
17c30 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73  nge of registers
17c40 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
17c50 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f  Col and aFunc */
17c60 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
17c70 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
17c80 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
17c90 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
17ca0 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
17cb0 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
17cc0 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
17cd0 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
17ce0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
17cf0 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
17d00 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
17d10 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
17d20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
17d30 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
17d40 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
17d50 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17d70 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
17d80 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
17d90 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
17da0 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
17db0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
17dc0 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
17dd0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
17de0 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
17df0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
17e00 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
17e10 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
17e20 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
17e30 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
17e40 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
17e50 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
17e60 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
17e70 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
17e80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17e90 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
17ea0 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
17eb0 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
17ec0 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
17ed0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
17ee0 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
17ef0 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
17f00 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17f10 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
17f20 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
17f30 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
17f40 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
17f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17f60 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
17f70 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17f80 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
17f90 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
17fa0 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
17fb0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
17fc0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
17fd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17fe0 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
17ff0 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
18000 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
18010 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
18020 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
18030 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
18040 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
18050 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
18060 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
18070 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
18080 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
18090 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
180a0 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
180b0 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
180c0 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
180d0 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
180e0 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
180f0 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
18100 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18110 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
18120 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
18130 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
18140 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
18150 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
18160 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
18170 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
18180 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
18190 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
181a0 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
181b0 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
181c0 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
181d0 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
181e0 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
181f0 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
18200 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
18210 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
18220 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
18230 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
18240 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
18250 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
18260 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
18270 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
18280 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
18290 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
182a0 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
182b0 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
182c0 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
182d0 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
182e0 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
182f0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
18300 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
18310 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
18320 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
18330 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
18340 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
18350 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
18360 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
18370 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
18380 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
18390 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
183a0 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
183b0 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
183c0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
183d0 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
183e0 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
183f0 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
18400 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
18410 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
18420 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
18430 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
18440 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
18450 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
18460 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
18470 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
18480 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
18490 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
184a0 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
184b0 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
184c0 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
184d0 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
184e0 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
184f0 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
18500 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
18510 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
18520 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
18530 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
18540 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
18550 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
18560 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
18570 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20  AT, TK_BLOB,.** 
18580 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
18590 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
185a0 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
185b0 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
185c0 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
185d0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
185e0 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
185f0 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
18600 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
18610 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  the.** variable 
18620 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
18630 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18640 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
18650 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
18660 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
18670 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
18680 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
18690 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
186a0 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
186b0 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
186c0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
186d0 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
186e0 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
186f0 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
18700 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
18710 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
18720 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
18730 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
18740 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18750 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
18760 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
18770 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
18780 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
18790 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
187a0 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
187b0 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
187c0 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
187d0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
187e0 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
187f0 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
18800 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
18810 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
18820 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
18830 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
18840 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
18850 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
18860 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
18870 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
18880 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
18890 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76  .x.pList is.** v
188a0 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
188b0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
188c0 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
188d0 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
188e0 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
188f0 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
18900 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
18910 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
18920 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
18930 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
18940 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
18950 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
18960 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
18970 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
18980 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
18990 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
189a0 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
189b0 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
189c0 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
189d0 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
189e0 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
189f0 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
18a00 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
18a10 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
18a20 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
18a30 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
18a40 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
18a50 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
18a60 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
18a70 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
18a80 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
18a90 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
18aa0 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
18ab0 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
18ac0 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
18ad0 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72  ark.** character
18ae0 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67   '?' in the orig
18af0 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74  inal SQL) then t
18b00 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  he Expr.iTable h
18b10 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a  olds the index.*
18b20 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
18b30 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a  t variable..**.*
18b40 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
18b50 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72  ion is a subquer
18b60 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c  y then Expr.iCol
18b70 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  umn holds an int
18b80 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72  eger.** register
18b90 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69   number containi
18ba0 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ng the result of
18bb0 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20   the subquery.  
18bc0 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65  If the.** subque
18bd0 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74  ry gives a const
18be0 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e  ant result, then
18bf0 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20   iTable is -1.  
18c00 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a  If the subquery.
18c10 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65  ** gives a diffe
18c20 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64  rent answer at d
18c30 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64  ifferent times d
18c40 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
18c50 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68  processing.** th
18c60 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65  en iTable is the
18c70 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75   address of a su
18c80 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f  broutine that co
18c90 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75  mputes the subqu
18ca0 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ery..**.** If th
18cb0 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
18cc0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
18cd0 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
18ce0 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
18cf0 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
18d00 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
18d10 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
18d20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
18d30 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
18d40 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
18d50 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  efinition..**.**
18d60 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45   ALLOCATION NOTE
18d70 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62  S:.**.** Expr ob
18d80 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20  jects can use a 
18d90 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  lot of memory sp
18da0 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ace in database 
18db0 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68  schema.  To.** h
18dc0 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72  elp reduce memor
18dd0 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20  y requirements, 
18de0 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70  sometimes an Exp
18df0 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  r object will be
18e00 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20  .** truncated.  
18e10 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68  And to reduce th
18e20 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
18e30 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
18e40 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f  sometimes.** two
18e50 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62   or more Expr ob
18e60 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74  jects will be st
18e70 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ored in a single
18e80 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
18e90 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20  on,.** together 
18ea0 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  with Expr.zToken
18eb0 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20   strings..**.** 
18ec0 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
18ed0 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e  d and EP_TokenOn
18ee0 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ly flags are set
18ef0 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72   when.** an Expr
18f00 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63   object is trunc
18f10 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52  ated.  When EP_R
18f20 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74  educed is set, t
18f30 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63  hen all.** the c
18f40 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74  hild Expr object
18f50 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c  s in the Expr.pL
18f60 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69  eft and Expr.pRi
18f70 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20  ght subtrees.** 
18f80 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  are contained wi
18f90 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65  thin the same me
18fa0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
18fb0 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c    Note, however,
18fc0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62   that.** the sub
18fd0 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e  trees in Expr.x.
18fe0 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e  pList or Expr.x.
18ff0 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  pSelect are alwa
19000 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a  ys separately.**
19010 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61   allocated, rega
19020 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
19030 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75  r or not EP_Redu
19040 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73  ced is set..*/.s
19050 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75  truct Expr {.  u
19060 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
19070 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69        /* Operati
19080 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  on performed by 
19090 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63  this node */.  c
190a0 68 61 72 20 61 66 66 45 78 70 72 3b 20 20 20 20  har affExpr;    
190b0 20 20 20 20 20 20 2f 2a 20 61 66 66 69 6e 69 74        /* affinit
190c0 79 2c 20 6f 72 20 52 41 49 53 45 20 74 79 70 65  y, or RAISE type
190d0 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b   */.  u32 flags;
190e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
190f0 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20  Various flags.  
19100 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a  EP_* See below *
19110 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
19120 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20  char *zToken;   
19130 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
19140 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d  value. Zero term
19150 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f  inated and dequo
19160 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ted */.    int i
19170 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  Value;          
19180 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76    /* Non-negativ
19190 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
191a0 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a  if EP_IntValue *
191b0 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49  /.  } u;..  /* I
191c0 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  f the EP_TokenOn
191d0 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ly flag is set i
191e0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
191f0 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
19200 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
19210 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
19220 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
19230 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
19240 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
19250 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
19260 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
19270 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
19280 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
19290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
192a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
192b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
192c0 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70  ********/..  Exp
192d0 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20  r *pLeft;       
192e0 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e      /* Left subn
192f0 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ode */.  Expr *p
19300 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  Right;          
19310 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65  /* Right subnode
19320 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
19330 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73    ExprList *pLis
19340 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49  t;     /* op = I
19350 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
19360 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f  T, CASE, FUNCTIO
19370 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20  N, BETWEEN */.  
19380 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
19390 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73  t;     /* EP_xIs
193a0 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20  Select and op = 
193b0 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
193c0 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20  CT */.  } x;..  
193d0 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
193e0 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
193f0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
19400 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
19410 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
19420 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
19430 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
19440 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
19450 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
19460 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
19470 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
19480 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
19490 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
194a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66  **********/..#if
194e0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
194f0 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
19500 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
19510 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
19520 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
19530 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
19540 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62  endif.  int iTab
19550 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
19560 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72  * TK_COLUMN: cur
19570 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61  sor number of ta
19580 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75  ble holding colu
19590 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
195a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
195b0 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69  K_REGISTER: regi
195c0 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20  ster number.    
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47       ** TK_TRIGG
195f0 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20  ER: 1 -> new, 0 
19600 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20  -> old.         
19610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19620 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20  ** EP_Unlikely: 
19630 20 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73   134217728 times
19640 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20   likelihood.    
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
19670 54 3a 20 31 73 74 20 72 65 67 69 73 74 65 72 20  T: 1st register 
19680 6f 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72  of result vector
19690 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c   */.  ynVar iCol
196a0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  umn;         /* 
196b0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d  TK_COLUMN: colum
196c0 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72  n index.  -1 for
196d0 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20   rowid..        
196e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196f0 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a   ** TK_VARIABLE:
19700 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72   variable number
19710 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a   (always >= 1)..
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19730 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53           ** TK_S
19740 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f  ELECT_COLUMN: co
19750 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75  lumn of the resu
19760 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69  lt vector */.  i
19770 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  16 iAgg;        
19780 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
19790 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f  ntry in pAggInfo
197a0 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46  ->aCol[] or ->aF
197b0 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69  unc[] */.  i16 i
197c0 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20  RightJoinTable; 
197d0 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a    /* If EP_FromJ
197e0 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74  oin, the right t
197f0 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e  able of the join
19800 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19820 54 4b 5f 52 45 47 49 53 54 45 52 2f 54 4b 5f 54  TK_REGISTER/TK_T
19830 52 55 54 48 3a 20 6f 72 69 67 69 6e 61 6c 20 76  RUTH: original v
19840 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a  alue of Expr.op.
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43           ** TK_C
19870 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65  OLUMN: the value
19880 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f   of p5 for OP_Co
19890 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
198b0 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
198c0 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20  : nesting depth 
198d0 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
198e0 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
198f0 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
19900 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
19910 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e  FUNCTION */.  un
19920 69 6f 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65 20  ion {.    Table 
19930 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
19940 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54   /* TK_COLUMN: T
19950 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
19960 63 6f 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20 4e  column. Can be N
19970 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ULL.            
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19990 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f  * for a column o
199a0 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e  f an index on an
199b0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
199c0 20 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b     Window *pWin;
199d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 50 5f            /* EP_
199e0 57 69 6e 46 75 6e 63 3a 20 57 69 6e 64 6f 77 2f  WinFunc: Window/
199f0 46 69 6c 74 65 72 20 64 65 66 6e 20 66 6f 72 20  Filter defn for 
19a00 61 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  a function */.  
19a10 20 20 73 74 72 75 63 74 20 7b 20 20 20 20 20 20    struct {      
19a20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 49           /* TK_I
19a30 4e 2c 20 54 4b 5f 53 45 4c 45 43 54 2c 20 61 6e  N, TK_SELECT, an
19a40 64 20 54 4b 5f 45 58 49 53 54 53 20 2a 2f 0a 20  d TK_EXISTS */. 
19a50 20 20 20 20 20 69 6e 74 20 69 41 64 64 72 3b 20       int iAddr; 
19a60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
19a70 75 62 72 6f 75 74 69 6e 65 20 65 6e 74 72 79 20  ubroutine entry 
19a80 61 64 64 72 65 73 73 20 2a 2f 0a 20 20 20 20 20  address */.     
19a90 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
19aa0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
19ab0 74 65 72 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  ter used to hold
19ac0 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
19ad0 2a 2f 0a 20 20 20 20 7d 20 73 75 62 3b 0a 20 20  */.    } sub;.  
19ae0 7d 20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  } y;.};../*.** T
19af0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
19b00 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
19b10 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
19b20 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
19b30 2a 20 56 61 6c 75 65 20 72 65 73 74 72 69 63 74  * Value restrict
19b40 69 6f 6e 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ions:.**.**     
19b50 20 20 20 20 20 45 50 5f 41 67 67 20 3d 3d 20 4e       EP_Agg == N
19b60 43 5f 48 61 73 41 67 67 20 3d 3d 20 53 46 5f 48  C_HasAgg == SF_H
19b70 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 20 20 20  asAgg.**        
19b80 20 20 45 50 5f 57 69 6e 20 3d 3d 20 4e 43 5f 48    EP_Win == NC_H
19b90 61 73 57 69 6e 0a 2a 2f 0a 23 64 65 66 69 6e 65  asWin.*/.#define
19ba0 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78   EP_FromJoin  0x
19bb0 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e  000001 /* Origin
19bc0 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47  ates in ON/USING
19bd0 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72   clause of outer
19be0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
19bf0 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
19c00 30 30 30 30 30 32 20 2f 2a 20 41 67 67 72 65 67  000002 /* Aggreg
19c10 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
19c20 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
19c30 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
19c40 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30 30 30  _HasFunc   0x000
19c50 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  004 /* Contains 
19c60 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63  one or more func
19c70 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69 6e  tions of any kin
19c80 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
19c90 46 69 78 65 64 43 6f 6c 20 20 30 78 30 30 30 30  FixedCol  0x0000
19ca0 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d 6e 20  08 /* TK_Column 
19cb0 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 66 69 78  with a known fix
19cc0 65 64 20 76 61 6c 75 65 20 2a 2f 0a 23 64 65 66  ed value */.#def
19cd0 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20  ine EP_Agg      
19ce0 20 30 78 30 30 30 30 31 30 20 2f 2a 20 43 6f 6e   0x000010 /* Con
19cf0 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
19d00 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
19d10 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
19d20 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78   EP_VarSelect 0x
19d30 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63  000020 /* pSelec
19d40 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c  t is correlated,
19d50 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f   not constant */
19d60 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51  .#define EP_DblQ
19d70 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20 2f  uoted 0x000040 /
19d80 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72  * token.z was or
19d90 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e  iginally in "...
19da0 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  " */.#define EP_
19db0 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30 30  InfixFunc 0x0000
19dc0 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61  80 /* True for a
19dd0 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e  n infix function
19de0 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74  : LIKE, GLOB, et
19df0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  c */.#define EP_
19e00 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31  Collate   0x0001
19e10 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
19e20 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45  ins a TK_COLLATE
19e30 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65   operator */.#de
19e40 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20  fine EP_Generic 
19e50 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67    0x000200 /* Ig
19e60 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20  nore COLLATE or 
19e70 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73  affinity on this
19e80 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65   tree */.#define
19e90 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78   EP_IntValue  0x
19ea0 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65  000400 /* Intege
19eb0 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65  r value containe
19ec0 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f  d in u.iValue */
19ed0 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53  .#define EP_xIsS
19ee0 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20 2f  elect 0x000800 /
19ef0 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  * x.pSelect is v
19f00 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20  alid (otherwise 
19f10 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23  x.pList is) */.#
19f20 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20  define EP_Skip  
19f30 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20      0x001000 /* 
19f40 4f 70 65 72 61 74 6f 72 20 64 6f 65 73 20 6e 6f  Operator does no
19f50 74 20 63 6f 6e 74 72 69 62 75 74 65 20 74 6f 20  t contribute to 
19f60 61 66 66 69 6e 69 74 79 20 2a 2f 0a 23 64 65 66  affinity */.#def
19f70 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20  ine EP_Reduced  
19f80 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70   0x002000 /* Exp
19f90 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45  r struct EXPR_RE
19fa0 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20  DUCEDSIZE bytes 
19fb0 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
19fc0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30  EP_TokenOnly 0x0
19fd0 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  04000 /* Expr st
19fe0 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  ruct EXPR_TOKENO
19ff0 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  NLYSIZE bytes on
1a000 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
1a010 5f 57 69 6e 20 20 20 20 20 20 20 30 78 30 30 38  _Win       0x008
1a020 30 30 30 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  000 /* Contains 
1a030 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73  window functions
1a040 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d   */.#define EP_M
1a050 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30  emToken  0x01000
1a060 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c  0 /* Need to sql
1a070 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70  ite3DbFree() Exp
1a080 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66  r.zToken */.#def
1a090 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20  ine EP_NoReduce 
1a0a0 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e   0x020000 /* Can
1a0b0 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55  not EXPRDUP_REDU
1a0c0 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a  CE this Expr */.
1a0d0 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b  #define EP_Unlik
1a0e0 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a  ely  0x040000 /*
1a0f0 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c   unlikely() or l
1a100 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63  ikelihood() func
1a110 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
1a120 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30  EP_ConstFunc 0x0
1a130 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54  80000 /* A SQLIT
1a140 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
1a150 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63  or _SLOCHNG func
1a160 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
1a170 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31  EP_CanBeNull 0x1
1a180 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20  00000 /* Can be 
1a190 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54  null despite NOT
1a1a0 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
1a1b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
1a1c0 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30 30  ubquery  0x20000
1a1d0 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
1a1e0 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f  ns a TK_SELECT o
1a1f0 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  perator */.#defi
1a200 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20  ne EP_Alias     
1a210 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61  0x400000 /* Is a
1a220 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65  n alias for a re
1a230 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20  sult set column 
1a240 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65  */.#define EP_Le
1a250 61 66 20 20 20 20 20 20 30 78 38 30 30 30 30 30  af      0x800000
1a260 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20   /* Expr.pLeft, 
1a270 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c  .pRight, .u.pSel
1a280 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a  ect all NULL */.
1a290 23 64 65 66 69 6e 65 20 45 50 5f 57 69 6e 46 75  #define EP_WinFu
1a2a0 6e 63 20 20 30 78 31 30 30 30 30 30 30 20 2f 2a  nc  0x1000000 /*
1a2b0 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 20 77 69 74   TK_FUNCTION wit
1a2c0 68 20 45 78 70 72 2e 79 2e 70 57 69 6e 20 73 65  h Expr.y.pWin se
1a2d0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
1a2e0 53 75 62 72 74 6e 20 20 20 30 78 32 30 30 30 30  Subrtn   0x20000
1a2f0 30 30 20 2f 2a 20 55 73 65 73 20 45 78 70 72 2e  00 /* Uses Expr.
1a300 79 2e 73 75 62 2e 20 54 4b 5f 49 4e 2c 20 5f 53  y.sub. TK_IN, _S
1a310 45 4c 45 43 54 2c 20 6f 72 20 5f 45 58 49 53 54  ELECT, or _EXIST
1a320 53 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  S */.#define EP_
1a330 51 75 6f 74 65 64 20 20 20 30 78 34 30 30 30 30  Quoted   0x40000
1a340 30 30 20 2f 2a 20 54 4b 5f 49 44 20 77 61 73 20  00 /* TK_ID was 
1a350 6f 72 69 67 69 6e 61 6c 6c 79 20 71 75 6f 74 65  originally quote
1a360 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
1a370 53 74 61 74 69 63 20 20 20 30 78 38 30 30 30 30  Static   0x80000
1a380 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65  00 /* Held in me
1a390 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65  mory not obtaine
1a3a0 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
1a3b0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 73  */.#define EP_Is
1a3c0 54 72 75 65 20 20 30 78 31 30 30 30 30 30 30 30  True  0x10000000
1a3d0 20 2f 2a 20 41 6c 77 61 79 73 20 68 61 73 20 62   /* Always has b
1a3e0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 6f 66 20  oolean value of 
1a3f0 54 52 55 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  TRUE */.#define 
1a400 45 50 5f 49 73 46 61 6c 73 65 20 30 78 32 30 30  EP_IsFalse 0x200
1a410 30 30 30 30 30 20 2f 2a 20 41 6c 77 61 79 73 20  00000 /* Always 
1a420 68 61 73 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  has boolean valu
1a430 65 20 6f 66 20 46 41 4c 53 45 20 2a 2f 0a 0a 2f  e of FALSE */../
1a440 2a 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f 70  *.** The EP_Prop
1a450 61 67 61 74 65 20 6d 61 73 6b 20 69 73 20 61 20  agate mask is a 
1a460 73 65 74 20 6f 66 20 70 72 6f 70 65 72 74 69 65  set of propertie
1a470 73 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69 63  s that automatic
1a480 61 6c 6c 79 20 70 72 6f 70 61 67 61 74 65 0a 2a  ally propagate.*
1a490 2a 20 75 70 77 61 72 64 73 20 69 6e 74 6f 20 70  * upwards into p
1a4a0 61 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a  arent nodes..*/.
1a4b0 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61  #define EP_Propa
1a4c0 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65  gate (EP_Collate
1a4d0 7c 45 50 5f 53 75 62 71 75 65 72 79 7c 45 50 5f  |EP_Subquery|EP_
1a4e0 48 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  HasFunc)../*.** 
1a4f0 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
1a500 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
1a510 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
1a520 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45  bits in the.** E
1a530 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
1a540 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72  .*/.#define Expr
1a550 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29  HasProperty(E,P)
1a560 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67       (((E)->flag
1a570 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
1a580 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f  ne ExprHasAllPro
1a590 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45  perty(E,P)  (((E
1a5a0 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  )->flags&(P))==(
1a5b0 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  P)).#define Expr
1a5c0 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29  SetProperty(E,P)
1a5d0 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c       (E)->flags|
1a5e0 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70  =(P).#define Exp
1a5f0 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45  rClearProperty(E
1a600 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  ,P)   (E)->flags
1a610 26 3d 7e 28 50 29 0a 23 64 65 66 69 6e 65 20 45  &=~(P).#define E
1a620 78 70 72 41 6c 77 61 79 73 54 72 75 65 28 45 29  xprAlwaysTrue(E)
1a630 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
1a640 28 45 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f  (EP_FromJoin|EP_
1a650 49 73 54 72 75 65 29 29 3d 3d 45 50 5f 49 73 54  IsTrue))==EP_IsT
1a660 72 75 65 29 0a 23 64 65 66 69 6e 65 20 45 78 70  rue).#define Exp
1a670 72 41 6c 77 61 79 73 46 61 6c 73 65 28 45 29 20  rAlwaysFalse(E) 
1a680 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 45   (((E)->flags&(E
1a690 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73  P_FromJoin|EP_Is
1a6a0 46 61 6c 73 65 29 29 3d 3d 45 50 5f 49 73 46 61  False))==EP_IsFa
1a6b0 6c 73 65 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70  lse)../* The Exp
1a6c0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
1a6d0 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
1a6e0 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e  for Verification
1a6f0 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a  , Validation,.**
1a700 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
1a710 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72  on only.  It wor
1a720 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50  ks like ExprSetP
1a730 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67  roperty() during
1a740 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65   VVA.** processe
1a750 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70  s but is a no-op
1a760 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a   for delivery..*
1a770 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1a780 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45  DEBUG.# define E
1a790 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
1a7a0 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61  y(E,P)  (E)->fla
1a7b0 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20  gs|=(P).#else.# 
1a7c0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
1a7d0 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23  AProperty(E,P).#
1a7e0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
1a7f0 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
1a800 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
1a810 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79  ytes required by
1a820 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a   a normal Expr.*
1a830 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
1a840 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
1a850 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
1a860 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
1a870 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78  ags.** and an Ex
1a880 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
1a890 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
1a8a0 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65  flag set..*/.#de
1a8b0 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49  fine EXPR_FULLSI
1a8c0 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a  ZE           siz
1a8d0 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20  eof(Expr)       
1a8e0 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65      /* Full size
1a8f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
1a900 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20  _REDUCEDSIZE    
1a910 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
1a920 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f  r,iTable)  /* Co
1a930 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f  mmon features */
1a940 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f  .#define EXPR_TO
1a950 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20  KENONLYSIZE     
1a960 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70   offsetof(Expr,p
1a970 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72  Left)   /* Fewer
1a980 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a   features */../*
1a990 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64  .** Flags passed
1a9a0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45   to the sqlite3E
1a9b0 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f  xprDup() functio
1a9c0 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65  n. See the heade
1a9d0 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f  r comment.** abo
1a9e0 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  ve sqlite3ExprDu
1a9f0 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  p() for details.
1aa00 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
1aa10 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20  DUP_REDUCE      
1aa20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73     0x0001  /* Us
1aa30 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20  ed reduced-size 
1aa40 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f  Expr nodes */../
1aa50 2a 0a 2a 2a 20 54 72 75 65 20 69 66 20 74 68 65  *.** True if the
1aa60 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 73 73   expression pass
1aa70 65 64 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e  ed as an argumen
1aa80 74 20 77 61 73 20 61 20 66 75 6e 63 74 69 6f 6e  t was a function
1aa90 20 77 69 74 68 0a 2a 2a 20 61 6e 20 4f 56 45 52   with.** an OVER
1aaa0 28 29 20 63 6c 61 75 73 65 20 28 61 20 77 69 6e  () clause (a win
1aab0 64 6f 77 20 66 75 6e 63 74 69 6f 6e 29 2e 0a 2a  dow function)..*
1aac0 2f 0a 23 64 65 66 69 6e 65 20 49 73 57 69 6e 64  /.#define IsWind
1aad0 6f 77 46 75 6e 63 28 70 29 20 28 20 5c 0a 20 20  owFunc(p) ( \.  
1aae0 20 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74    ExprHasPropert
1aaf0 79 28 28 70 29 2c 20 45 50 5f 57 69 6e 46 75 6e  y((p), EP_WinFun
1ab00 63 29 20 26 26 20 70 2d 3e 79 2e 70 57 69 6e 2d  c) && p->y.pWin-
1ab10 3e 65 46 72 6d 54 79 70 65 21 3d 54 4b 5f 46 49  >eFrmType!=TK_FI
1ab20 4c 54 45 52 20 5c 0a 29 0a 0a 2f 2a 0a 2a 2a 20  LTER \.)../*.** 
1ab30 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
1ab40 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
1ab50 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
1ab60 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
1ab70 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
1ab80 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
1ab90 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
1aba0 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
1abb0 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
1abc0 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
1abd0 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
1abe0 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
1abf0 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
1ac00 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
1ac10 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
1ac20 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
1ac30 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
1ac40 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
1ac50 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
1ac60 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
1ac70 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
1ac80 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
1ac90 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
1aca0 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
1acb0 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
1acc0 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
1acd0 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
1ace0 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
1acf0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
1ad00 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
1ad10 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
1ad20 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
1ad30 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
1ad40 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
1ad50 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
1ad60 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
1ad70 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
1ad80 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
1ad90 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
1ada0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
1adb0 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
1adc0 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
1add0 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
1ade0 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
1adf0 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
1ae00 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
1ae10 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
1ae20 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
1ae30 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
1ae40 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
1ae50 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
1ae60 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
1ae70 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
1ae80 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
1ae90 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
1aea0 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
1aeb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1aec0 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
1aed0 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
1aee0 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
1aef0 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
1af00 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
1af10 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
1af20 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
1af30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1af40 54 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  The parse tree f
1af50 6f 72 20 74 68 69 73 20 65 78 70 72 65 73 73 69  or this expressi
1af60 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  on */.    char *
1af70 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
1af80 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
1af90 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
1afa0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
1afb0 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
1afc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69            /* Ori
1afd0 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
1afe0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  e expression */.
1aff0 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72      u8 sortOrder
1b000 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ;           /* 1
1b010 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
1b020 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e  or ASC */.    un
1b030 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
1b040 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
1b050 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
1b060 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
1b070 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
1b080 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
1b090 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
1b0a0 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
1b0b0 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73  OLUMN */.    uns
1b0c0 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a  igned reusable :
1b0d0 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  1;   /* Constant
1b0e0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72   expression is r
1b0f0 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  eusable */.    u
1b100 6e 73 69 67 6e 65 64 20 62 53 6f 72 74 65 72 52  nsigned bSorterR
1b110 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20  ef :1; /* Defer 
1b120 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c  evaluation until
1b130 20 61 66 74 65 72 20 73 6f 72 74 69 6e 67 20 2a   after sorting *
1b140 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
1b150 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
1b160 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
1b170 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
1b180 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
1b190 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
1b1a0 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
1b1b0 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
1b1c0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1b1d0 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
1b1e0 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
1b1f0 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
1b200 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
1b210 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
1b220 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
1b230 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
1b240 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
1b250 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  ;.  } a[1];     
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b270 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63  One slot for eac
1b280 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
1b290 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
1b2a0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1b2b0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
1b2c0 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73  ure can hold a s
1b2d0 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64  imple list of id
1b2e0 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75  entifiers,.** su
1b2f0 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22  ch as the list "
1b300 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f  a,b,c" in the fo
1b310 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
1b320 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49  ts:.**.**      I
1b330 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
1b340 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a  ,c) VALUES ...;.
1b350 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  **      CREATE I
1b360 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c  NDEX idx ON t(a,
1b370 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52  b,c);.**      CR
1b380 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69  EATE TRIGGER tri
1b390 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  g BEFORE UPDATE 
1b3a0 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b  ON t(a,b,c) ...;
1b3b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73  .**.** The IdLis
1b3c0 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73  t.a.idx field is
1b3d0 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49   used when the I
1b3e0 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73  dList represents
1b3f0 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20   the list of.** 
1b400 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74  column names aft
1b410 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  er a table name 
1b420 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
1b430 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20  tement.  In the 
1b440 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20  statement.**.** 
1b450 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1b460 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a  t(a,b,c) ....**.
1b470 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65  ** If "a" is the
1b480 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   k-th column of 
1b490 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20  table "t", then 
1b4a0 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d  IdList.a[0].idx=
1b4b0 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64  =k..*/.struct Id
1b4c0 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20  List {.  struct 
1b4d0 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  IdList_item {.  
1b4e0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1b4f0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
1b500 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f  he identifier */
1b510 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20  .    int idx;   
1b520 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1b530 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43  in some Table.aC
1b540 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ol[] of a column
1b550 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a   named zName */.
1b560 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49    } *a;.  int nI
1b570 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
1b580 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
1b590 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
1b5a0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
1b5b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1b5c0 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74  ture describes t
1b5d0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
1b5e0 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
1b5f0 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61  ment..** Each ta
1b600 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
1b610 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
1b620 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65  se is a separate
1b630 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74   element of.** t
1b640 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61  he SrcList.a[] a
1b650 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  rray..**.** With
1b660 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66   the addition of
1b670 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
1b680 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20  se support, the 
1b690 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1b6a0 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20  ure.** can also 
1b6b0 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  be used to descr
1b6c0 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  ibe a particular
1b6d0 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74   table such as t
1b6e0 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a  he table that.**
1b6f0 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   is modified by 
1b700 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
1b710 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  E, or UPDATE sta
1b720 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e  tement.  In stan
1b730 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63  dard SQL,.** suc
1b740 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62  h a table must b
1b750 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a  e a simple name:
1b760 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c   ID.  But in SQL
1b770 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63  ite, the table c
1b780 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65  an.** now be ide
1b790 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74  ntified by a dat
1b7a0 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f  abase name, a do
1b7b0 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  t, then the tabl
1b7c0 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a  e name: ID.ID..*
1b7d0 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70  *.** The jointyp
1b7e0 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f  e starts out sho
1b7f0 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79  wing the join ty
1b800 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63  pe between the c
1b810 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20  urrent table.** 
1b820 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62  and the next tab
1b830 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20  le on the list. 
1b840 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c   The parser buil
1b850 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73  ds the list this
1b860 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c   way..** But sql
1b870 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
1b880 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72  JoinType() later
1b890 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e   shifts the join
1b8a0 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61  types so that ea
1b8b0 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65  ch.** jointype e
1b8c0 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69  xpresses the joi
1b8d0 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61  n between the ta
1b8e0 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
1b8f0 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  ious table..**.*
1b900 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64  * In the colUsed
1b910 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68   field, the high
1b920 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20  -order bit (bit 
1b930 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68  63) is set if th
1b940 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61  e table.** conta
1b950 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33  ins more than 63
1b960 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65   columns and the
1b970 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20   64-th or later 
1b980 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a  column is used..
1b990 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73  */.struct SrcLis
1b9a0 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20  t {.  int nSrc; 
1b9b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b9c0 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75   of tables or su
1b9d0 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20  bqueries in the 
1b9e0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
1b9f0 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20   u32 nAlloc;    
1ba00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1ba10 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64  ntries allocated
1ba20 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f   in a[] below */
1ba30 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  .  struct SrcLis
1ba40 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68  t_item {.    Sch
1ba50 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f  ema *pSchema;  /
1ba60 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63  * Schema to whic
1ba70 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66  h this item is f
1ba80 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  ixed */.    char
1ba90 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a   *zDatabase;  /*
1baa0 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
1bab0 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74  e holding this t
1bac0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
1bad0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
1bae0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
1baf0 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
1bb00 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54  zAlias;     /* T
1bb10 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61  he "B" part of a
1bb20 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65   "A AS B" phrase
1bb30 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  .  zName is the 
1bb40 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  "A" */.    Table
1bb50 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
1bb60 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72  An SQL table cor
1bb70 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e  responding to zN
1bb80 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ame */.    Selec
1bb90 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20  t *pSelect;  /* 
1bba0 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  A SELECT stateme
1bbb0 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65  nt used in place
1bbc0 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
1bbd0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
1bbe0 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64  FillSub;  /* Add
1bbf0 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69  ress of subrouti
1bc00 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61  ne to manifest a
1bc10 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20   subquery */.   
1bc20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
1bc30 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1bc40 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64  olding return ad
1bc50 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c  dress of addrFil
1bc60 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  lSub */.    int 
1bc70 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a  regResult;    /*
1bc80 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   Registers holdi
1bc90 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  ng results of a 
1bca0 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1bcb0 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
1bcc0 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20   u8 jointype;   
1bcd0 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f     /* Type of jo
1bce0 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  in between this 
1bcf0 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
1bd00 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20  evious */.      
1bd10 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65  unsigned notInde
1bd20 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72  xed :1;    /* Tr
1bd30 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
1bd40 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
1bd50 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  use */.      uns
1bd60 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42  igned isIndexedB
1bd70 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  y :1;   /* True 
1bd80 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49  if there is an I
1bd90 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
1bda0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1bdb0 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b  ed isTabFunc :1;
1bdc0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1bdd0 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
1bde0 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a  ction syntax */.
1bdf0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1be00 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20  sCorrelated :1; 
1be10 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d   /* True if sub-
1be20 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61  query is correla
1be30 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ted */.      uns
1be40 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69  igned viaCorouti
1be50 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65  ne :1;  /* Imple
1be60 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72  mented as a co-r
1be70 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20  outine */.      
1be80 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72  unsigned isRecur
1be90 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72  sive :1;   /* Tr
1bea0 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65  ue for recursive
1beb0 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49   reference in WI
1bec0 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a  TH */.    } fg;.
1bed0 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
1bee0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
1bef0 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
1bf00 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
1bf10 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
1bf20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
1bf30 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
1bf40 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
1bf50 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
1bf60 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
1bf70 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
1bf80 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
1bf90 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
1bfa0 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
1bfb0 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66  t if column N of
1bfc0 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
1bfd0 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
1bfe0 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65     char *zIndexe
1bff0 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74  dBy;    /* Ident
1c000 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45  ifier from "INDE
1c010 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22  XED BY <zIndex>"
1c020 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1c030 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63   ExprList *pFunc
1c040 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e  Arg;  /* Argumen
1c050 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75  ts to table-valu
1c060 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ed-function */. 
1c070 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64     } u1;.    Ind
1c080 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f  ex *pIBIndex;  /
1c090 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  * Index structur
1c0a0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1c0b0 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79  to u1.zIndexedBy
1c0c0 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   */.  } a[1];   
1c0d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1c0e0 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
1c0f0 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68  identifier on th
1c100 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
1c110 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61  .** Permitted va
1c120 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c  lues of the SrcL
1c130 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66  ist.a.jointype f
1c140 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ield.*/.#define 
1c150 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30  JT_INNER     0x0
1c160 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69  001    /* Any ki
1c170 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63  nd of inner or c
1c180 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ross join */.#de
1c190 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20  fine JT_CROSS   
1c1a0 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45    0x0002    /* E
1c1b0 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74  xplicit use of t
1c1c0 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64  he CROSS keyword
1c1d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e   */.#define JT_N
1c1e0 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20  ATURAL   0x0004 
1c1f0 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
1c200 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20   "natural" join 
1c210 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45  */.#define JT_LE
1c220 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20  FT      0x0008  
1c230 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20    /* Left outer 
1c240 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1c250 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30  JT_RIGHT     0x0
1c260 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20  010    /* Right 
1c270 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
1c280 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20  efine JT_OUTER  
1c290 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20     0x0020    /* 
1c2a0 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77  The "OUTER" keyw
1c2b0 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ord is present *
1c2c0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52  /.#define JT_ERR
1c2d0 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20  OR     0x0040   
1c2e0 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75   /* unknown or u
1c2f0 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20  nsupported join 
1c300 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  type */.../*.** 
1c310 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74  Flags appropriat
1c320 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46  e for the wctrlF
1c330 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f  lags parameter o
1c340 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65  f sqlite3WhereBe
1c350 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65  gin().** and the
1c360 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c   WhereInfo.wctrl
1c370 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a  Flags member..**
1c380 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
1c390 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
1c3a0 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
1c3b0 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53 45 5f  *     WHERE_USE_
1c3c0 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69 78  LIMIT  == SF_Fix
1c3d0 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69  edLimit.*/.#defi
1c3e0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1c3f0 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30  _NORMAL   0x0000
1c400 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65   /* No-op */.#de
1c410 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1c420 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30  BY_MIN      0x00
1c430 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  01 /* ORDER BY p
1c440 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69  rocessing for mi
1c450 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  n() func */.#def
1c460 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1c470 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30  Y_MAX      0x000
1c480 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  2 /* ORDER BY pr
1c490 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78  ocessing for max
1c4a0 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
1c4b0 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
1c4c0 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34  _DESIRED  0x0004
1c4d0 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f   /* Want to do o
1c4e0 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44  ne-pass UPDATE/D
1c4f0 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
1c500 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d   WHERE_ONEPASS_M
1c510 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38 20 2f  ULTIROW 0x0008 /
1c520 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20  * ONEPASS is ok 
1c530 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f  with multiple ro
1c540 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ws */.#define WH
1c550 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
1c560 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 4f  K    0x0010 /* O
1c570 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
1c580 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
1c590 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c5a0 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45 20 20  E_OR_SUBCLAUSE  
1c5b0 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50 72 6f     0x0020 /* Pro
1c5c0 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d 57 48  cessing a sub-WH
1c5d0 45 52 45 20 61 73 20 70 61 72 74 20 6f 66 0a 20  ERE as part of. 
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c600 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f       ** the OR o
1c610 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a  ptimization  */.
1c620 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52  #define WHERE_GR
1c630 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30  OUPBY          0
1c640 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65 72 42  x0040 /* pOrderB
1c650 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52  y is really a GR
1c660 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
1c670 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1c680 42 59 20 20 20 20 20 20 20 30 78 30 30 38 30 20  BY       0x0080 
1c690 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72  /* pOrderby is r
1c6a0 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54  eally a DISTINCT
1c6b0 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
1c6c0 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49  ne WHERE_WANT_DI
1c6d0 53 54 49 4e 43 54 20 20 20 20 30 78 30 31 30 30  STINCT    0x0100
1c6e0 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e   /* All output n
1c6f0 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69  eeds to be disti
1c700 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nct */.#define W
1c710 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50  HERE_SORTBYGROUP
1c720 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20        0x0200 /* 
1c730 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57  Support sqlite3W
1c740 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a  hereIsSorted() *
1c750 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c760 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20 20 20  SEEK_TABLE      
1c770 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f   0x0400 /* Do no
1c780 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 6f 6e  t defer seeks on
1c790 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23   main table */.#
1c7a0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1c7b0 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20 30 78  ERBY_LIMIT    0x
1c7c0 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b  0800 /* ORDERBY+
1c7d0 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e  LIMIT on the inn
1c7e0 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69  er loop */.#defi
1c7f0 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e  ne WHERE_SEEK_UN
1c800 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30 30 30  IQ_TABLE  0x1000
1c810 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72   /* Do not defer
1c820 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71 75 65   seeks if unique
1c830 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
1c840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
1c850 20 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74     0x2000    not
1c860 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20   currently used 
1c870 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c880 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20  _USE_LIMIT      
1c890 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20    0x4000 /* Use 
1c8a0 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73  the LIMIT in cos
1c8b0 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20  t estimates */. 
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8d0 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
1c8e0 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72  8000    not curr
1c8f0 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f  ently used */../
1c900 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
1c910 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
1c920 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
1c930 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  nct().*/.#define
1c940 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1c950 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20  NOOP      0  /* 
1c960 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
1c970 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65   not used */.#de
1c980 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1c990 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20  NCT_UNIQUE    1 
1c9a0 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65   /* No duplicate
1c9b0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
1c9c0 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45  RE_DISTINCT_ORDE
1c9d0 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20  RED   2  /* All 
1c9e0 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61  duplicates are a
1c9f0 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69  djacent */.#defi
1ca00 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1ca10 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f  T_UNORDERED 3  /
1ca20 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65  * Duplicates are
1ca30 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f   scattered */../
1ca40 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65  *.** A NameConte
1ca50 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e  xt defines a con
1ca60 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f  text in which to
1ca70 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61   resolve table a
1ca80 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d  nd column.** nam
1ca90 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74  es.  The context
1caa0 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c   consists of a l
1cab0 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74  ist of tables (t
1cac0 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65  he pSrcList) fie
1cad0 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74  ld and.** a list
1cae0 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73   of named expres
1caf0 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20  sion (pEList).  
1cb00 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73  The named expres
1cb10 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a  sion list may.**
1cb20 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70   be NULL.  The p
1cb30 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  Src corresponds 
1cb40 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  to the FROM clau
1cb50 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f  se of a SELECT o
1cb60 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c  r.** to the tabl
1cb70 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  e being operated
1cb80 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55   on by INSERT, U
1cb90 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45  PDATE, or DELETE
1cba0 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74  .  The.** pEList
1cbb0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1cbc0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f  the result set o
1cbd0 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69  f a SELECT and i
1cbe0 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74  s NULL for.** ot
1cbf0 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  her statements..
1cc00 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  **.** NameContex
1cc10 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64  ts can be nested
1cc20 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e  .  When resolvin
1cc30 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e  g names, the inn
1cc40 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65  er-most.** conte
1cc50 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66  xt is searched f
1cc60 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74  irst.  If no mat
1cc70 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
1cc80 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63   next outer.** c
1cc90 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65  ontext is checke
1cca0 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  d.  If there is 
1ccb0 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20  still no match, 
1ccc0 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74  the next context
1ccd0 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20  .** is checked. 
1cce0 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f   This process co
1ccf0 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69  ntinues until ei
1cd00 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20  ther a match is 
1cd10 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20  found.** or all 
1cd20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65  contexts are che
1cd30 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63  ck.  When a matc
1cd40 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
1cd50 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a  nRef member of.*
1cd60 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f  * the context co
1cd70 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74  ntaining the mat
1cd80 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ch is incremente
1cd90 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  d..**.** Each su
1cda0 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
1cdb0 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
1cdc0 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
1cdd0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
1cde0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
1cdf0 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
1ce00 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
1ce10 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
1ce20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
1ce30 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
1ce40 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
1ce50 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
1ce60 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
1ce70 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
1ce80 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
1ce90 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
1cea0 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
1ceb0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
1cec0 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
1ced0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
1cee0 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
1cef0 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
1cf00 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
1cf10 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  s */.  union {. 
1cf20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c     ExprList *pEL
1cf30 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f  ist;    /* Optio
1cf40 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75  nal list of resu
1cf50 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt-set columns *
1cf60 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f 20 2a 70  /.    AggInfo *p
1cf70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e  AggInfo;   /* In
1cf80 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1cf90 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68  aggregates at th
1cfa0 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20  is level */.    
1cfb0 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b  Upsert *pUpsert;
1cfc0 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c       /* ON CONFL
1cfd0 49 43 54 20 63 6c 61 75 73 65 20 69 6e 66 6f 72  ICT clause infor
1cfe0 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 6e 20 75  mation from an u
1cff0 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20 75 4e 43  psert */.  } uNC
1d000 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  ;.  NameContext 
1d010 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
1d020 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74   outer name cont
1d030 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f  ext.  NULL for o
1d040 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e  utermost */.  in
1d050 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
1d060 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1d070 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62  names resolved b
1d080 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a  y this context *
1d090 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
1d0a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1d0b0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63  er of errors enc
1d0c0 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72  ountered while r
1d0d0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a  esolving names *
1d0e0 2f 0a 20 20 69 6e 74 20 6e 63 46 6c 61 67 73 3b  /.  int ncFlags;
1d0f0 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f           /* Zero
1d100 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c   or more NC_* fl
1d110 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ags defined belo
1d120 77 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  w */.  Select *p
1d130 57 69 6e 53 65 6c 65 63 74 3b 20 20 2f 2a 20 53  WinSelect;  /* S
1d140 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1d150 66 6f 72 20 61 6e 79 20 77 69 6e 64 6f 77 20 66  for any window f
1d160 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
1d170 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
1d180 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d  lues for the Nam
1d190 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67  eContext, ncFlag
1d1a0 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56  s field..**.** V
1d1b0 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1d1c0 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69   (all checked vi
1d1d0 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
1d1e0 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20     NC_HasAgg    
1d1f0 3d 3d 20 53 46 5f 48 61 73 41 67 67 20 20 20 20  == SF_HasAgg    
1d200 3d 3d 20 45 50 5f 41 67 67 0a 2a 2a 20 20 20 20  == EP_Agg.**    
1d210 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  NC_MinMaxAgg == 
1d220 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  SF_MinMaxAgg == 
1d230 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1d240 41 58 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 57  AX.**    NC_HasW
1d250 69 6e 20 20 20 20 3d 3d 20 45 50 5f 57 69 6e 0a  in    == EP_Win.
1d260 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  **.*/.#define NC
1d270 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30  _AllowAgg  0x000
1d280 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  1  /* Aggregate 
1d290 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
1d2a0 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64  lowed here */.#d
1d2b0 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78  efine NC_PartIdx
1d2c0 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54 72     0x0002  /* Tr
1d2d0 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1d2e0 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
1d2f0 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
1d300 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
1d310 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0004  /* True if
1d320 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
1d330 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
1d340 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
1d350 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
1d360 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69  x0008  /* True i
1d370 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
1d380 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
1d390 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1d3a0 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30  NC_HasAgg    0x0
1d3b0 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  010  /* One or m
1d3c0 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
1d3d0 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a  nctions seen */.
1d3e0 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45 78  #define NC_IdxEx
1d3f0 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20  pr   0x0020  /* 
1d400 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1d410 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45  g columns of CRE
1d420 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
1d430 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65 63  fine NC_VarSelec
1d440 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20 63  t 0x0040  /* A c
1d450 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
1d460 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e  ry has been seen
1d470 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55   */.#define NC_U
1d480 45 4c 69 73 74 20 20 20 20 30 78 30 30 38 30 20  EList    0x0080 
1d490 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e   /* True if uNC.
1d4a0 70 45 4c 69 73 74 20 69 73 20 75 73 65 64 20 2a  pEList is used *
1d4b0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 41 67  /.#define NC_UAg
1d4c0 67 49 6e 66 6f 20 20 30 78 30 31 30 30 20 20 2f  gInfo  0x0100  /
1d4d0 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 41  * True if uNC.pA
1d4e0 67 67 49 6e 66 6f 20 69 73 20 75 73 65 64 20 2a  ggInfo is used *
1d4f0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 55 70  /.#define NC_UUp
1d500 73 65 72 74 20 20 20 30 78 30 32 30 30 20 20 2f  sert   0x0200  /
1d510 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 55  * True if uNC.pU
1d520 70 73 65 72 74 20 69 73 20 75 73 65 64 20 2a 2f  psert is used */
1d530 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d  .#define NC_MinM
1d540 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a  axAgg 0x1000  /*
1d550 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61   min/max aggrega
1d560 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e  tes seen.  See n
1d570 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  ote above */.#de
1d580 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c 65 78 20  fine NC_Complex 
1d590 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 72 75    0x2000  /* Tru
1d5a0 65 20 69 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  e if a function 
1d5b0 6f 72 20 73 75 62 71 75 65 72 79 20 73 65 65 6e  or subquery seen
1d5c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41   */.#define NC_A
1d5d0 6c 6c 6f 77 57 69 6e 20 20 30 78 34 30 30 30 20  llowWin  0x4000 
1d5e0 20 2f 2a 20 57 69 6e 64 6f 77 20 66 75 6e 63 74   /* Window funct
1d5f0 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ions are allowed
1d600 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65   here */.#define
1d610 20 4e 43 5f 48 61 73 57 69 6e 20 20 20 20 30 78   NC_HasWin    0x
1d620 38 30 30 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  8000  /* One or 
1d630 6d 6f 72 65 20 77 69 6e 64 6f 77 20 66 75 6e 63  more window func
1d640 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64  tions seen */.#d
1d650 65 66 69 6e 65 20 4e 43 5f 49 73 44 44 4c 20 20  efine NC_IsDDL  
1d660 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 52 65    0x10000  /* Re
1d670 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
1d680 20 61 20 43 52 45 41 54 45 20 73 74 61 74 65 6d   a CREATE statem
1d690 65 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ent */../*.** An
1d6a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1d6b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 62 6a 65 63   following objec
1d6c0 74 20 64 65 73 63 72 69 62 65 73 20 61 20 73 69  t describes a si
1d6d0 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ngle ON CONFLICT
1d6e0 0a 2a 2a 20 63 6c 61 75 73 65 20 69 6e 20 61 6e  .** clause in an
1d6f0 20 75 70 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54   upsert..**.** T
1d700 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65 74  he pUpsertTarget
1d710 20 66 69 65 6c 64 20 69 73 20 6f 6e 6c 79 20 73   field is only s
1d720 65 74 20 69 66 20 74 68 65 20 4f 4e 20 43 4f 4e  et if the ON CON
1d730 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e 63  FLICT clause inc
1d740 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63  ludes.** conflic
1d750 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e  t-target clause.
1d760 20 20 28 49 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49    (In "ON CONFLI
1d770 43 54 28 61 2c 62 29 22 20 74 68 65 20 22 28 61  CT(a,b)" the "(a
1d780 2c 62 29 22 20 69 73 20 74 68 65 0a 2a 2a 20 63  ,b)" is the.** c
1d790 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63  onflict-target c
1d7a0 6c 61 75 73 65 2e 29 20 20 54 68 65 20 70 55 70  lause.)  The pUp
1d7b0 73 65 72 74 54 61 72 67 65 74 57 68 65 72 65 20  sertTargetWhere 
1d7c0 69 73 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 0a  is the optional.
1d7d0 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  ** WHERE clause 
1d7e0 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79  used to identify
1d7f0 20 70 61 72 74 69 61 6c 20 75 6e 69 71 75 65 20   partial unique 
1d800 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70  indexes..**.** p
1d810 55 70 73 65 72 74 53 65 74 20 69 73 20 74 68 65  UpsertSet is the
1d820 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d   list of column=
1d830 65 78 70 72 20 74 65 72 6d 73 20 6f 66 20 74 68  expr terms of th
1d840 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
1d850 6e 74 2e 20 0a 2a 2a 20 54 68 65 20 70 55 70 73  nt. .** The pUps
1d860 65 72 74 53 65 74 20 66 69 65 6c 64 20 69 73 20  ertSet field is 
1d870 4e 55 4c 4c 20 66 6f 72 20 61 20 4f 4e 20 43 4f  NULL for a ON CO
1d880 4e 46 4c 49 43 54 20 44 4f 20 4e 4f 54 48 49 4e  NFLICT DO NOTHIN
1d890 47 2e 20 20 54 68 65 0a 2a 2a 20 70 55 70 73 65  G.  The.** pUpse
1d8a0 72 74 57 68 65 72 65 20 69 73 20 74 68 65 20 57  rtWhere is the W
1d8b0 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1d8c0 74 68 65 20 55 50 44 41 54 45 20 61 6e 64 20 69  the UPDATE and i
1d8d0 73 20 4e 55 4c 4c 20 69 66 20 74 68 65 0a 2a 2a  s NULL if the.**
1d8e0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
1d8f0 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 72   omitted..*/.str
1d900 75 63 74 20 55 70 73 65 72 74 20 7b 0a 20 20 45  uct Upsert {.  E
1d910 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74  xprList *pUpsert
1d920 54 61 72 67 65 74 3b 20 20 2f 2a 20 4f 70 74 69  Target;  /* Opti
1d930 6f 6e 61 6c 20 64 65 73 63 72 69 70 74 69 6f 6e  onal description
1d940 20 6f 66 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20   of conflicting 
1d950 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
1d960 2a 70 55 70 73 65 72 74 54 61 72 67 65 74 57 68  *pUpsertTargetWh
1d970 65 72 65 3b 20 2f 2a 20 57 48 45 52 45 20 63 6c  ere; /* WHERE cl
1d980 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c  ause for partial
1d990 20 69 6e 64 65 78 20 74 61 72 67 65 74 73 20 2a   index targets *
1d9a0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55  /.  ExprList *pU
1d9b0 70 73 65 72 74 53 65 74 3b 20 20 20 20 20 2f 2a  psertSet;     /*
1d9c0 20 54 68 65 20 53 45 54 20 63 6c 61 75 73 65 20   The SET clause 
1d9d0 66 72 6f 6d 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c  from an ON CONFL
1d9e0 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20  ICT UPDATE */.  
1d9f0 45 78 70 72 20 2a 70 55 70 73 65 72 74 57 68 65  Expr *pUpsertWhe
1da00 72 65 3b 20 20 20 20 20 20 20 2f 2a 20 57 48 45  re;       /* WHE
1da10 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68  RE clause for th
1da20 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50  e ON CONFLICT UP
1da30 44 41 54 45 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  DATE */.  /* The
1da40 20 66 69 65 6c 64 73 20 61 62 6f 76 65 20 63 6f   fields above co
1da50 6d 70 72 69 73 65 20 74 68 65 20 70 61 72 73 65  mprise the parse
1da60 20 74 72 65 65 20 66 6f 72 20 74 68 65 20 75 70   tree for the up
1da70 73 65 72 74 20 63 6c 61 75 73 65 2e 0a 20 20 2a  sert clause..  *
1da80 2a 20 54 68 65 20 66 69 65 6c 64 73 20 62 65 6c  * The fields bel
1da90 6f 77 20 61 72 65 20 75 73 65 64 20 74 6f 20 74  ow are used to t
1daa0 72 61 6e 73 66 65 72 20 69 6e 66 6f 72 6d 61 74  ransfer informat
1dab0 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 49 4e 53  ion from the INS
1dac0 45 52 54 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73  ERT.  ** process
1dad0 69 6e 67 20 64 6f 77 6e 20 69 6e 74 6f 20 74 68  ing down into th
1dae0 65 20 55 50 44 41 54 45 20 70 72 6f 63 65 73 73  e UPDATE process
1daf0 69 6e 67 20 77 68 69 6c 65 20 67 65 6e 65 72 61  ing while genera
1db00 74 69 6e 67 20 63 6f 64 65 2e 0a 20 20 2a 2a 20  ting code..  ** 
1db10 55 70 73 65 72 74 20 6f 77 6e 73 20 74 68 65 20  Upsert owns the 
1db20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64  memory allocated
1db30 20 61 62 6f 76 65 2c 20 62 75 74 20 6e 6f 74 20   above, but not 
1db40 74 68 65 20 6d 65 6d 6f 72 79 20 62 65 6c 6f 77  the memory below
1db50 2e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 55  . */.  Index *pU
1db60 70 73 65 72 74 49 64 78 3b 20 20 20 20 20 20 20  psertIdx;       
1db70 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20 74   /* Constraint t
1db80 68 61 74 20 70 55 70 73 65 72 74 54 61 72 67 65  hat pUpsertTarge
1db90 74 20 69 64 65 6e 74 69 66 69 65 73 20 2a 2f 0a  t identifies */.
1dba0 20 20 53 72 63 4c 69 73 74 20 2a 70 55 70 73 65    SrcList *pUpse
1dbb0 72 74 53 72 63 3b 20 20 20 20 20 20 2f 2a 20 54  rtSrc;      /* T
1dbc0 61 62 6c 65 20 74 6f 20 62 65 20 75 70 64 61 74  able to be updat
1dbd0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 44  ed */.  int regD
1dbe0 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
1dbf0 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
1dc00 74 65 72 20 68 6f 6c 64 69 6e 67 20 61 72 72 61  ter holding arra
1dc10 79 20 6f 66 20 56 41 4c 55 45 53 20 2a 2f 0a 20  y of VALUES */. 
1dc20 20 69 6e 74 20 69 44 61 74 61 43 75 72 3b 20 20   int iDataCur;  
1dc30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1dc40 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 20  dex of the data 
1dc50 63 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  cursor */.  int 
1dc60 69 49 64 78 43 75 72 3b 20 20 20 20 20 20 20 20  iIdxCur;        
1dc70 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1dc80 66 20 74 68 65 20 66 69 72 73 74 20 69 6e 64 65  f the first inde
1dc90 78 20 63 75 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a  x cursor */.};..
1dca0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1dcb0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1dcc0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
1dcd0 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
1dce0 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
1dcf0 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
1dd00 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
1dd10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1dd20 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 68 65  **.** See the he
1dd30 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20  ader comment on 
1dd40 74 68 65 20 63 6f 6d 70 75 74 65 4c 69 6d 69 74  the computeLimit
1dd50 52 65 67 69 73 74 65 72 73 28 29 20 72 6f 75 74  Registers() rout
1dd60 69 6e 65 20 66 6f 72 20 61 0a 2a 2a 20 64 65 74  ine for a.** det
1dd70 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f  ailed descriptio
1dd80 6e 20 6f 66 20 74 68 65 20 6d 65 61 6e 69 6e 67  n of the meaning
1dd90 20 6f 66 20 74 68 65 20 69 4c 69 6d 69 74 20 61   of the iLimit a
1dda0 6e 64 20 69 4f 66 66 73 65 74 20 66 69 65 6c 64  nd iOffset field
1ddb0 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
1ddc0 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
1ddd0 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
1dde0 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
1ddf0 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
1de00 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
1de10 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
1de20 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
1de30 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
1de40 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
1de50 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
1de60 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
1de70 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
1de80 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
1de90 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1dea0 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
1deb0 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
1dec0 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
1ded0 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
1dee0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
1def0 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
1df00 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
1df10 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
1df20 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
1df30 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
1df40 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
1df50 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
1df60 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
1df70 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
1df80 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
1df90 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
1dfa0 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
1dfb0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
1dfc0 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Ephm[2] contains
1dfd0 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
1dfe0 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
1dff0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1e000 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
1e010 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
1e020 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
1e030 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
1e040 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
1e050 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1e060 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
1e070 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
1e080 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
1e090 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45  EXCEPT */.  LogE
1e0a0 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20  st nSelectRow;  
1e0b0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
1e0c0 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74  number of result
1e0d0 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73   rows */.  u32 s
1e0e0 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  elFlags;        
1e0f0 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f    /* Various SF_
1e100 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * values */.  in
1e110 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65  t iLimit, iOffse
1e120 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72  t;   /* Memory r
1e130 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
1e140 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20   LIMIT & OFFSET 
1e150 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33  counters */.  u3
1e160 32 20 73 65 6c 49 64 3b 20 20 20 20 20 20 20 20  2 selId;        
1e170 20 20 20 20 20 2f 2a 20 55 6e 69 71 75 65 20 69       /* Unique i
1e180 64 65 6e 74 69 66 69 65 72 20 6e 75 6d 62 65 72  dentifier number
1e190 20 66 6f 72 20 74 68 69 73 20 53 45 4c 45 43 54   for this SELECT
1e1a0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70   */.  int addrOp
1e1b0 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20  enEphm[2];   /* 
1e1c0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63  OP_OpenEphem opc
1e1d0 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  odes related to 
1e1e0 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20  this select */. 
1e1f0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20   SrcList *pSrc; 
1e200 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46          /* The F
1e210 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1e220 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
1e230 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1e240 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
1e250 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
1e260 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52  By;    /* The GR
1e270 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
1e280 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67  .  Expr *pHaving
1e290 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1e2a0 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a   HAVING clause *
1e2b0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
1e2c0 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68  rderBy;    /* Th
1e2d0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1e2e0 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  e */.  Select *p
1e2f0 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a  Prior;        /*
1e300 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e   Prior select in
1e310 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
1e320 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
1e330 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b    Select *pNext;
1e340 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
1e350 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c   select to the l
1e360 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  eft in a compoun
1e370 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69  d */.  Expr *pLi
1e380 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  mit;          /*
1e390 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
1e3a0 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
1e3b0 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74  t used. */.  Wit
1e3c0 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
1e3d0 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75      /* WITH clau
1e3e0 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  se attached to t
1e3f0 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e  his select. Or N
1e400 55 4c 4c 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  ULL. */.#ifndef 
1e410 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
1e420 4f 57 46 55 4e 43 0a 20 20 57 69 6e 64 6f 77 20  OWFUNC.  Window 
1e430 2a 70 57 69 6e 3b 20 20 20 20 20 20 20 20 20 20  *pWin;          
1e440 2f 2a 20 4c 69 73 74 20 6f 66 20 77 69 6e 64 6f  /* List of windo
1e450 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  w functions */. 
1e460 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 44 65 66   Window *pWinDef
1e470 6e 3b 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  n;      /* List 
1e480 6f 66 20 6e 61 6d 65 64 20 77 69 6e 64 6f 77 20  of named window 
1e490 64 65 66 69 6e 69 74 69 6f 6e 73 20 2a 2f 0a 23  definitions */.#
1e4a0 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
1e4b0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
1e4c0 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
1e4d0 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
1e4e0 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
1e4f0 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
1e500 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1e510 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63  nstraints (all c
1e520 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72  hecked via asser
1e530 74 28 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48  t()).**     SF_H
1e540 61 73 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f  asAgg     == NC_
1e550 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46  HasAgg.**     SF
1e560 5f 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e  _MinMaxAgg  == N
1e570 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
1e580 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  == SQLITE_FUNC_M
1e590 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f  INMAX.**     SF_
1e5a0 46 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48  FixedLimit == WH
1e5b0 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f  ERE_USE_LIMIT.*/
1e5c0 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
1e5d0 69 6e 63 74 20 20 20 20 20 20 20 30 78 30 30 30  inct       0x000
1e5e0 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
1e5f0 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
1e600 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1e610 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 30 78  ll            0x
1e620 30 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64  00002  /* Includ
1e630 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f  es the ALL keywo
1e640 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  rd */.#define SF
1e650 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
1e660 30 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e  0x00004  /* Iden
1e670 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
1e680 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
1e690 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
1e6a0 74 65 20 20 20 20 20 20 30 78 30 30 30 30 38 20  te      0x00008 
1e6b0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
1e6c0 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20   functions or a 
1e6d0 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
1e6e0 69 6e 65 20 53 46 5f 48 61 73 41 67 67 20 20 20  ine SF_HasAgg   
1e6f0 20 20 20 20 20 20 30 78 30 30 30 31 30 20 20 2f        0x00010  /
1e700 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
1e710 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
1e720 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
1e730 73 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30  sEphemeral  0x00
1e740 30 32 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65  020  /* Uses the
1e750 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
1e760 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
1e770 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
1e780 20 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73     0x00040  /* s
1e790 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
1e7a0 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
1e7b0 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
1e7c0 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
1e7d0 20 30 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f   0x00080  /* FRO
1e7e0 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
1e7f0 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
1e800 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1e810 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78  ompound       0x
1e820 30 30 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00100  /* Part o
1e830 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
1e840 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
1e850 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
1e860 30 78 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74  0x00200  /* Synt
1e870 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
1e880 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
1e890 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61  efine SF_MultiVa
1e8a0 6c 75 65 20 20 20 20 20 30 78 30 30 34 30 30 20  lue     0x00400 
1e8b0 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45   /* Single VALUE
1e8c0 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74  S term with mult
1e8d0 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1e8e0 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72  fine SF_NestedFr
1e8f0 6f 6d 20 20 20 20 20 30 78 30 30 38 30 30 20 20  om     0x00800  
1e900 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72  /* Part of a par
1e910 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20  enthesized FROM 
1e920 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1e930 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20  e SF_MinMaxAgg  
1e940 20 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20      0x01000  /* 
1e950 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69  Aggregate contai
1e960 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61  ning min() or ma
1e970 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  x() */.#define S
1e980 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20  F_Recursive     
1e990 20 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65   0x02000  /* The
1e9a0 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20   recursive part 
1e9b0 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43  of a recursive C
1e9c0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  TE */.#define SF
1e9d0 5f 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20  _FixedLimit     
1e9e0 30 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c  0x04000  /* nSel
1e9f0 65 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20  ectRow set by a 
1ea00 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a  constant LIMIT *
1ea10 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79  /.#define SF_May
1ea20 62 65 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38  beConvert   0x08
1ea30 30 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e  000  /* Need con
1ea40 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1ea50 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1ea60 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e  /.#define SF_Con
1ea70 76 65 72 74 65 64 20 20 20 20 20 20 30 78 31 30  verted      0x10
1ea80 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65  000  /* By conve
1ea90 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1eaa0 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1eab0 23 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75  #define SF_Inclu
1eac0 64 65 48 69 64 64 65 6e 20 20 30 78 32 30 30 30  deHidden  0x2000
1ead0 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69  0  /* Include hi
1eae0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  dden columns in 
1eaf0 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e  output */.#defin
1eb00 65 20 53 46 5f 43 6f 6d 70 6c 65 78 52 65 73 75  e SF_ComplexResu
1eb10 6c 74 20 20 30 78 34 30 30 30 30 20 20 2f 2a 20  lt  0x40000  /* 
1eb20 52 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20  Result contains 
1eb30 73 75 62 71 75 65 72 79 20 6f 72 20 66 75 6e 63  subquery or func
1eb40 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
1eb50 53 46 5f 57 68 65 72 65 42 65 67 69 6e 20 20 20  SF_WhereBegin   
1eb60 20 20 30 78 38 30 30 30 30 20 20 2f 2a 20 52 65    0x80000  /* Re
1eb70 61 6c 6c 79 20 61 20 57 68 65 72 65 42 65 67 69  ally a WhereBegi
1eb80 6e 28 29 20 63 61 6c 6c 2e 20 20 44 65 62 75 67  n() call.  Debug
1eb90 20 4f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   Only */../*.** 
1eba0 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  The results of a
1ebb0 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64   SELECT can be d
1ebc0 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65  istributed in se
1ebd0 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64  veral ways, as d
1ebe0 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65  efined.** by one
1ebf0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1ec00 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22  g macros.  The "
1ec10 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
1ec20 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
1ec30 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a  .** Type"..**.**
1ec40 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20       SRT_Union  
1ec50 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1ec60 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61  ts as a key in a
1ec70 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
1ec80 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ec90 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69          identifi
1eca0 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44  ed by pDest->iSD
1ecb0 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
1ecc0 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
1ecd0 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66  Remove results f
1ece0 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72  rom the temporar
1ecf0 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69  y index pDest->i
1ed00 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
1ed10 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20    SRT_Exists    
1ed20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d    Store a 1 in m
1ed30 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74  emory cell pDest
1ed40 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65  ->iSDParm if the
1ed50 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20   result.**      
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1ed70 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e  et is not empty.
1ed80 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
1ed90 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77  iscard     Throw
1eda0 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61   the results awa
1edb0 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64  y.  This is used
1edc0 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20   by SELECT.**   
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ede0 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
1edf0 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f  hin triggers who
1ee00 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20  se only purpose 
1ee10 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  is.**           
1ee20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69            the si
1ee30 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75  de-effects of fu
1ee40 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41  nctions..**.** A
1ee50 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
1ee60 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f  are free to igno
1ee70 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42  re their ORDER B
1ee80 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20  Y clause. Those 
1ee90 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d  that.** follow m
1eea0 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52  ust honor the OR
1eeb0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1eec0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74  *.**     SRT_Out
1eed0 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74  put      Generat
1eee0 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75  e a row of outpu
1eef0 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  t (using the OP_
1ef00 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20  ResultRow.**    
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63   opcode) for eac
1ef30 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73  h row in the res
1ef40 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20  ult set..**.**  
1ef50 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20     SRT_Mem      
1ef60 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66     Only valid if
1ef70 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
1ef80 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a   single column..
1ef90 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1efa0 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65         Store the
1efb0 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66   first column of
1efc0 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c   the first resul
1efd0 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  t row.**        
1efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20               in 
1eff0 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
1f000 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61  iSDParm then aba
1f010 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a  ndon the rest.**
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f030 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72       of the quer
1f040 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61  y.  This destina
1f050 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49  tion implies "LI
1f060 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20  MIT 1"..**.**   
1f070 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20    SRT_Set       
1f080 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73    The result mus
1f090 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f  t be a single co
1f0a0 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63  lumn.  Store eac
1f0b0 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  h.**            
1f0c0 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20           row of 
1f0d0 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65  result as the ke
1f0e0 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74  y in table pDest
1f0f0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f110 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69    Apply the affi
1f120 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53  nity pDest->affS
1f130 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69  dst before stori
1f140 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ng.**           
1f150 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1f160 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c  s.  Used to impl
1f170 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43  ement "IN (SELEC
1f180 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20  T ...)"..**.**  
1f190 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20     SRT_EphemTab 
1f1a0 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d     Create an tem
1f1b0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1f1c0 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20  st->iSDParm and 
1f1d0 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  store.**        
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1f1f0 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54   result there. T
1f200 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
1f210 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20  t open after.** 
1f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f230 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20      returning.  
1f240 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
1f250 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68  _Table except th
1f260 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  at.**           
1f270 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64            this d
1f280 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20  estination uses 
1f290 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1f2a0 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20   to create.**   
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2c0 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73    the table firs
1f2d0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1f2e0 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e  _Coroutine   Gen
1f2f0 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69  erate a co-routi
1f300 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ne that returns 
1f310 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20  a new row of.** 
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f330 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68      results each
1f340 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f   time it is invo
1f350 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20  ked.  The entry 
1f360 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20  point.**        
1f370 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
1f380 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69  the co-routine i
1f390 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1f3a0 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
1f3b0 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  arm.**          
1f3c0 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74             and t
1f3d0 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  he result row is
1f3e0 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74   stored in pDest
1f3f0 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72  ->nDest register
1f400 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1f410 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e           startin
1f420 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53  g with pDest->iS
1f430 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  dst..**.**     S
1f440 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53  RT_Table       S
1f450 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1f460 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1f470 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1f480 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20  **     SRT_Fifo 
1f490 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c         This is l
1f4a0 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ike SRT_EphemTab
1f4b0 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
1f4c0 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20   table.**       
1f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
1f4e0 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65   assumed to alre
1f4f0 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52  ady be open.  SR
1f500 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20  T_Fifo has.**   
1f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f520 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c    the additional
1f530 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69   property of bei
1f540 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72  ng able to ignor
1f550 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1f560 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44           the ORD
1f570 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
1f580 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1f590 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65  Fifo    Store re
1f5a0 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f  sults in a tempo
1f5b0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1f5c0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5e0 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74    But also use t
1f5f0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1f600 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1f610 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1f620 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f            a reco
1f630 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20  rd of all prior 
1f640 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f  results and igno
1f650 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65  re any duplicate
1f660 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f670 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e          rows.  N
1f680 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73  ame means:  "Dis
1f690 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a  tinct Fifo"..**.
1f6a0 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65  **     SRT_Queue
1f6b0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1f6c0 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1f6d0 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1f6e0 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a  DParm (really.**
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f700 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20       an index). 
1f710 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e   Append a sequen
1f720 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61  ce number so tha
1f730 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a  t all entries.**
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63       are distinc
1f760 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1f770 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f  _DistQueue   Sto
1f780 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
1f790 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
1f7a0 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79  st->iSDParm only
1f7b0 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   if.**          
1f7c0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1f7d0 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e  ame record has n
1f7e0 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64  ever been stored
1f7f0 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a   before.  The.**
1f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f810 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44       index at pD
1f820 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68  est->iSDParm+1 h
1f830 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74  old all prior st
1f840 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ores..*/.#define
1f850 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
1f860 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
1f870 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
1f880 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
1f890 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
1f8a0 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
1f8b0 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
1f8c0 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
1f8d0 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
1f8e0 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
1f8f0 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
1f900 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
1f910 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f920 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
1f930 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
1f940 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
1f950 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ere */.#define S
1f960 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20  RT_Fifo         
1f970 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  5  /* Store resu
1f980 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
1f990 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
1f9a0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
1f9b0 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36  T_DistFifo     6
1f9c0 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69    /* Like SRT_Fi
1f9d0 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  fo, but unique r
1f9e0 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23  esults only */.#
1f9f0 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65  define SRT_Queue
1fa00 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74          7  /* St
1fa10 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ore result in an
1fa20 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e   queue */.#defin
1fa30 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  e SRT_DistQueue 
1fa40 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52     8  /* Like SR
1fa50 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69  T_Queue, but uni
1fa60 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
1fa70 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
1fa80 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
1fa90 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
1faa0 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
1fab0 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
1fac0 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
1fad0 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74  eDest)<=SRT_Dist
1fae0 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20  Queue)..#define 
1faf0 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1fb00 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   9  /* Output ea
1fb10 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
1fb20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1fb30 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20  Mem         10  
1fb40 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1fb50 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
1fb60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1fb70 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20  Set         11  
1fb80 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
1fb90 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1fba0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1fbb0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1fbc0 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72  12  /* Create tr
1fbd0 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
1fbe0 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
1fbf0 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
1fc00 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
1fc10 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  13  /* Generate 
1fc20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
1fc30 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1fc40 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
1fc50 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72    14  /* Store r
1fc60 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
1fc70 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
1fc80 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  rowid */../*.** 
1fc90 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1fca0 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
1fcb0 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
1fcc0 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
1fcd0 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
1fce0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
1fcf0 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
1fd00 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
1fd10 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
1fd20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
1fd30 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
1fd40 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
1fd50 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b  /.  int iSDParm;
1fd60 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61           /* A pa
1fd70 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20  rameter used by 
1fd80 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73  the eDest dispos
1fd90 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69  al method */.  i
1fda0 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20  nt iSdst;       
1fdb0 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
1fdc0 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c  ster where resul
1fdd0 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a  ts are written *
1fde0 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20  /.  int nSdst;  
1fdf0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1fe00 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
1fe10 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63  allocated */.  c
1fe20 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20 20  har *zAffSdst;  
1fe30 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
1fe40 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
1fe50 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78  =SRT_Set */.  Ex
1fe60 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
1fe70 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e  ;  /* Key column
1fe80 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20  s for SRT_Queue 
1fe90 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75  and SRT_DistQueu
1fea0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  e */.};../*.** D
1feb0 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
1fec0 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
1fed0 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
1fee0 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
1fef0 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73  REMENT.** tables
1ff00 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
1ff10 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
1ff20 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
1ff30 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
1ff40 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
1ff50 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
1ff60 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
1ff70 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
1ff80 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
1ff90 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1ffa0 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
1ffb0 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
1ffc0 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
1ffd0 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
1ffe0 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
1fff0 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68 69  s are done withi
20000 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
20010 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
20020 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
20030 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
20040 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
20050 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
20060 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
20070 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
20080 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
20090 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
200a0 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
200b0 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
200c0 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
200d0 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
200e0 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
200f0 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
20100 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
20110 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
20120 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
20130 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20150 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
20160 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
20170 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
20180 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
20190 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
201a0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
201b0 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
201c0 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
201d0 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e  *.** At least on
201e0 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
201f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
20200 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64  cture is created
20210 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69   for each.** tri
20220 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65  gger that may be
20230 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72   fired while par
20240 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  sing an INSERT, 
20250 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
20260 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41  .** statement. A
20270 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20  ll such objects 
20280 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
20290 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  e linked list he
202a0 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65  aded at.** Parse
202b0 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64  .pTriggerPrg and
202c0 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74   deleted once st
202d0 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74  atement compilat
202e0 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ion has been.** 
202f0 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a  completed..**.**
20300 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67   A Vdbe sub-prog
20310 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ram that impleme
20320 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64  nts the body and
20330 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
20340 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67  trigger.** Trigg
20350 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20  erPrg.pTrigger, 
20360 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75  assuming a defau
20370 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  lt ON CONFLICT c
20380 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67  lause of.** Trig
20390 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69  gerPrg.orconf, i
203a0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
203b0 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67  TriggerPrg.pProg
203c0 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  ram variable..**
203d0 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67   The Parse.pTrig
203e0 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65  gerPrg list neve
203f0 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65  r contains two e
20400 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20  ntries with the 
20410 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66  same.** values f
20420 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72  or both pTrigger
20430 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a   and orconf..**.
20440 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72  ** The TriggerPr
20450 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61  g.aColmask[0] va
20460 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
20470 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a   a mask of old.*
20480 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65   columns.** acce
20490 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20  ssed (or set to 
204a0 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66  0 for triggers f
204b0 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  ired as a result
204c0 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74   of INSERT.** st
204d0 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
204e0 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
204f0 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
20500 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
20510 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
20520 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
20530 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
20540 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
20550 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
20560 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
20570 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
20580 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
20590 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
205a0 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
205b0 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
205c0 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
205d0 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
205e0 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
205f0 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
20600 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
20610 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
20620 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
20630 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
20640 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
20650 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
20660 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
20670 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
20680 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
20690 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
206a0 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
206b0 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
206c0 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
206d0 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
206e0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
206f0 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
20700 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
20710 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  30.  typedef uns
20720 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61  igned char yDbMa
20730 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41  sk[(SQLITE_MAX_A
20740 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23  TTACHED+9)/8];.#
20750 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
20760 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
20770 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29  [(I)/8]&(1<<((I)
20780 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  &7)))!=0).# defi
20790 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
207a0 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29        memset((M)
207b0 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20  ,0,sizeof(M)).# 
207c0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
207d0 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49  (M,I)     (M)[(I
207e0 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37  )/8]|=(1<<((I)&7
207f0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
20800 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73  skAllZero(M)   s
20810 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
20820 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20  ero(M).# define 
20830 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
20840 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73     (sqlite3DbMas
20850 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a  kAllZero(M)==0).
20860 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
20870 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
20880 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44  Mask;.# define D
20890 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
208a0 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61    (((M)&(((yDbMa
208b0 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29  sk)1)<<(I)))!=0)
208c0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
208d0 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29  Zero(M)      (M)
208e0 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
208f0 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
20900 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31  M)|=(((yDbMask)1
20910 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65  )<<(I)).# define
20920 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
20930 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66  )   (M)==0.# def
20940 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
20950 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65  o(M)   (M)!=0.#e
20960 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53  ndif../*.** An S
20970 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78  QL parser contex
20980 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68  t.  A copy of th
20990 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
209a0 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a  passed through.*
209b0 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  * the parser and
209c0 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74   down into all t
209d0 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e  he parser action
209e0 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
209f0 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72  r to.** carry ar
20a00 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ound information
20a10 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20   that is global 
20a20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  to the entire pa
20a30 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  rse..**.** The s
20a40 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69  tructure is divi
20a50 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72  ded into two par
20a60 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61  ts.  When the pa
20a70 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a  rser and code.**
20a80 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74   generate call t
20a90 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73  hemselves recurs
20aa0 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74  ively, the first
20ab0 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72   part of the str
20ac0 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e  ucture.** is con
20ad0 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65  stant but the se
20ae0 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73  cond part is res
20af0 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  et at the beginn
20b00 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a  ing and end of.*
20b10 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
20b20 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62  ..**.** The nTab
20b30 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c  leLock and aTabl
20b40 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20  eLock variables 
20b50 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66  are only used if
20b60 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
20b70 65 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20  e.** feature is 
20b80 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69  enabled (if sqli
20b90 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61  te3Tsd()->useSha
20ba0 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29  redData is true)
20bb0 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73  . They are.** us
20bc0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
20bd0 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63  set of table-loc
20be0 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ks required by t
20bf0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
20c00 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20  ng.** compiled. 
20c10 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
20c20 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75  TableLock() is u
20c30 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69  sed to add entri
20c40 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73  es to the.** lis
20c50 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72  t..*/.struct Par
20c60 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  se {.  sqlite3 *
20c70 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  db;         /* T
20c80 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
20c90 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
20ca0 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
20cb0 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72       /* An error
20cc0 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64   message */.  Vd
20cd0 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
20ce0 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20     /* An engine 
20cf0 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61  for executing da
20d00 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20  tabase bytecode 
20d10 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
20d20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
20d30 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78  urn code from ex
20d40 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ecution */.  u8 
20d50 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20  colNamesSet;    
20d60 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20    /* TRUE after 
20d70 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61  OP_ColumnName ha
20d80 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f  s been issued to
20d90 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63   pVdbe */.  u8 c
20da0 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20  heckSchema;     
20db0 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d   /* Causes schem
20dc0 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61  a cookie check a
20dd0 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f  fter an error */
20de0 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20  .  u8 nested;   
20df0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20e00 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
20e10 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f  s to the parser/
20e20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
20e30 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b  /.  u8 nTempReg;
20e40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20e50 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  er of temporary 
20e60 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65  registers in aTe
20e70 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  mpReg[] */.  u8 
20e80 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20  isMultiWrite;   
20e90 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
20ea0 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66  tement may modif
20eb0 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c  y/insert multipl
20ec0 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d  e rows */.  u8 m
20ed0 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20  ayAbort;        
20ee0 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
20ef0 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20  ement may throw 
20f00 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
20f10 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f  on */.  u8 hasCo
20f20 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20  mpound;      /* 
20f30 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63  Need to invoke c
20f40 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
20f50 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
20f60 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74   */.  u8 okConst
20f70 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b  Factor;    /* OK
20f80 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63   to factor out c
20f90 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38  onstants */.  u8
20fa0 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64   disableLookasid
20fb0 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  e; /* Number of 
20fc0 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20  times lookaside 
20fd0 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65  has been disable
20fe0 64 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  d */.  u8 disabl
20ff0 65 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 44  eVtab;      /* D
21000 69 73 61 62 6c 65 20 61 6c 6c 20 76 69 72 74 75  isable all virtu
21010 61 6c 20 74 61 62 6c 65 73 20 66 6f 72 20 74 68  al tables for th
21020 69 73 20 70 61 72 73 65 20 2a 2f 0a 20 20 69 6e  is parse */.  in
21030 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
21040 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
21050 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
21060 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
21070 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
21080 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
21090 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
210a0 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
210b0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
210c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
210d0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
210e0 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
210f0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
21100 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
21110 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
21120 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
21130 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
21140 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
21150 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
21160 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
21170 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f  /.  int szOpAllo
21180 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65  c;       /* Byte
21190 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  s of memory spac
211a0 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  e allocated for 
211b0 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
211c0 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20 20  int iSelfTab;   
211d0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 61 73       /* Table as
211e0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 6e  sociated with an
211f0 20 69 6e 64 65 78 20 6f 6e 20 65 78 70 72 2c 20   index on expr, 
21200 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20 20 20  or negative.    
21210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21220 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 62 61 73     ** of the bas
21230 65 20 72 65 67 69 73 74 65 72 20 64 75 72 69 6e  e register durin
21240 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74 72 61 69  g check-constrai
21250 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20 69 6e 74  nt eval */.  int
21260 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20   nLabel;        
21270 20 20 2f 2a 20 54 68 65 20 2a 6e 65 67 61 74 69    /* The *negati
21280 76 65 2a 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  ve* of the numbe
21290 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64  r of labels used
212a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
212b0 41 6c 6c 6f 63 3b 20 20 20 20 20 2f 2a 20 4e 75  Alloc;     /* Nu
212c0 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 69 6e  mber of slots in
212d0 20 61 4c 61 62 65 6c 20 2a 2f 0a 20 20 69 6e 74   aLabel */.  int
212e0 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20   *aLabel;       
212f0 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f    /* Space to ho
21300 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f  ld the labels */
21310 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f  .  ExprList *pCo
21320 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74  nstExpr;/* Const
21330 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
21340 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74  */.  Token const
21350 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d  raintName;/* Nam
21360 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61  e of the constra
21370 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65  int currently be
21380 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ing parsed */.  
21390 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
213a0 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
213b0 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
213c0 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
213d0 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
213e0 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
213f0 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
21400 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
21410 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20  abases */.  int 
21420 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20  regRowid;       
21430 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
21440 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52  ding rowid of CR
21450 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79  EATE TABLE entry
21460 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f   */.  int regRoo
21470 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  t;         /* Re
21480 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
21490 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
214a0 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20  for new objects 
214b0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67  */.  int nMaxArg
214c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  ;         /* Max
214d0 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20   args passed to 
214e0 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79  user function by
214f0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
21500 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20    int nSelect;  
21510 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21520 20 6f 66 20 53 45 4c 45 43 54 20 73 74 6d 74 73   of SELECT stmts
21530 2e 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 53 65  . Counter for Se
21540 6c 65 63 74 2e 73 65 6c 49 64 20 2a 2f 0a 23 69  lect.selId */.#i
21550 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21560 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
21570 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b   int nTableLock;
21580 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21590 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54  r of locks in aT
215a0 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61  ableLock */.  Ta
215b0 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c  bleLock *aTableL
215c0 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64  ock; /* Required
215d0 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72   table locks for
215e0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
215f0 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41  de */.#endif.  A
21600 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e  utoincInfo *pAin
21610 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  c;  /* Informati
21620 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43  on about AUTOINC
21630 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20  REMENT counters 
21640 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70  */.  Parse *pTop
21650 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72  level;    /* Par
21660 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  se structure for
21670 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f   main program (o
21680 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62  r NULL) */.  Tab
21690 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b  le *pTriggerTab;
216a0 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67    /* Table trigg
216b0 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f  ers are being co
216c0 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 50 61 72  ded for */.  Par
216d0 73 65 20 2a 70 50 61 72 65 6e 74 50 61 72 73 65  se *pParentParse
216e0 3b 20 2f 2a 20 50 61 72 65 6e 74 20 70 61 72 73  ; /* Parent pars
216f0 65 72 20 69 66 20 74 68 69 73 20 70 61 72 73 65  er if this parse
21700 72 20 69 73 20 6e 65 73 74 65 64 20 2a 2f 0a 20  r is nested */. 
21710 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
21720 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
21730 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 42 74 72   of OP_CreateBtr
21740 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  ee opcode on CRE
21750 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75  ATE TABLE */.  u
21760 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
21770 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
21780 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
21790 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
217a0 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
217b0 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
217c0 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
217d0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
217e0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
217f0 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
21800 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
21810 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
21820 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
21830 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
21840 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
21850 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
21860 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
21870 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
21880 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
21890 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
218a0 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
218b0 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
218c0 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
218d0 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
218e0 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  rs */..  /******
218f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21930 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73  ****.  ** Fields
21940 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65 20 69   above must be i
21950 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65  nitialized to ze
21960 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64 73 20  ro.  The fields 
21970 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a  that follow,.  *
21980 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 62 65  * down to the be
21990 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72  ginning of the r
219a0 65 63 75 72 73 69 76 65 20 73 65 63 74 69 6f 6e  ecursive section
219b0 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  , do not need to
219c0 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c   be.  ** initial
219d0 69 7a 65 64 20 61 73 20 74 68 65 79 20 77 69 6c  ized as they wil
219e0 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72 65 20  l be set before 
219f0 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65  being used.  The
21a00 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20 20 2a   boundary is.  *
21a10 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
21a20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61  offsetof(Parse,a
21a30 54 65 6d 70 52 65 67 29 2e 0a 20 20 2a 2a 2a 2a  TempReg)..  ****
21a40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a80 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 61  ******/..  int a
21a90 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20  TempReg[8];     
21aa0 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
21ab0 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
21ac0 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
21ad0 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e  Token sNameToken
21ae0 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e  ;       /* Token
21af0 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
21b00 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
21b10 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  name */..  /****
21b20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b60 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20  ****.  ** Above 
21b70 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77  is constant betw
21b80 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20  een recursions. 
21b90 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20   Below is reset 
21ba0 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
21bb0 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72  .  ** each recur
21bc0 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64  sion.  The bound
21bd0 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73  ary between thes
21be0 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73  e two regions is
21bf0 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a   determined.  **
21c00 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28   using offsetof(
21c10 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e  Parse,sLastToken
21c20 29 20 73 6f 20 74 68 65 20 73 4c 61 73 74 54 6f  ) so the sLastTo
21c30 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73 74 20 62  ken field must b
21c40 65 20 74 68 65 0a 20 20 2a 2a 20 66 69 72 73 74  e the.  ** first
21c50 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20 72 65   field in the re
21c60 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a  cursive region..
21c70 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
21c80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21cb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54  **********/..  T
21cc0 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
21cd0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
21ce0 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
21cf0 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b  */.  ynVar nVar;
21d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21d10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
21d20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
21d30 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
21d40 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
21d50 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
21d60 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
21d70 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
21d80 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65  RY KEY */.  u8 e
21d90 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
21da0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
21db0 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61   the EXPLAIN fla
21dc0 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  g is found on th
21dd0 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 20 21  e query */.#if !
21de0 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
21df0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
21e00 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  E) && defined(SQ
21e10 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
21e20 41 42 4c 45 29 29 0a 20 20 75 38 20 65 50 61 72  ABLE)).  u8 ePar
21e30 73 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  seMode;         
21e40 20 20 20 2f 2a 20 50 41 52 53 45 5f 4d 4f 44 45     /* PARSE_MODE
21e50 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74 20 2a 2f  _XXX constant */
21e60 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
21e70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
21e80 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
21e90 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
21ea0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21eb0 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  f virtual tables
21ec0 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64   to lock */.#end
21ed0 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  if.  int nHeight
21ee0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
21ef0 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
21f00 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
21f10 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
21f20 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
21f30 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
21f40 69 6e 74 20 61 64 64 72 45 78 70 6c 61 69 6e 3b  int addrExplain;
21f50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64            /* Add
21f60 72 65 73 73 20 6f 66 20 63 75 72 72 65 6e 74 20  ress of current 
21f70 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64  OP_Explain opcod
21f80 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c  e */.#endif.  VL
21f90 69 73 74 20 2a 70 56 4c 69 73 74 3b 20 20 20 20  ist *pVList;    
21fa0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69          /* Mappi
21fb0 6e 67 20 62 65 74 77 65 65 6e 20 76 61 72 69 61  ng between varia
21fc0 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75  ble names and nu
21fd0 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20  mbers */.  Vdbe 
21fe0 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20  *pReprepare;    
21ff0 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67       /* VM being
22000 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c   reprepared (sql
22010 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29  ite3Reprepare())
22020 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
22030 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20   *zTail;        
22040 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20  /* All SQL text 
22050 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65  past the last se
22060 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a  micolon parsed *
22070 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54  /.  Table *pNewT
22080 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  able;         /*
22090 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63   A table being c
220a0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
220b0 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
220c0 49 6e 64 65 78 20 2a 70 4e 65 77 49 6e 64 65 78  Index *pNewIndex
220d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
220e0 69 6e 64 65 78 20 62 65 69 6e 67 20 63 6f 6e 73  index being cons
220f0 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54  tructed by CREAT
22100 45 20 49 4e 44 45 58 2e 0a 20 20 20 20 20 20 20  E INDEX..       
22110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22120 20 20 20 20 20 2a 2a 20 41 6c 73 6f 20 75 73 65       ** Also use
22130 64 20 74 6f 20 68 6f 6c 64 20 72 65 64 75 6e 64  d to hold redund
22140 61 6e 74 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  ant UNIQUE const
22150 72 61 69 6e 74 73 0a 20 20 20 20 20 20 20 20 20  raints.         
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22170 20 20 20 2a 2a 20 64 75 72 69 6e 67 20 61 20 52     ** during a R
22180 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 2a 2f 0a  ENAME COLUMN */.
22190 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54    Trigger *pNewT
221a0 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54  rigger;     /* T
221b0 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e  rigger under con
221c0 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41  struct by a CREA
221d0 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20  TE TRIGGER */.  
221e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
221f0 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65  hContext; /* The
22200 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74   6th parameter t
22210 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c  o db->xAuth call
22220 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66  backs */.#ifndef
22230 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
22240 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65  TUALTABLE.  Toke
22250 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  n sArg;         
22260 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74        /* Complet
22270 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75  e text of a modu
22280 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20  le argument */. 
22290 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c   Table **apVtabL
222a0 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f  ock;       /* Po
222b0 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c  inter to virtual
222c0 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20   tables needing 
222d0 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69  locking */.#endi
222e0 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62  f.  Table *pZomb
222f0 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  ieTab;        /*
22300 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f   List of Table o
22310 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65  bjects to delete
22320 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20   after code gen 
22330 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
22340 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f  *pTriggerPrg;  /
22350 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
22360 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73 20   coded triggers 
22370 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
22380 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
22390 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20 63  * Current WITH c
223a0 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a  lause, or NULL *
223b0 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 54  /.  With *pWithT
223c0 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a  oFree;        /*
223d0 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48 20   Free this WITH 
223e0 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e  object at the en
223f0 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a  d of the parse *
22400 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
22410 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
22420 0a 20 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 2a  .  RenameToken *
22430 70 52 65 6e 61 6d 65 3b 20 20 20 20 20 2f 2a 20  pRename;     /* 
22440 54 6f 6b 65 6e 73 20 73 75 62 6a 65 63 74 20 74  Tokens subject t
22450 6f 20 72 65 6e 61 6d 69 6e 67 20 62 79 20 41 4c  o renaming by AL
22460 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a 23 65 6e  TER TABLE */.#en
22470 64 69 66 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20  dif.};..#define 
22480 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41  PARSE_MODE_NORMA
22490 4c 20 20 20 20 20 20 20 20 30 0a 23 64 65 66 69  L        0.#defi
224a0 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45  ne PARSE_MODE_DE
224b0 43 4c 41 52 45 5f 56 54 41 42 20 20 31 0a 23 64  CLARE_VTAB  1.#d
224c0 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45  efine PARSE_MODE
224d0 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 20 32  _RENAME_COLUMN 2
224e0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d  .#define PARSE_M
224f0 4f 44 45 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45  ODE_RENAME_TABLE
22500 20 20 33 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73    3../*.** Sizes
22510 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f 66   and pointers of
22520 20 76 61 72 69 6f 75 73 20 70 61 72 74 73 20 6f   various parts o
22530 66 20 74 68 65 20 50 61 72 73 65 20 6f 62 6a 65  f the Parse obje
22540 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50  ct..*/.#define P
22550 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73  ARSE_HDR_SZ offs
22560 65 74 6f 66 28 50 61 72 73 65 2c 61 54 65 6d 70  etof(Parse,aTemp
22570 52 65 67 29 20 2f 2a 20 52 65 63 75 72 73 69 76  Reg) /* Recursiv
22580 65 20 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43  e part w/o aColC
22590 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50  ache*/.#define P
225a0 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20  ARSE_RECURSE_SZ 
225b0 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73  offsetof(Parse,s
225c0 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a  LastToken)    /*
225d0 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20   Recursive part 
225e0 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  */.#define PARSE
225f0 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66  _TAIL_SZ (sizeof
22600 28 50 61 72 73 65 29 2d 50 41 52 53 45 5f 52 45  (Parse)-PARSE_RE
22610 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e  CURSE_SZ) /* Non
22620 2d 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20  -recursive part 
22630 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  */.#define PARSE
22640 5f 54 41 49 4c 28 58 29 20 28 28 28 63 68 61 72  _TAIL(X) (((char
22650 2a 29 28 58 29 29 2b 50 41 52 53 45 5f 52 45 43  *)(X))+PARSE_REC
22660 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69  URSE_SZ)  /* Poi
22670 6e 74 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a  nter to tail */.
22680 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
22690 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  ue if currently 
226a0 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65  inside an sqlite
226b0 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
226c0 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66   call..*/.#ifdef
226d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
226e0 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66  TUALTABLE.  #def
226f0 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
22700 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  TAB 0.#else.  #d
22710 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
22720 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 65  _VTAB (pParse->e
22730 50 61 72 73 65 4d 6f 64 65 3d 3d 50 41 52 53 45  ParseMode==PARSE
22740 5f 4d 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54  _MODE_DECLARE_VT
22750 41 42 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  AB).#endif..#if 
22760 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
22770 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a  MIT_ALTERTABLE).
22780 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e    #define IN_REN
22790 41 4d 45 5f 4f 42 4a 45 43 54 20 30 0a 23 65 6c  AME_OBJECT 0.#el
227a0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  se.  #define IN_
227b0 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 28 70  RENAME_OBJECT (p
227c0 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64  Parse->eParseMod
227d0 65 3e 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45  e>=PARSE_MODE_RE
227e0 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 0a 23 65 6e  NAME_COLUMN).#en
227f0 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
22800 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
22810 54 55 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65  TUALTABLE) && de
22820 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
22830 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20  T_ALTERTABLE).  
22840 23 64 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49  #define IN_SPECI
22850 41 4c 5f 50 41 52 53 45 20 30 0a 23 65 6c 73 65  AL_PARSE 0.#else
22860 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 53 50  .  #define IN_SP
22870 45 43 49 41 4c 5f 50 41 52 53 45 20 28 70 50 61  ECIAL_PARSE (pPa
22880 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 21  rse->eParseMode!
22890 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d  =PARSE_MODE_NORM
228a0 41 4c 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AL).#endif../*.*
228b0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
228c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
228d0 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
228e0 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
228f0 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
22900 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
22910 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
22920 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
22930 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
22940 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
22950 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
22960 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
22970 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
22980 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
22990 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
229a0 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
229b0 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
229c0 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
229d0 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
229e0 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
229f0 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
22a00 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70  ue in various op
22a10 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  codes..**.** Val
22a20 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
22a30 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
22a40 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50  ert()):.**    OP
22a50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
22a60 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43    == SQLITE_FUNC
22a70 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50  _LENGTH.**    OP
22a80 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20  FLAG_TYPEOFARG  
22a90 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43    == SQLITE_FUNC
22aa0 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50  _TYPEOF.**    OP
22ab0 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
22ac0 20 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c    == BTREE_BULKL
22ad0 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  OAD.**    OPFLAG
22ae0 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d  _SEEKEQ       ==
22af0 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a   BTREE_SEEK_EQ.*
22b00 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44  *    OPFLAG_FORD
22b10 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45  ELETE    == BTRE
22b20 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20  E_FORDELETE.**  
22b30 20 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53    OPFLAG_SAVEPOS
22b40 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53  ITION == BTREE_S
22b50 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20  AVEPOSITION.**  
22b60 20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45    OPFLAG_AUXDELE
22b70 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41  TE    == BTREE_A
22b80 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66  UXDELETE.*/.#def
22b90 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  ine OPFLAG_NCHAN
22ba0 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  GE       0x01   
22bb0 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53   /* OP_Insert: S
22bc0 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
22bd0 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20  >nChange */.    
22be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c00 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e   /* Also used in
22c10 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20   P2 (not P5) of 
22c20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65  OP_Delete */.#de
22c30 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48  fine OPFLAG_NOCH
22c40 4e 47 20 20 20 20 20 20 20 20 30 78 30 31 20 20  NG        0x01  
22c50 20 20 2f 2a 20 4f 50 5f 56 43 6f 6c 75 6d 6e 20    /* OP_VColumn 
22c60 6e 6f 63 68 61 6e 67 65 20 66 6f 72 20 55 50 44  nochange for UPD
22c70 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
22c80 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20  PFLAG_EPHEM     
22c90 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
22ca0 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65  P_Column: Epheme
22cb0 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b  ral output is ok
22cc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22cd0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20  AG_LASTROWID    
22ce0 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74 20   0x20    /* Set 
22cf0 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61  to update db->la
22d00 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  stRowid */.#defi
22d10 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  ne OPFLAG_ISUPDA
22d20 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20  TE      0x04    
22d30 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72  /* This OP_Inser
22d40 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41  t is an sql UPDA
22d50 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
22d60 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20  FLAG_APPEND     
22d70 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68     0x08    /* Th
22d80 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  is is likely to 
22d90 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a  be an append */.
22da0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55  #define OPFLAG_U
22db0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31  SESEEKRESULT 0x1
22dc0 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61  0    /* Try to a
22dd0 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42  void a seek in B
22de0 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a  treeInsert() */.
22df0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
22e00 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34  SNOOP        0x4
22e10 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  0    /* OP_Delet
22e20 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74  e does pre-updat
22e30 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  e-hook only */.#
22e40 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
22e50 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
22e60 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
22e70 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
22e80 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
22e90 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
22ea0 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
22eb0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
22ec0 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
22ed0 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
22ee0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
22ef0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
22f00 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
22f10 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
22f20 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
22f30 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
22f40 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
22f50 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73  Open** cursor us
22f60 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20  es EQ seek only 
22f70 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22f80 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20  G_FORDELETE     
22f90 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x08    /* OP_Op
22fa0 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54  en should use BT
22fb0 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f  REE_FORDELETE */
22fc0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22fd0 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
22fe0 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  10    /* P2 to O
22ff0 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
23000 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
23010 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
23020 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
23030 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
23040 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
23050 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mutation */.#def
23060 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  ine OPFLAG_SAVEP
23070 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20  OSITION  0x02   
23080 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e   /* OP_Delete/In
23090 73 65 72 74 3a 20 73 61 76 65 20 63 75 72 73 6f  sert: save curso
230a0 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65  r pos */.#define
230b0 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
230c0 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a  E     0x04    /*
230d0 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65   OP_Delete: inde
230e0 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f 70  x in a DELETE op
230f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
23100 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20  AG_NOCHNG_MAGIC 
23110 20 30 78 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d   0x6d    /* OP_M
23120 61 6b 65 52 65 63 6f 72 64 3a 20 73 65 72 69 61  akeRecord: seria
23130 6c 74 79 70 65 20 31 30 20 69 73 20 6f 6b 20 2a  ltype 10 is ok *
23140 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72  /../*. * Each tr
23150 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e  igger present in
23160 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
23170 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61  hema is stored a
23180 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
23190 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67  . * struct Trigg
231a0 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65  er.. *. * Pointe
231b0 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20  rs to instances 
231c0 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
231d0 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  r are stored in 
231e0 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20  two ways.. * 1. 
231f0 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68  In the "trigHash
23200 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61  " hash table (pa
23210 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  rt of the sqlite
23220 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e  3* that represen
23230 74 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74  ts the. *    dat
23240 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
23250 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
23260 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
23270 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
23280 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
23290 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
232a0 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
232b0 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
232c0 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
232d0 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
232e0 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
232f0 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
23300 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
23310 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
23320 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
23330 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
23340 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
23350 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
23360 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
23370 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
23380 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
23390 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
233a0 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
233b0 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
233c0 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
233d0 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
233e0 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
233f0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
23400 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
23410 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
23420 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
23430 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
23440 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
23450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23460 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
23470 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
23480 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
23490 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
234a0 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
234b0 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234d0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
234e0 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
234f0 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
23500 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
23510 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23520 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
23530 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
23540 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
23550 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
23560 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
23570 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
23580 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
23590 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
235a0 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
235b0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
235c0 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
235d0 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
235e0 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
23610 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
23620 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
23630 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
23640 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
23650 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
23660 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
23670 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
23680 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
23690 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
236a0 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
236b0 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
236c0 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
236d0 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
236e0 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
236f0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
23700 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
23710 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
23720 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
23730 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
23740 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
23750 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
23760 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
23770 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
23780 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
23790 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
237a0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20  .**.** If there 
237b0 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69  are multiple tri
237c0 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74  ggers, you might
237d0 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20   of some BEFORE 
237e0 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a  and some AFTER..
237f0 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73  ** In that cases
23800 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20  , the constants 
23810 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65  below can be ORe
23820 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23  d together..*/.#
23830 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42  define TRIGGER_B
23840 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65  EFORE  1.#define
23850 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20   TRIGGER_AFTER  
23860 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73   2../*. * An ins
23870 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20  tance of struct 
23880 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75  TriggerStep is u
23890 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73  sed to store a s
238a0 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
238b0 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61  ent. * that is a
238c0 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
238d0 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
238e0 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  * Instances of s
238f0 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
23900 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  p are stored in 
23910 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20  a singly linked 
23920 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20  list (linked. * 
23930 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74  using the "pNext
23940 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65  " member) refere
23950 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65  nced by the "ste
23960 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f  p_list" member o
23970 66 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61  f the. * associa
23980 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
23990 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
239a0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
239b0 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
239c0 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
239d0 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
239e0 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
239f0 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65  *. * The "op" me
23a00 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
23a10 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
23a20 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
23a30 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
23a40 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
23a50 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
23a60 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
23a70 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
23a80 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20  ermined by the. 
23a90 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20  * value of "op" 
23aa0 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20  as follows:. *. 
23ab0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45  * (op == TK_INSE
23ac0 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20  RT). * orconf   
23ad0 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f   -> stores the O
23ae0 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
23af0 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20  ithm. * pSelect 
23b00 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
23b10 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
23b20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74  .. SELECT ... st
23b30 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
23b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
23b50 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e  is stores a poin
23b60 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43  ter to the SELEC
23b70 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68  T statement. Oth
23b80 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
23b90 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
23ba0 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
23bb0 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72  e table to inser
23bc0 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72  t into.. * pExpr
23bd0 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20  List -> If this 
23be0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
23bf0 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e  O ... VALUES ...
23c00 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
23c10 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23c20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c   this stores val
23c30 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ues to be insert
23c40 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  ed. Otherwise NU
23c50 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20  LL.. * pIdList  
23c60 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
23c70 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
23c80 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  . (<column-names
23c90 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a  >) VALUES .... *
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
23cb0 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
23cc0 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  is stores the co
23cd0 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65  lumn-names to be
23ce0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23cf0 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a   inserted into..
23d00 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
23d10 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67  DELETE). * zTarg
23d20 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
23d30 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
23d40 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f  le to delete fro
23d50 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  m.. * pWhere    
23d60 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
23d70 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54  use of the DELET
23d80 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
23d90 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
23da0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23db0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
23dc0 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
23dd0 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72  _UPDATE). * zTar
23de0 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
23df0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
23e00 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20  ble to update.. 
23e10 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
23e20 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
23e30 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
23e40 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
23e50 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
23e70 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
23e80 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c  pExprList -> A l
23e90 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ist of the colum
23ea0 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64  ns to update and
23eb0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
23ec0 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20   to update. *   
23ed0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20             them 
23ee0 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55  to. See sqlite3U
23ef0 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74  pdate() document
23f00 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67  ation of "pChang
23f10 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20  es". *          
23f20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a      argument.. *
23f30 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
23f40 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f  gerStep {.  u8 o
23f50 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
23f60 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
23f70 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
23f80 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53   TK_INSERT, TK_S
23f90 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72  ELECT */.  u8 or
23fa0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
23fb0 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65  /* OE_Rollback e
23fc0 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  tc. */.  Trigger
23fd0 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a   *pTrig;      /*
23fe0 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61   The trigger tha
23ff0 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61  t this step is a
24000 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65   part of */.  Se
24010 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
24020 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61     /* SELECT sta
24030 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66  tement or RHS of
24040 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c   INSERT INTO SEL
24050 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61  ECT ... */.  cha
24060 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20  r *zTarget;     
24070 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c    /* Target tabl
24080 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  e for DELETE, UP
24090 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a  DATE, INSERT */.
240a0 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
240b0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
240c0 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44  ERE clause for D
240d0 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
240e0 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c  steps */.  ExprL
240f0 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20  ist *pExprList; 
24100 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f  /* SET clause fo
24110 72 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 49 64  r UPDATE */.  Id
24120 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
24130 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
24140 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
24150 0a 20 20 55 70 73 65 72 74 20 2a 70 55 70 73 65  .  Upsert *pUpse
24160 72 74 3b 20 20 20 20 20 2f 2a 20 55 70 73 65 72  rt;     /* Upser
24170 74 20 63 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20  t clauses on an 
24180 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68 61 72  INSERT */.  char
24190 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
241a0 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c   /* Original SQL
241b0 20 74 65 78 74 20 6f 66 20 74 68 69 73 20 63 6f   text of this co
241c0 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67  mmand */.  Trigg
241d0 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20  erStep *pNext;  
241e0 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c  /* Next in the l
241f0 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72  ink-list */.  Tr
24200 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74  iggerStep *pLast
24210 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65  ;  /* Last eleme
24220 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e  nt in link-list.
24230 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65   Valid for 1st e
24240 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a  lem only */.};..
24250 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
24260 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
24270 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
24280 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73  on used by the s
24290 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72  qliteFix....** r
242a0 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20  outines as they 
242b0 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74  walk the parse t
242c0 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61  ree to make data
242d0 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a  base references.
242e0 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a  ** explicit..*/.
242f0 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
24300 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
24310 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
24320 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
24330 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
24340 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
24350 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
24360 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
24370 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
24380 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d  ;    /* Fix item
24390 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61  s to this schema
243a0 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e   */.  int bVarOn
243b0 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65  ly;       /* Che
243c0 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20  ck for variable 
243d0 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20  references only 
243e0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
243f0 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
24400 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
24410 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
24420 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
24430 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
24440 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
24450 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
24460 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
24470 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
24480 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
24490 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
244a0 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
244b0 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
244c0 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
244d0 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
244e0 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
244f0 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
24500 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
24510 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
24520 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
24530 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
24540 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
24550 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  end..*/.struct s
24560 71 6c 69 74 65 33 5f 73 74 72 20 7b 0a 20 20 73  qlite3_str {.  s
24570 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
24580 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
24590 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
245a0 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
245b0 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
245c0 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
245d0 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
245e0 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
245f0 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20  .  u32  nAlloc; 
24600 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
24610 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
24620 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
24630 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b  .  u32  mxAlloc;
24640 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
24650 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63  um allowed alloc
24660 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f  ation.  0 for no
24670 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f   malloc usage */
24680 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20  .  u32  nChar;  
24690 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
246a0 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
246b0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 20  so far */.  u8  
246c0 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
246d0 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d   /* SQLITE_NOMEM
246e0 20 6f 72 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49   or SQLITE_TOOBI
246f0 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e  G */.  u8   prin
24700 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53  tfFlags;    /* S
24710 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61  QLITE_PRINTF fla
24720 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23  gs below */.};.#
24730 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
24740 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
24750 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d  01  /* Internal-
24760 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74  use-only convert
24770 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23  ers allowed */.#
24780 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
24790 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
247a0 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74  02  /* SQL funct
247b0 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ion arguments to
247c0 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65   VXPrintf */.#de
247d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
247e0 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34  TF_MALLOCED 0x04
247f0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65    /* True if xTe
24800 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  xt is allocated 
24810 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e  space */..#defin
24820 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20  e isMalloced(X) 
24830 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c   (((X)->printfFl
24840 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49  ags & SQLITE_PRI
24850 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30  NTF_MALLOCED)!=0
24860 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e  ).../*.** A poin
24870 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
24880 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
24890 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66   communicate inf
248a0 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d  ormation.** from
248b0 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64   sqlite3Init and
248c0 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20   OP_ParseSchema 
248d0 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  into the sqlite3
248e0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  InitCallback..*/
248f0 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
24900 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
24910 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
24920 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e  atabase being in
24930 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63  itialized */.  c
24940 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20  har **pzErrMsg; 
24950 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
24960 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  age stored here 
24970 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
24980 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f           /* 0 fo
24990 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  r main database.
249a0 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e    1 for TEMP, 2.
249b0 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a  . for ATTACHed *
249c0 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
249d0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
249e0 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65  t code stored he
249f0 72 65 20 2a 2f 0a 20 20 75 33 32 20 6d 49 6e 69  re */.  u32 mIni
24a00 74 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46  tFlags;     /* F
24a10 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67  lags controlling
24a20 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
24a30 2a 2f 0a 20 20 75 33 32 20 6e 49 6e 69 74 52 6f  */.  u32 nInitRo
24a40 77 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  w;       /* Numb
24a50 65 72 20 6f 66 20 72 6f 77 73 20 70 72 6f 63 65  er of rows proce
24a60 73 73 65 64 20 2a 2f 0a 7d 20 49 6e 69 74 44 61  ssed */.} InitDa
24a70 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  ta;../*.** Allow
24a80 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 6d 49  ed values for mI
24a90 6e 69 74 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  nitFlags.*/.#def
24aa0 69 6e 65 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74  ine INITFLAG_Alt
24ab0 65 72 54 61 62 6c 65 20 20 20 30 78 30 30 30 31  erTable   0x0001
24ac0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61 20 72    /* This is a r
24ad0 65 70 61 72 73 65 20 61 66 74 65 72 20 41 4c 54  eparse after ALT
24ae0 45 52 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a  ER TABLE */../*.
24af0 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
24b00 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
24b10 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
24b20 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
24b30 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
24b40 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
24b50 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
24b60 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
24b70 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
24b80 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
24b90 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
24ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bb0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
24bc0 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
24bd0 75 73 20 2a 2f 0a 20 20 75 38 20 62 43 6f 72 65  us */.  u8 bCore
24be0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
24bf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24c00 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
24c10 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 75   mutexing */.  u
24c20 38 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  8 bFullMutex;   
24c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c40 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
24c50 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
24c60 20 2a 2f 0a 20 20 75 38 20 62 4f 70 65 6e 55 72   */.  u8 bOpenUr
24c70 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
24c80 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24c90 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
24ca0 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
24cb0 2f 0a 20 20 75 38 20 62 55 73 65 43 69 73 3b 20  /.  u8 bUseCis; 
24cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cd0 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76        /* Use cov
24ce0 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f  ering indices fo
24cf0 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a  r full-scans */.
24d00 20 20 75 38 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f    u8 bSmallMallo
24d10 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
24d20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72      /* Avoid lar
24d30 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ge memory alloca
24d40 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f  tions if true */
24d50 0a 20 20 75 38 20 62 45 78 74 72 61 53 63 68 65  .  u8 bExtraSche
24d60 6d 61 43 68 65 63 6b 73 3b 20 20 20 20 20 20 20  maChecks;       
24d70 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74       /* Verify t
24d80 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d  ype,name,tbl_nam
24d90 65 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a 20  e in schema */. 
24da0 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20   int mxStrlen;  
24db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24dc0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74     /* Maximum st
24dd0 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
24de0 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70   int neverCorrup
24df0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24e00 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69     /* Database i
24e10 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f  s always well-fo
24e20 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  rmed */.  int sz
24e30 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
24e40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
24e50 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
24e60 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a   buffer size */.
24e70 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65    int nLookaside
24e80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24e90 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
24ea0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
24eb0 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  count */.  int n
24ec0 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20  StmtSpill;      
24ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24ee0 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69  Stmt-journal spi
24ef0 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73  ll-to-disk thres
24f00 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65  hold */.  sqlite
24f10 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b  3_mem_methods m;
24f20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
24f30 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20  ow-level memory 
24f40 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72  allocation inter
24f50 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
24f60 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
24f70 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c  mutex;      /* L
24f80 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69  ow-level mutex i
24f90 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
24fa0 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
24fb0 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20  hods2 pcache2;  
24fc0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67  /* Low-level pag
24fd0 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63  e-cache interfac
24fe0 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65  e */.  void *pHe
24ff0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
25000 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70           /* Heap
25010 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a   storage space *
25020 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20  /.  int nHeap;  
25030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25040 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
25050 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e   pHeap[] */.  in
25060 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20  t mnReq, mxReq; 
25070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25080 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68  /* Min and max h
25090 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a  eap requests siz
250a0 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  es */.  sqlite3_
250b0 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20  int64 szMmap;   
250c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61            /* mma
250d0 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70  p() space per op
250e0 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c  en file */.  sql
250f0 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61  ite3_int64 mxMma
25100 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
25110 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  * Maximum value 
25120 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20  for szMmap */.  
25130 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20  void *pPage;    
25140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25150 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
25160 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
25170 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  szPage;         
25180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25190 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61   Size of each pa
251a0 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  ge in pPage[] */
251b0 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20  .  int nPage;   
251c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
251e0 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65  f pages in pPage
251f0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61  [] */.  int mxPa
25200 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20  rserStack;      
25210 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78            /* max
25220 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68  imum depth of th
25230 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a  e parser stack *
25240 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61  /.  int sharedCa
25250 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  cheEnabled;     
25260 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66        /* true if
25270 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
25280 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  de enabled */.  
25290 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20  u32 szPma;      
252a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252b0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72    /* Maximum Sor
252c0 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a  ter PMA size */.
252d0 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
252e0 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
252f0 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
25300 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
25310 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
25320 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
25330 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
25340 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25360 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
25370 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
25380 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
25390 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
253a0 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
253b0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
253c0 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
253d0 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
253e0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
253f0 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
25400 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
25410 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
25420 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
25430 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
25440 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
25450 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
25460 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
25470 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
25480 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
25490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254a0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
254b0 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
254c0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  zed */.  int nRe
254d0 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
254e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
254f0 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
25500 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
25510 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
25520 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
25530 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
25540 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
25550 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f  ialize() */.  vo
25560 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
25570 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
25580 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
25590 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
255a0 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
255b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255c0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
255d0 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
255e0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
255f0 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
25600 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
25610 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
25620 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
25630 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
25640 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69  ogArg;.#endif.#i
25650 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
25660 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54  _COVERAGE.  /* T
25670 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
25680 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55  lback (if not NU
25690 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f  LL) is invoked o
256a0 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61  n every VDBE bra
256b0 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  nch.  ** operati
256c0 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c  on.  Set the cal
256d0 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49  lback using SQLI
256e0 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
256f0 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a  _COVERAGE..  */.
25700 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72    void (*xVdbeBr
25710 61 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73 69  anch)(void*,unsi
25720 67 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c 75 38  gned iSrcLine,u8
25730 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20   eThis,u8 eMx); 
25740 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a   /* Callback */.
25750 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61    void *pVdbeBra
25760 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  nchArg;         
25770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25780 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
25790 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23  st argument */.#
257a0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
257b0 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52  ITE_ENABLE_DESER
257c0 49 41 4c 49 5a 45 0a 20 20 73 71 6c 69 74 65 33  IALIZE.  sqlite3
257d0 5f 69 6e 74 36 34 20 6d 78 4d 65 6d 64 62 53 69  _int64 mxMemdbSi
257e0 7a 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 44 65  ze;        /* De
257f0 66 61 75 6c 74 20 6d 61 78 20 6d 65 6d 64 62 20  fault max memdb 
25800 73 69 7a 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  size */.#endif.#
25810 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
25820 54 45 53 54 41 42 4c 45 0a 20 20 69 6e 74 20 28  TESTABLE.  int (
25830 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28  *xTestCallback)(
25840 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  int);        /* 
25850 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74  Invoked by sqlit
25860 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a  e3FaultSim() */.
25870 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f  #endif.  int bLo
25880 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20  caltimeFault;   
25890 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
258a0 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c  ue to fail local
258b0 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  time() calls */.
258c0 20 20 69 6e 74 20 62 49 6e 74 65 72 6e 61 6c 46    int bInternalF
258d0 75 6e 63 74 69 6f 6e 73 3b 20 20 20 20 20 20 20  unctions;       
258e0 20 20 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20      /* Internal 
258f0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  SQL functions ar
25900 65 20 76 69 73 69 62 6c 65 20 2a 2f 0a 20 20 69  e visible */.  i
25910 6e 74 20 69 4f 6e 63 65 52 65 73 65 74 54 68 72  nt iOnceResetThr
25920 65 73 68 6f 6c 64 3b 20 20 20 20 20 20 20 20 20  eshold;         
25930 20 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65 73 65   /* When to rese
25940 74 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65  t OP_Once counte
25950 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 7a 53 6f  rs */.  u32 szSo
25960 72 74 65 72 52 65 66 3b 20 20 20 20 20 20 20 20  rterRef;        
25970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e            /* Min
25980 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 74   size in bytes t
25990 6f 20 75 73 65 20 73 6f 72 74 65 72 2d 72 65 66  o use sorter-ref
259a0 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
259b0 69 6e 74 20 69 50 72 6e 67 53 65 65 64 3b 20 20  int iPrngSeed;  
259c0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 74 65           /* Alte
259d0 72 6e 61 74 69 76 65 20 66 69 78 65 64 20 73 65  rnative fixed se
259e0 65 64 20 66 6f 72 20 74 68 65 20 50 52 4e 47 20  ed for the PRNG 
259f0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
25a00 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
25a10 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74  inside of assert
25a20 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
25a30 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a   indicate that.*
25a40 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20  * the assert is 
25a50 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20  only valid on a 
25a60 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
25a70 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f  base.  Instead o
25a80 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  f:.**.**     ass
25a90 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20  ert( X );.**.** 
25aa0 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a  One writes:.**.*
25ab0 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
25ac0 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b  || CORRUPT_DB );
25ad0 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44  .**.** CORRUPT_D
25ae0 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67  B is true during
25af0 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f   normal operatio
25b00 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64  n.  CORRUPT_DB d
25b10 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65  oes not indicate
25b20 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
25b30 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74  abase is definit
25b40 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c  ely corrupt, onl
25b50 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20  y that it might 
25b60 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46  be corrupt..** F
25b70 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73  or most test cas
25b80 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69  es, CORRUPT_DB i
25b90 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75  s set to false u
25ba0 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a  sing a special.*
25bb0 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
25bc0 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20  ontrol().  This 
25bd0 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29  enables assert()
25be0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70   statements to p
25bf0 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74  rove.** things t
25c00 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74  hat are always t
25c10 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72  rue for well-for
25c20 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  med databases..*
25c30 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50  /.#define CORRUP
25c40 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f  T_DB  (sqlite3Co
25c50 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70  nfig.neverCorrup
25c60 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  t==0)../*.** Con
25c70 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73  text pointer pas
25c80 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68  sed down through
25c90 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a   the tree-walk..
25ca0 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72  */.struct Walker
25cb0 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
25cc0 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25ce0 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74  * Parser context
25cf0 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45  .  */.  int (*xE
25d00 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  xprCallback)(Wal
25d10 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20  ker*, Expr*);   
25d20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
25d30 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  r expressions */
25d40 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74  .  int (*xSelect
25d50 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
25d60 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20  *,Select*);  /* 
25d70 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  Callback for SEL
25d80 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ECTs */.  void (
25d90 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
25da0 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  2)(Walker*,Selec
25db0 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61  t*);/* Second ca
25dc0 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
25dd0 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b  Ts */.  int walk
25de0 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20  erDepth;        
25df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
25e10 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75  ubqueries */.  u
25e20 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20  8 eCode;        
25e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e40 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d           /* A sm
25e50 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63  all processing c
25e60 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
25e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e90 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61     /* Extra data
25ea0 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f   for callback */
25eb0 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  .    NameContext
25ec0 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20   *pNC;          
25ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25ee0 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74  * Naming context
25ef0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20   */.    int n;  
25f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a    /* A counter *
25f30 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20  /.    int iCur; 
25f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f60 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62  /* A cursor numb
25f70 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73  er */.    SrcLis
25f80 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20  t *pSrcList;    
25f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fa0 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75      /* FROM clau
25fb0 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  se */.    struct
25fc0 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43   SrcCount *pSrcC
25fd0 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ount;           
25fe0 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20      /* Counting 
25ff0 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65  column reference
26000 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
26010 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48  CCurHint *pCCurH
26020 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
26030 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63 6f     /* Used by co
26040 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20 2a  deCursorHint() *
26050 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c  /.    int *aiCol
26060 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26080 2f 2a 20 61 72 72 61 79 20 6f 66 20 63 6f 6c 75  /* array of colu
26090 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20  mn indexes */.  
260a0 20 20 73 74 72 75 63 74 20 49 64 78 43 6f 76 65    struct IdxCove
260b0 72 20 2a 70 49 64 78 43 6f 76 65 72 3b 20 20 20  r *pIdxCover;   
260c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
260d0 68 65 63 6b 20 66 6f 72 20 69 6e 64 65 78 20 63  heck for index c
260e0 6f 76 65 72 61 67 65 20 2a 2f 0a 20 20 20 20 73  overage */.    s
260f0 74 72 75 63 74 20 49 64 78 45 78 70 72 54 72 61  truct IdxExprTra
26100 6e 73 20 2a 70 49 64 78 54 72 61 6e 73 3b 20 20  ns *pIdxTrans;  
26110 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76           /* Conv
26120 65 72 74 20 69 64 78 65 64 20 65 78 70 72 20 74  ert idxed expr t
26130 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20  o column */.    
26140 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
26150 42 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  By;             
26160 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f            /* GRO
26170 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
26180 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
26190 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
261a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
261b0 20 48 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45   HAVING to WHERE
261c0 20 63 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20   clause ctx */. 
261d0 20 20 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77     struct Window
261e0 52 65 77 72 69 74 65 20 2a 70 52 65 77 72 69 74  Rewrite *pRewrit
261f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
26200 57 69 6e 64 6f 77 20 72 65 77 72 69 74 65 20 63  Window rewrite c
26210 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 73 74  ontext */.    st
26220 72 75 63 74 20 57 68 65 72 65 43 6f 6e 73 74 20  ruct WhereConst 
26230 2a 70 43 6f 6e 73 74 3b 20 20 20 20 20 20 20 20  *pConst;        
26240 20 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45          /* WHERE
26250 20 63 6c 61 75 73 65 20 63 6f 6e 73 74 61 6e 74   clause constant
26260 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
26270 52 65 6e 61 6d 65 43 74 78 20 2a 70 52 65 6e 61  RenameCtx *pRena
26280 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
26290 20 20 20 2f 2a 20 52 45 4e 41 4d 45 20 43 4f 4c     /* RENAME COL
262a0 55 4d 4e 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  UMN context */. 
262b0 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72   } u;.};../* For
262c0 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e  ward declaration
262d0 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s */.int sqlite3
262e0 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a  WalkExpr(Walker*
262f0 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
26300 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73  lite3WalkExprLis
26310 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c  t(Walker*, ExprL
26320 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
26330 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c  e3WalkSelect(Wal
26340 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
26350 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
26360 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72  electExpr(Walker
26370 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
26380 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
26390 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20  ctFrom(Walker*, 
263a0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
263b0 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f  lite3ExprWalkNoo
263c0 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  p(Walker*, Expr*
263d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
263e0 6c 65 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  lectWalkNoop(Wal
263f0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
26400 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
26410 74 57 61 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72  tWalkFail(Walker
26420 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66  *, Select*);.#if
26430 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
26440 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
26450 65 63 74 57 61 6c 6b 41 73 73 65 72 74 32 28 57  ectWalkAssert2(W
26460 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
26470 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
26480 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
26490 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
264a0 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
264b0 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
264c0 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
264d0 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
264e0 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
264f0 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
26500 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
26510 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
26520 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
26530 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
26540 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
26550 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
26560 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
26570 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
26580 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
26590 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
265a0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
265b0 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
265c0 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f  s a set of one o
265d0 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28  r more CTEs.** (
265e0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
265f0 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65  ressions) create
26600 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49  d by a single WI
26610 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  TH clause..*/.st
26620 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e  ruct With {.  in
26630 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20  t nCte;         
26640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26650 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20   Number of CTEs 
26660 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
26670 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f  se */.  With *pO
26680 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  uter;           
26690 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61          /* Conta
266a0 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73  ining WITH claus
266b0 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
266c0 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20  struct Cte {    
266d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266e0 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20  /* For each CTE 
266f0 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
26700 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68  se.... */.    ch
26710 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
26720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26730 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54   Name of this CT
26740 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  E */.    ExprLis
26750 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20  t *pCols;       
26760 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
26770 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c   of explicit col
26780 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55  umn names, or NU
26790 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  LL */.    Select
267a0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
267b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
267c0 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
267d0 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63  his CTE */.    c
267e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45  onst char *zCteE
267f0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
26800 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
26810 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66  for circular ref
26820 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61  erences */.  } a
26830 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20  [1];.};..#ifdef 
26840 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
26850 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
26860 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f  f the TreeView o
26870 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f  bject is used fo
26880 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63  r printing the c
26890 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74  ontent of.** dat
268a0 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20  a structures on 
268b0 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
268c0 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65  tf() using a tre
268d0 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a  e-like view..*/.
268e0 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20  struct TreeView 
268f0 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20  {.  int iLevel; 
26900 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
26910 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68  hich level of th
26920 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e  e tree we are on
26930 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b   */.  u8  bLine[
26940 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a  100];         /*
26950 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69   Draw vertical i
26960 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c  n column i if bL
26970 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a  ine[i] is true *
26980 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  /.};.#endif /* S
26990 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a  QLITE_DEBUG */..
269a0 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63  /*.** This objec
269b0 74 20 69 73 20 75 73 65 64 20 69 6e 20 76 61 72  t is used in var
269c0 69 6f 75 73 20 77 61 79 73 2c 20 6d 6f 73 74 20  ious ways, most 
269d0 28 62 75 74 20 6e 6f 74 20 61 6c 6c 29 20 72 65  (but not all) re
269e0 6c 61 74 65 64 20 74 6f 20 77 69 6e 64 6f 77 0a  lated to window.
269f0 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
26a00 0a 2a 2a 20 20 20 28 31 29 20 41 20 73 69 6e 67  .**   (1) A sing
26a10 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  le instance of t
26a20 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
26a30 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
26a40 0a 2a 2a 20 20 20 20 20 20 20 74 68 65 20 45 78  .**       the Ex
26a50 70 72 2e 79 2e 70 57 69 6e 20 66 69 65 6c 64 20  pr.y.pWin field 
26a60 66 6f 72 20 65 61 63 68 20 77 69 6e 64 6f 77 20  for each window 
26a70 66 75 6e 63 74 69 6f 6e 20 69 6e 20 61 6e 20 65  function in an e
26a80 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 2e 0a  xpression tree..
26a90 2a 2a 20 20 20 20 20 20 20 54 68 69 73 20 6f 62  **       This ob
26aa0 6a 65 63 74 20 68 6f 6c 64 73 20 74 68 65 20 69  ject holds the i
26ab0 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 6f 6e 74 61  nformation conta
26ac0 69 6e 65 64 20 69 6e 20 74 68 65 20 4f 56 45 52  ined in the OVER
26ad0 20 63 6c 61 75 73 65 2c 0a 2a 2a 20 20 20 20 20   clause,.**     
26ae0 20 20 70 6c 75 73 20 61 64 64 69 74 69 6f 6e 61    plus additiona
26af0 6c 20 66 69 65 6c 64 73 20 75 73 65 64 20 64 75  l fields used du
26b00 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61  ring code genera
26b10 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 32  tion..**.**   (2
26b20 29 20 41 6c 6c 20 77 69 6e 64 6f 77 20 66 75 6e  ) All window fun
26b30 63 74 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67  ctions in a sing
26b40 6c 65 20 53 45 4c 45 43 54 20 66 6f 72 6d 20 61  le SELECT form a
26b50 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 0a 2a 2a 20   linked-list.** 
26b60 20 20 20 20 20 20 61 74 74 61 63 68 65 64 20 74        attached t
26b70 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e 2e 20 20  o Select.pWin.  
26b80 54 68 65 20 57 69 6e 64 6f 77 2e 70 46 75 6e 63  The Window.pFunc
26b90 20 61 6e 64 20 57 69 6e 64 6f 77 2e 70 45 78 70   and Window.pExp
26ba0 72 0a 2a 2a 20 20 20 20 20 20 20 66 69 65 6c 64  r.**       field
26bb0 73 20 70 6f 69 6e 74 20 62 61 63 6b 20 74 6f 20  s point back to 
26bc0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
26bd0 68 61 74 20 69 73 20 74 68 65 20 77 69 6e 64 6f  hat is the windo
26be0 77 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  w function..**.*
26bf0 2a 20 20 20 28 33 29 20 54 68 65 20 74 65 72 6d  *   (3) The term
26c00 73 20 6f 66 20 74 68 65 20 57 49 4e 44 4f 57 20  s of the WINDOW 
26c10 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
26c20 43 54 20 61 72 65 20 69 6e 73 74 61 6e 63 65 73  CT are instances
26c30 20 6f 66 20 74 68 69 73 0a 2a 2a 20 20 20 20 20   of this.**     
26c40 20 20 6f 62 6a 65 63 74 20 6f 6e 20 61 20 6c 69    object on a li
26c50 6e 6b 65 64 20 6c 69 73 74 20 61 74 74 61 63 68  nked list attach
26c60 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70 57 69  ed to Select.pWi
26c70 6e 44 65 66 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28  nDefn..**.**   (
26c80 34 29 20 46 6f 72 20 61 6e 20 61 67 67 72 65 67  4) For an aggreg
26c90 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
26ca0 68 20 61 20 46 49 4c 54 45 52 20 63 6c 61 75 73  h a FILTER claus
26cb0 65 2c 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  e, an instance.*
26cc0 2a 20 20 20 20 20 20 20 6f 66 20 74 68 69 73 20  *       of this 
26cd0 6f 62 6a 65 63 74 20 69 73 20 73 74 6f 72 65 64  object is stored
26ce0 20 69 6e 20 45 78 70 72 2e 79 2e 70 57 69 6e 20   in Expr.y.pWin 
26cf0 77 69 74 68 20 65 46 72 6d 54 79 70 65 20 73 65  with eFrmType se
26d00 74 20 74 6f 0a 2a 2a 20 20 20 20 20 20 20 54 4b  t to.**       TK
26d10 5f 46 49 4c 54 45 52 2e 20 49 6e 20 74 68 69 73  _FILTER. In this
26d20 20 63 61 73 65 20 74 68 65 20 6f 6e 6c 79 20 66   case the only f
26d30 69 65 6c 64 20 75 73 65 64 20 69 73 20 57 69 6e  ield used is Win
26d40 64 6f 77 2e 70 46 69 6c 74 65 72 2e 0a 2a 2a 0a  dow.pFilter..**.
26d50 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31 29 20  ** The uses (1) 
26d60 61 6e 64 20 28 32 29 20 61 72 65 20 72 65 61 6c  and (2) are real
26d70 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e 64  ly the same Wind
26d80 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20 6a  ow object that j
26d90 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74  ust happens.** t
26da0 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c 65 20  o be accessible 
26db0 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74  in two different
26dc0 20 77 61 79 73 2e 20 20 55 73 65 20 63 61 73 65   ways.  Use case
26dd0 20 28 33 29 20 61 72 65 20 73 65 70 61 72 61 74   (3) are separat
26de0 65 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  e objects..*/.st
26df0 72 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20  ruct Window {.  
26e00 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
26e10 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
26e20 6f 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62  of window (may b
26e30 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 63 68 61  e NULL) */.  cha
26e40 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20  r *zBase;       
26e50 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
26e60 62 61 73 65 20 77 69 6e 64 6f 77 20 66 6f 72 20  base window for 
26e70 63 68 61 69 6e 69 6e 67 20 28 6d 61 79 20 62 65  chaining (may be
26e80 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72   NULL) */.  Expr
26e90 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e  List *pPartition
26ea0 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e  ;   /* PARTITION
26eb0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
26ec0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
26ed0 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52  By;     /* ORDER
26ee0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
26ef0 75 38 20 65 46 72 6d 54 79 70 65 3b 20 20 20 20  u8 eFrmType;    
26f00 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41          /* TK_RA
26f10 4e 47 45 2c 20 54 4b 5f 47 52 4f 55 50 53 2c 20  NGE, TK_GROUPS, 
26f20 54 4b 5f 52 4f 57 53 2c 20 6f 72 20 30 20 2a 2f  TK_ROWS, or 0 */
26f30 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20 20 20  .  u8 eStart;   
26f40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e             /* UN
26f50 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54  BOUNDED, CURRENT
26f60 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46  , PRECEDING or F
26f70 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38  OLLOWING */.  u8
26f80 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20   eEnd;          
26f90 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44        /* UNBOUND
26fa0 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45  ED, CURRENT, PRE
26fb0 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57  CEDING or FOLLOW
26fc0 49 4e 47 20 2a 2f 0a 20 20 75 38 20 62 49 6d 70  ING */.  u8 bImp
26fd0 6c 69 63 69 74 46 72 61 6d 65 3b 20 20 20 20 20  licitFrame;     
26fe0 20 2f 2a 20 54 72 75 65 20 69 66 20 66 72 61 6d   /* True if fram
26ff0 65 20 77 61 73 20 69 6d 70 6c 69 63 69 74 6c 79  e was implicitly
27000 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 20 20   specified */.  
27010 75 38 20 65 45 78 63 6c 75 64 65 3b 20 20 20 20  u8 eExclude;    
27020 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 4e 4f          /* TK_NO
27030 2c 20 54 4b 5f 43 55 52 52 45 4e 54 2c 20 54 4b  , TK_CURRENT, TK
27040 5f 54 49 45 53 2c 20 54 4b 5f 47 52 4f 55 50 2c  _TIES, TK_GROUP,
27050 20 6f 72 20 30 20 2a 2f 0a 20 20 45 78 70 72 20   or 0 */.  Expr 
27060 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
27070 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
27080 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45   for "<expr> PRE
27090 43 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70  CEDING" */.  Exp
270a0 72 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  r *pEnd;        
270b0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
270c0 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46  on for "<expr> F
270d0 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57  OLLOWING" */.  W
270e0 69 6e 64 6f 77 20 2a 2a 70 70 54 68 69 73 3b 20  indow **ppThis; 
270f0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
27100 72 20 74 6f 20 74 68 69 73 20 6f 62 6a 65 63 74  r to this object
27110 20 69 6e 20 53 65 6c 65 63 74 2e 70 57 69 6e 20   in Select.pWin 
27120 6c 69 73 74 20 2a 2f 0a 20 20 57 69 6e 64 6f 77  list */.  Window
27130 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20 20 20 20   *pNextWin;     
27140 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e 64 6f 77    /* Next window
27150 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c 6f 6e 67   function belong
27160 69 6e 67 20 74 6f 20 74 68 69 73 20 53 45 4c 45  ing to this SELE
27170 43 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 46  CT */.  Expr *pF
27180 69 6c 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  ilter;          
27190 2f 2a 20 54 68 65 20 46 49 4c 54 45 52 20 65 78  /* The FILTER ex
271a0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 46 75  pression */.  Fu
271b0 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
271c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 75 6e        /* The fun
271d0 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  ction */.  int i
271e0 45 70 68 43 73 72 3b 20 20 20 20 20 20 20 20 20  EphCsr;         
271f0 20 20 20 2f 2a 20 50 61 72 74 69 74 69 6f 6e 20     /* Partition 
27200 62 75 66 66 65 72 20 6f 72 20 50 65 65 72 20 62  buffer or Peer b
27210 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 72  uffer */.  int r
27220 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e 74 20 72  egAccum;.  int r
27230 65 67 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20  egResult;.  int 
27240 63 73 72 41 70 70 3b 20 20 20 20 20 20 20 20 20  csrApp;         
27250 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20      /* Function 
27260 63 75 72 73 6f 72 20 28 75 73 65 64 20 62 79 20  cursor (used by 
27270 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e  min/max) */.  in
27280 74 20 72 65 67 41 70 70 3b 20 20 20 20 20 20 20  t regApp;       
27290 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f        /* Functio
272a0 6e 20 72 65 67 69 73 74 65 72 20 28 61 6c 73 6f  n register (also
272b0 20 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78   used by min/max
272c0 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 50 61  ) */.  int regPa
272d0 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rt;            /
272e0 2a 20 41 72 72 61 79 20 6f 66 20 72 65 67 69 73  * Array of regis
272f0 74 65 72 73 20 66 6f 72 20 50 41 52 54 49 54 49  ters for PARTITI
27300 4f 4e 20 42 59 20 76 61 6c 75 65 73 20 2a 2f 0a  ON BY values */.
27310 20 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 3b 20    Expr *pOwner; 
27320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
27330 72 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74 20 74  ression object t
27340 68 69 73 20 77 69 6e 64 6f 77 20 69 73 20 61 74  his window is at
27350 74 61 63 68 65 64 20 74 6f 20 2a 2f 0a 20 20 69  tached to */.  i
27360 6e 74 20 6e 42 75 66 66 65 72 43 6f 6c 3b 20 20  nt nBufferCol;  
27370 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
27380 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 62   of columns in b
27390 75 66 66 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20  uffer table */. 
273a0 20 69 6e 74 20 69 41 72 67 43 6f 6c 3b 20 20 20   int iArgCol;   
273b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73           /* Offs
273c0 65 74 20 6f 66 20 66 69 72 73 74 20 61 72 67 75  et of first argu
273d0 6d 65 6e 74 20 66 6f 72 20 74 68 69 73 20 66 75  ment for this fu
273e0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  nction */.  int 
273f0 72 65 67 4f 6e 65 3b 20 20 20 20 20 20 20 20 20  regOne;         
27400 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
27410 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6e 73 74  containing const
27420 61 6e 74 20 76 61 6c 75 65 20 31 20 2a 2f 0a 20  ant value 1 */. 
27430 20 69 6e 74 20 72 65 67 53 74 61 72 74 52 6f 77   int regStartRow
27440 69 64 3b 0a 20 20 69 6e 74 20 72 65 67 45 6e 64  id;.  int regEnd
27450 52 6f 77 69 64 3b 0a 7d 3b 0a 0a 23 69 66 6e 64  Rowid;.};..#ifnd
27460 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
27470 49 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64 20 73  INDOWFUNC.void s
27480 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65  qlite3WindowDele
27490 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 57 69 6e  te(sqlite3*, Win
274a0 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dow*);.void sqli
274b0 74 65 33 57 69 6e 64 6f 77 55 6e 6c 69 6e 6b 46  te3WindowUnlinkF
274c0 72 6f 6d 53 65 6c 65 63 74 28 57 69 6e 64 6f 77  romSelect(Window
274d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
274e0 57 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74 65  WindowListDelete
274f0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69  (sqlite3 *db, Wi
27500 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77  ndow *p);.Window
27510 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41   *sqlite3WindowA
27520 6c 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e 74  lloc(Parse*, int
27530 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69 6e  , int, Expr*, in
27540 74 20 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  t , Expr*, u8);.
27550 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
27560 6f 77 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c  owAttach(Parse*,
27570 20 45 78 70 72 2a 2c 20 57 69 6e 64 6f 77 2a 29   Expr*, Window*)
27580 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
27590 6e 64 6f 77 4c 69 6e 6b 28 53 65 6c 65 63 74 20  ndowLink(Select 
275a0 2a 70 53 65 6c 2c 20 57 69 6e 64 6f 77 20 2a 70  *pSel, Window *p
275b0 57 69 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  Win);.int sqlite
275c0 33 57 69 6e 64 6f 77 43 6f 6d 70 61 72 65 28 50  3WindowCompare(P
275d0 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20  arse*, Window*, 
275e0 57 69 6e 64 6f 77 2a 2c 20 69 6e 74 29 3b 0a 76  Window*, int);.v
275f0 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
27600 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73 65 2a  wCodeInit(Parse*
27610 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64  , Window*);.void
27620 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f   sqlite3WindowCo
27630 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c 20 53  deStep(Parse*, S
27640 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49 6e 66  elect*, WhereInf
27650 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69  o*, int, int);.i
27660 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  nt sqlite3Window
27670 52 65 77 72 69 74 65 28 50 61 72 73 65 2a 2c 20  Rewrite(Parse*, 
27680 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
27690 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62 71 75  lite3ExpandSubqu
276a0 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74 72 75  ery(Parse*, stru
276b0 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 2a  ct SrcList_item*
276c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
276d0 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61 72 73  indowUpdate(Pars
276e0 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e  e*, Window*, Win
276f0 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b  dow*, FuncDef*);
27700 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33  .Window *sqlite3
27710 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69 74 65  WindowDup(sqlite
27720 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f 77  3 *db, Expr *pOw
27730 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b  ner, Window *p);
27740 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33  .Window *sqlite3
27750 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28 73 71  WindowListDup(sq
27760 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f  lite3 *db, Windo
27770 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69  w *p);.void sqli
27780 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f  te3WindowFunctio
27790 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
277a0 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 68 61 69  qlite3WindowChai
277b0 6e 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77  n(Parse*, Window
277c0 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 57 69 6e  *, Window*);.Win
277d0 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64  dow *sqlite3Wind
277e0 6f 77 41 73 73 65 6d 62 6c 65 28 50 61 72 73 65  owAssemble(Parse
277f0 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 45 78 70 72  *, Window*, Expr
27800 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
27810 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 23 65 6c 73 65  , Token*);.#else
27820 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27830 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61 2c  3WindowDelete(a,
27840 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  b).# define sqli
27850 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f  te3WindowFunctio
27860 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73 71  ns().# define sq
27870 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63  lite3WindowAttac
27880 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66 0a  h(a,b,c).#endif.
27890 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
278a0 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  zIn points to th
278b0 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
278c0 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  a UTF-8 characte
278d0 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49  r,.** advance zI
278e0 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  n to point to th
278f0 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
27900 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63  the next UTF-8 c
27910 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65  haracter..*/.#de
27920 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50  fine SQLITE_SKIP
27930 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20  _UTF8(zIn) {    
27940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27950 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a      \.  if( (*(z
27960 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20  In++))>=0xc0 ){ 
27970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27980 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
27990 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20     while( (*zIn 
279a0 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  & 0xc0)==0x80 ){
279b0 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20   zIn++; }       
279c0 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20        \.  }     
279d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
27a00 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  .}../*.** The SQ
27a10 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72  LITE_*_BKPT macr
27a20 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  os are substitut
27a30 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  es for the error
27a40 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74   codes with.** t
27a50 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74  he same name but
27a60 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b   without the _BK
27a70 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73  PT suffix.  Thes
27a80 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a  e macros invoke.
27a90 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  ** routines that
27aa0 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65   report the line
27ab0 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68  -number on which
27ac0 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69   the error origi
27ad0 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73  nated.** using s
27ae0 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54  qlite3_log().  T
27af0 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f  he routines also
27b00 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65   provide a conve
27b10 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74  nient place.** t
27b20 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
27b30 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
27b40 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f 72  int sqlite3Repor
27b50 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72 2c  tError(int iErr,
27b60 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e   int lineno, con
27b70 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29 3b  st char *zType);
27b80 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72  .int sqlite3Corr
27b90 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  uptError(int);.i
27ba0 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  nt sqlite3Misuse
27bb0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
27bc0 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
27bd0 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69  rror(int);.#defi
27be0 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
27bf0 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f  T_BKPT sqlite3Co
27c00 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
27c10 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
27c20 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20  ITE_MISUSE_BKPT 
27c30 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
27c40 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
27c50 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  fine SQLITE_CANT
27c60 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65  OPEN_BKPT sqlite
27c70 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f  3CantopenError(_
27c80 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20  _LINE__).#ifdef 
27c90 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
27ca0 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  nt sqlite3NomemE
27cb0 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74  rror(int);.  int
27cc0 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d   sqlite3Ioerrnom
27cd0 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20  emError(int);.  
27ce0 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
27cf0 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c  ptPgnoError(int,
27d00 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20  Pgno);.# define 
27d10 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
27d20 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  T sqlite3NomemEr
27d30 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20  ror(__LINE__).# 
27d40 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f  define SQLITE_IO
27d50 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73  ERR_NOMEM_BKPT s
27d60 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d  qlite3Ioerrnomem
27d70 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
27d80 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
27d90 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20  CORRUPT_PGNO(P) 
27da0 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67  sqlite3CorruptPg
27db0 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  noError(__LINE__
27dc0 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65  ,(P)).#else.# de
27dd0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  fine SQLITE_NOME
27de0 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f  M_BKPT SQLITE_NO
27df0 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MEM.# define SQL
27e00 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f  ITE_IOERR_NOMEM_
27e10 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52  BKPT SQLITE_IOER
27e20 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65  R_NOMEM.# define
27e30 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
27e40 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43  PGNO(P) sqlite3C
27e50 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
27e60 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  NE__).#endif../*
27e70 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53  .** FTS3 and FTS
27e80 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76  4 both require v
27e90 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70  irtual table sup
27ea0 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69  port.*/.#if defi
27eb0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
27ec0 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20  VIRTUALTABLE).# 
27ed0 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
27ee0 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66  BLE_FTS3.# undef
27ef0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
27f00 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  TS4.#endif../*.*
27f10 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79  * FTS4 is really
27f20 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f   an extension fo
27f30 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65  r FTS3.  It is e
27f40 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
27f50 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
27f60 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42  E_FTS3 macro.  B
27f70 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  ut to avoid conf
27f80 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61  usion we also ca
27f90 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  ll.** the SQLITE
27fa0 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63  _ENABLE_FTS4 mac
27fb0 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61  ro to serve as a
27fc0 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49  n alias for SQLI
27fd0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a  TE_ENABLE_FTS3..
27fe0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
27ff0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
28000 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  4) && !defined(S
28010 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
28020 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  3).# define SQLI
28030 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31  TE_ENABLE_FTS3 1
28040 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
28050 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65  he ctype.h heade
28060 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20  r is needed for 
28070 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d  non-ASCII system
28080 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a  s.  It is also.*
28090 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33  * needed by FTS3
280a0 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e   when FTS3 is in
280b0 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d  cluded in the am
280c0 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23  algamation..*/.#
280d0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
280e0 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20  TE_ASCII) || \. 
280f0 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
28100 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20  TE_ENABLE_FTS3) 
28110 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
28120 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29  E_AMALGAMATION))
28130 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70  .# include <ctyp
28140 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e.h>.#endif../*.
28150 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
28160 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68   macros mimic th
28170 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
28180 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75  ry functions tou
28190 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61  pper(),.** isspa
281a0 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c  ce(), isalnum(),
281b0 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69   isdigit() and i
281c0 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65  sxdigit(), respe
281d0 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20  ctively. The.** 
281e0 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  sqlite versions 
281f0 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53  only work for AS
28200 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20  CII characters, 
28210 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f  regardless of lo
28220 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  cale..*/.#ifdef 
28230 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64  SQLITE_ASCII.# d
28240 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
28250 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28  pper(x)  ((x)&~(
28260 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
28270 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
28280 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66  x)]&0x20)).# def
28290 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
282a0 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ce(x)   (sqlite3
282b0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
282c0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
282d0 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  1).# define sqli
282e0 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
282f0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
28300 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
28310 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66  (x)]&0x06).# def
28320 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
28330 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ha(x)   (sqlite3
28340 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
28350 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
28360 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  2).# define sqli
28370 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
28380 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
28390 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
283a0 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66  (x)]&0x04).# def
283b0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
283c0 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33  git(x)  (sqlite3
283d0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
283e0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
283f0 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  8).# define sqli
28400 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
28410 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c  (sqlite3UpperToL
28420 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63  ower[(unsigned c
28430 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69  har)(x)]).# defi
28440 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74  ne sqlite3Isquot
28450 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
28460 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
28470 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 38 30  d char)(x)]&0x80
28480 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
28490 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
284a0 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e  x)   toupper((un
284b0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
284c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
284d0 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73  3Isspace(x)   is
284e0 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20  space((unsigned 
284f0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
28500 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
28510 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28  m(x)   isalnum((
28520 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
28530 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
28540 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
28550 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65  isalpha((unsigne
28560 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
28570 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
28580 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74  git(x)   isdigit
28590 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
285a0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
285b0 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
285c0 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69    isxdigit((unsi
285d0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
285e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
285f0 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f  olower(x)   tolo
28600 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  wer((unsigned ch
28610 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
28620 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28   sqlite3Isquote(
28630 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c  x)   ((x)=='"'||
28640 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d  (x)=='\''||(x)==
28650 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23  '['||(x)=='`').#
28660 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
28670 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a  3IsIdChar(u8);..
28680 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
28690 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
286a0 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  es.*/.int sqlite
286b0 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63  3StrICmp(const c
286c0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
286d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
286e0 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61  rlen30(const cha
286f0 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
28700 69 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28 43  ite3Strlen30NN(C
28710 29 20 28 73 74 72 6c 65 6e 28 43 29 26 30 78 33  ) (strlen(C)&0x3
28720 66 66 66 66 66 66 66 29 0a 63 68 61 72 20 2a 73  fffffff).char *s
28730 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65  qlite3ColumnType
28740 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b  (Column*,char*);
28750 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
28760 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33  StrNICmp sqlite3
28770 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73  _strnicmp..int s
28780 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74  qlite3MallocInit
28790 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
287a0 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f  ite3MallocEnd(vo
287b0 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  id);.void *sqlit
287c0 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76  e3Malloc(u64);.v
287d0 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
287e0 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69  ocZero(u64);.voi
287f0 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
28800 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c  ocZero(sqlite3*,
28810 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
28820 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
28830 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
28840 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
28850 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74  allocRawNN(sqlit
28860 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  e3*, u64);.char 
28870 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
28880 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
28890 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
288a0 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
288b0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
288c0 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  ar*, u64);.char 
288d0 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75  *sqlite3DbSpanDu
288e0 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
288f0 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
28900 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  r*);.void *sqlit
28910 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
28920 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
28930 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
28940 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
28950 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
28960 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
28970 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
28980 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
28990 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
289a0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
289b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
289c0 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c  FreeNN(sqlite3*,
289d0 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
289e0 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
289f0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
28a00 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
28a10 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
28a20 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
28a30 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
28a40 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
28a50 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
28a60 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
28a70 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66  fault(void);.#if
28a80 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
28a90 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
28aa0 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
28ab0 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
28ac0 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
28ad0 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  id));.#endif.int
28ae0 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
28af0 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
28b00 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
28b10 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
28b20 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
28b30 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
28b40 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
28b50 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
28b60 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
28b70 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
28b80 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
28b90 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
28ba0 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
28bb0 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
28bc0 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
28bd0 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
28be0 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
28bf0 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
28c00 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
28c10 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
28c20 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
28c30 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
28c40 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
28c50 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
28c60 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
28c70 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
28c80 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
28c90 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
28ca0 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
28cb0 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
28cc0 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
28cd0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
28ce0 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64  e(D,P).#else.# d
28cf0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
28d00 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
28d10 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
28d20 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
28d30 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
28d40 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
28d50 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
28d60 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
28d70 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
28d80 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
28d90 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
28da0 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f  #endif../* Do no
28db0 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d  t allow both MEM
28dc0 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33  SYS5 and MEMSYS3
28dd0 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74   to be defined t
28de0 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65  ogether.  If the
28df0 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c  y.** are, disabl
28e00 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66  e MEMSYS3.*/.#if
28e10 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
28e20 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20  E_MEMSYS5.const 
28e30 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
28e40 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
28e50 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b  etMemsys5(void);
28e60 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  .#undef SQLITE_E
28e70 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65  NABLE_MEMSYS3.#e
28e80 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
28e90 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
28ea0 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
28eb0 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
28ec0 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
28ed0 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
28ee0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
28ef0 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71  _MUTEX_OMIT.  sq
28f00 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
28f10 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
28f20 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76  e3DefaultMutex(v
28f30 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
28f40 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
28f50 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70  nst *sqlite3Noop
28f60 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
28f70 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
28f80 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28  lite3MutexAlloc(
28f90 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
28fa0 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69  te3MutexInit(voi
28fb0 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  d);.  int sqlite
28fc0 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b  3MutexEnd(void);
28fd0 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
28fe0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
28ff0 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69  X_OMIT) && !defi
29000 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
29010 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71  _NOOP).  void sq
29020 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69  lite3MemoryBarri
29030 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  er(void);.#else.
29040 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29050 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a  MemoryBarrier().
29060 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f  #endif..sqlite3_
29070 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61  int64 sqlite3Sta
29080 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76  tusValue(int);.v
29090 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
290a0 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  sUp(int, int);.v
290b0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
290c0 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b  sDown(int, int);
290d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
290e0 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74  tusHighwater(int
290f0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
29100 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64  te3LookasideUsed
29110 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b  (sqlite3*,int*);
29120 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d  ../* Access to m
29130 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73  utexes used by s
29140 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20  qlite3_status() 
29150 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  */.sqlite3_mutex
29160 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31   *sqlite3Pcache1
29170 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c  Mutex(void);.sql
29180 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
29190 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76  te3MallocMutex(v
291a0 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e  oid);..#if defin
291b0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
291c0 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43  _MULTITHREADED_C
291d0 48 45 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e  HECKS) && !defin
291e0 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
291f0 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74  OMIT).void sqlit
29200 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e  e3MutexWarnOnCon
29210 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f  tention(sqlite3_
29220 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23  mutex*);.#else.#
29230 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
29240 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e  utexWarnOnConten
29250 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a  tion(x).#endif..
29260 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29270 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
29280 4e 54 0a 23 20 64 65 66 69 6e 65 20 45 58 50 37  NT.# define EXP7
29290 35 34 20 28 28 28 75 36 34 29 30 78 37 66 66 29  54 (((u64)0x7ff)
292a0 3c 3c 35 32 29 0a 23 20 64 65 66 69 6e 65 20 4d  <<52).# define M
292b0 41 4e 37 35 34 20 28 28 28 28 75 36 34 29 31 29  AN754 ((((u64)1)
292c0 3c 3c 35 32 29 2d 31 29 0a 23 20 64 65 66 69 6e  <<52)-1).# defin
292d0 65 20 49 73 4e 61 4e 28 58 29 20 28 28 28 58 29  e IsNaN(X) (((X)
292e0 26 45 58 50 37 35 34 29 3d 3d 45 58 50 37 35 34  &EXP754)==EXP754
292f0 20 26 26 20 28 28 58 29 26 4d 41 4e 37 35 34 29   && ((X)&MAN754)
29300 21 3d 30 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  !=0).  int sqlit
29310 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b  e3IsNaN(double);
29320 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
29330 49 73 4e 61 4e 28 58 29 20 20 20 20 20 20 20 20  IsNaN(X)        
29340 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
29350 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23  te3IsNaN(X)  0.#
29360 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
29370 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
29380 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
29390 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
293a0 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a  ation about SQL.
293b0 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67  ** functions arg
293c0 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20  uments that are 
293d0 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74  the parameters t
293e0 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66  o the printf() f
293f0 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  unction..*/.stru
29400 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ct PrintfArgumen
29410 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ts {.  int nArg;
29420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29430 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20  /* Total number 
29440 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
29450 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20    int nUsed;    
29460 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
29470 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
29480 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
29490 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
294a0 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54   **apArg;   /* T
294b0 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75  he argument valu
294c0 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20 2a  es */.};..char *
294d0 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
294e0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
294f0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
29500 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
29510 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
29520 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
29530 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
29540 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
29550 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56  fined(SQLITE_HAV
29560 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f  E_OS_TRACE).  vo
29570 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
29580 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
29590 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a  *, ...);.#endif.
295a0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
295b0 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20  TE_TEST).  void 
295c0 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74  *sqlite3TestText
295d0 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72  ToPtr(const char
295e0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
295f0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
29600 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
29610 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
29620 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
29630 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  t Expr*, u8);.  
29640 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
29650 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73 74  ViewBareExprList
29660 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
29670 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  t ExprList*, con
29680 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
29690 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
296a0 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  wExprList(TreeVi
296b0 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
296c0 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20  ist*, u8, const 
296d0 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
296e0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 72  qlite3TreeViewSr
296f0 63 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c  cList(TreeView*,
29700 20 63 6f 6e 73 74 20 53 72 63 4c 69 73 74 2a 29   const SrcList*)
29710 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29720 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54  TreeViewSelect(T
29730 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
29740 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20  Select*, u8);.  
29750 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
29760 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65  ViewWith(TreeVie
29770 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c  w*, const With*,
29780 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
29790 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57  LITE_OMIT_WINDOW
297a0 46 55 4e 43 0a 20 20 76 6f 69 64 20 73 71 6c 69  FUNC.  void sqli
297b0 74 65 33 54 72 65 65 56 69 65 77 57 69 6e 64 6f  te3TreeViewWindo
297c0 77 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  w(TreeView*, con
297d0 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b  st Window*, u8);
297e0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
297f0 72 65 65 56 69 65 77 57 69 6e 46 75 6e 63 28 54  reeViewWinFunc(T
29800 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
29810 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 23 65  Window*, u8);.#e
29820 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f  ndif.#endif...vo
29830 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
29840 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
29850 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
29860 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
29870 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
29880 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
29890 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..);.int sqlite3
298a0 45 72 72 6f 72 54 6f 50 61 72 73 65 72 28 73 71  ErrorToParser(sq
298b0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
298c0 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  d sqlite3Dequote
298d0 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  (char*);.void sq
298e0 6c 69 74 65 33 44 65 71 75 6f 74 65 45 78 70 72  lite3DequoteExpr
298f0 28 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  (Expr*);.void sq
29900 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54  lite3TokenInit(T
29910 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e  oken*,char*);.in
29920 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
29930 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
29940 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
29950 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
29960 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
29970 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
29980 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
29990 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
299a0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
299b0 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
299c0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
299d0 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
299e0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
299f0 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
29a00 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
29a10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29a20 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
29a30 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
29a40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65  .void sqlite3Cle
29a50 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50  arTempRegCache(P
29a60 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53  arse*);.#ifdef S
29a70 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
29a80 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e  sqlite3NoTempsIn
29a90 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
29aa0 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78  ,int);.#endif.Ex
29ab0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
29ac0 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
29ad0 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69  t,const Token*,i
29ae0 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
29af0 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c  e3Expr(sqlite3*,
29b00 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
29b10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29b20 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73  prAttachSubtrees
29b30 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
29b40 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
29b50 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72  pr *sqlite3PExpr
29b60 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78  (Parse*, int, Ex
29b70 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
29b80 64 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64  d sqlite3PExprAd
29b90 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  dSelect(Parse*, 
29ba0 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  Expr*, Select*);
29bb0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
29bc0 70 72 41 6e 64 28 50 61 72 73 65 2a 2c 45 78 70  prAnd(Parse*,Exp
29bd0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  r*, Expr*);.Expr
29be0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 69 6d   *sqlite3ExprSim
29bf0 70 6c 69 66 69 65 64 41 6e 64 4f 72 28 45 78 70  plifiedAndOr(Exp
29c00 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
29c10 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50  e3ExprFunction(P
29c20 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
29c30 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
29c40 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
29c50 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
29c60 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33  arse*, Expr*, u3
29c70 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
29c80 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74  ExprDelete(sqlit
29c90 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  e3*, Expr*);.voi
29ca0 64 20 73 71 6c 69 74 65 33 45 78 70 72 55 6e 6d  d sqlite3ExprUnm
29cb0 61 70 41 6e 64 44 65 6c 65 74 65 28 50 61 72 73  apAndDelete(Pars
29cc0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  e*, Expr*);.Expr
29cd0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
29ce0 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73  rListAppend(Pars
29cf0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
29d00 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  r*);.ExprList *s
29d10 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70  qlite3ExprListAp
29d20 70 65 6e 64 56 65 63 74 6f 72 28 50 61 72 73 65  pendVector(Parse
29d30 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69  *,ExprList*,IdLi
29d40 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  st*,Expr*);.void
29d50 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
29d60 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70  SetSortOrder(Exp
29d70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69  rList*,int);.voi
29d80 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
29d90 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c  tSetName(Parse*,
29da0 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a  ExprList*,Token*
29db0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
29dc0 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70  te3ExprListSetSp
29dd0 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  an(Parse*,ExprLi
29de0 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  st*,const char*,
29df0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
29e00 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
29e10 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
29e20 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75  *, ExprList*);.u
29e30 33 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  32 sqlite3ExprLi
29e40 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78  stFlags(const Ex
29e50 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
29e60 6c 69 74 65 33 49 6e 64 65 78 48 61 73 44 75 70  lite3IndexHasDup
29e70 6c 69 63 61 74 65 52 6f 6f 74 50 61 67 65 28 49  licateRootPage(I
29e80 6e 64 65 78 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ndex*);.int sqli
29e90 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
29ea0 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
29eb0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
29ec0 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
29ed0 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
29ee0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 4f  int sqlite3InitO
29ef0 6e 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ne(sqlite3*, int
29f00 2c 20 63 68 61 72 2a 2a 2c 20 75 33 32 29 3b 0a  , char**, u32);.
29f10 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
29f20 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
29f30 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
29f40 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
29f50 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
29f60 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71  TABLE.Module *sq
29f70 6c 69 74 65 33 50 72 61 67 6d 61 56 74 61 62 52  lite3PragmaVtabR
29f80 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
29f90 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61  ,const char *zNa
29fa0 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  me);.#endif.void
29fb0 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
29fc0 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
29fd0 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ion(sqlite3*);.v
29fe0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
29ff0 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65  OneSchema(sqlite
2a000 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
2a010 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74  lite3CollapseDat
2a020 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74  abaseArray(sqlit
2a030 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
2a040 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c  e3CommitInternal
2a050 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a  Changes(sqlite3*
2a060 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2a070 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73  eleteColumnNames
2a080 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a  (sqlite3*,Table*
2a090 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
2a0a0 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73  lumnsFromExprLis
2a0b0 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  t(Parse*,ExprLis
2a0c0 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a  t*,i16*,Column**
2a0d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a0e0 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79  electAddColumnTy
2a0f0 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50  peAndCollation(P
2a100 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c  arse*,Table*,Sel
2a110 65 63 74 2a 2c 63 68 61 72 29 3b 0a 54 61 62 6c  ect*,char);.Tabl
2a120 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74  e *sqlite3Result
2a130 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73  SetOfSelect(Pars
2a140 65 2a 2c 53 65 6c 65 63 74 2a 2c 63 68 61 72 29  e*,Select*,char)
2a150 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
2a160 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61  enMasterTable(Pa
2a170 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64  rse *, int);.Ind
2a180 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61  ex *sqlite3Prima
2a190 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65  ryKeyIndex(Table
2a1a0 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43  *);.i16 sqlite3C
2a1b0 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64  olumnOfIndex(Ind
2a1c0 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20  ex*, i16);.void 
2a1d0 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c  sqlite3StartTabl
2a1e0 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
2a1f0 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Token*,int,int,i
2a200 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c  nt,int);.#if SQL
2a210 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
2a220 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64  N_COLUMNS.  void
2a230 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
2a240 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
2a250 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a  (Table*, Column*
2a260 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2a270 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50  e sqlite3ColumnP
2a280 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d  ropertiesFromNam
2a290 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20  e(T,C) /* no-op 
2a2a0 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  */.#endif.void s
2a2b0 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28  qlite3AddColumn(
2a2c0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
2a2d0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2a2e0 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61  te3AddNotNull(Pa
2a2f0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
2a300 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61   sqlite3AddPrima
2a310 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  ryKey(Parse*, Ex
2a320 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
2a330 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2a340 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e  lite3AddCheckCon
2a350 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
2a360 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2a370 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61  ite3AddDefaultVa
2a380 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  lue(Parse*,Expr*
2a390 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
2a3a0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2a3b0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
2a3c0 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
2a3d0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2a3e0 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
2a3f0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
2a400 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  ,u8,Select*);.in
2a410 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72  t sqlite3ParseUr
2a420 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  i(const char*,co
2a430 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e  nst char*,unsign
2a440 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20  ed int*,.       
2a450 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
2a460 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a  ite3_vfs**,char*
2a470 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 23 69 66 64  *,char **);.#ifd
2a480 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ef SQLITE_HAS_CO
2a490 44 45 43 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  DEC.  int sqlite
2a4a0 33 43 6f 64 65 63 51 75 65 72 79 50 61 72 61 6d  3CodecQueryParam
2a4b0 65 74 65 72 73 28 73 71 6c 69 74 65 33 2a 2c 63  eters(sqlite3*,c
2a4c0 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
2a4d0 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
2a4e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2a4f0 6f 64 65 63 51 75 65 72 79 50 61 72 61 6d 65 74  odecQueryParamet
2a500 65 72 73 28 41 2c 42 2c 43 29 20 30 0a 23 65 6e  ers(A,B,C) 0.#en
2a510 64 69 66 0a 42 74 72 65 65 20 2a 73 71 6c 69 74  dif.Btree *sqlit
2a520 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28  e3DbNameToBtree(
2a530 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
2a540 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  har*);..#ifdef S
2a550 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
2a560 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2a570 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c  3FaultSim(X) SQL
2a580 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69  ITE_OK.#else.  i
2a590 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  nt sqlite3FaultS
2a5a0 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  im(int);.#endif.
2a5b0 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
2a5c0 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
2a5d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
2a5e0 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
2a5f0 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
2a600 74 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74  te3BitvecTestNot
2a610 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33  Null(Bitvec*, u3
2a620 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
2a630 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a  itvecSet(Bitvec*
2a640 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
2a650 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28  ite3BitvecClear(
2a660 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f  Bitvec*, u32, vo
2a670 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
2a680 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28  e3BitvecDestroy(
2a690 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71  Bitvec*);.u32 sq
2a6a0 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28  lite3BitvecSize(
2a6b0 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65  Bitvec*);.#ifnde
2a6c0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2a6d0 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  BLE.int sqlite3B
2a6e0 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74  itvecBuiltinTest
2a6f0 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64  (int,int*);.#end
2a700 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69  if..RowSet *sqli
2a710 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71  te3RowSetInit(sq
2a720 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2a730 6c 69 74 65 33 52 6f 77 53 65 74 44 65 6c 65 74  lite3RowSetDelet
2a740 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
2a750 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
2a760 72 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  r(void*);.void s
2a770 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
2a780 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
2a790 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
2a7a0 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
2a7b0 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34   int iBatch, i64
2a7c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
2a7d0 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
2a7e0 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
2a7f0 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
2a800 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
2a810 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  oken*,Token*,Exp
2a820 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69  rList*,Select*,i
2a830 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
2a840 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2a850 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
2a860 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2a870 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
2a880 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
2a890 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
2a8a0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
2a8b0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2a8c0 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
2a8d0 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
2a8e0 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54  endif..#if SQLIT
2a8f0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
2a900 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44  0.  int sqlite3D
2a910 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62  bMaskAllZero(yDb
2a920 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Mask);.#endif.vo
2a930 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
2a940 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
2a950 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
2a960 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
2a970 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
2a980 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2a990 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a9a0 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
2a9b0 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
2a9c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65  .void sqlite3Fre
2a9d0 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
2a9e0 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 6e 64 65   Index*);.#ifnde
2a9f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
2aa00 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
2aa10 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
2aa20 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
2aa30 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
2aa40 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
2aa50 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
2aa60 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
2aa70 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2aa80 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
2aa90 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
2aaa0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
2aab0 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
2aac0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
2aad0 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
2aae0 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  cList*, Select*,
2aaf0 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 55   IdList*, int, U
2ab00 70 73 65 72 74 2a 29 3b 0a 76 6f 69 64 20 2a 73  psert*);.void *s
2ab10 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63  qlite3ArrayAlloc
2ab20 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69  ate(sqlite3*,voi
2ab30 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  d*,int,int*,int*
2ab40 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
2ab50 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 50  e3IdListAppend(P
2ab60 61 72 73 65 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  arse*, IdList*, 
2ab70 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2ab80 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28  ite3IdListIndex(
2ab90 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  IdList*,const ch
2aba0 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  ar*);.SrcList *s
2abb0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c  qlite3SrcListEnl
2abc0 61 72 67 65 28 50 61 72 73 65 2a 2c 20 53 72 63  arge(Parse*, Src
2abd0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
2abe0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
2abf0 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28  e3SrcListAppend(
2ac00 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2ac10 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2ac20 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
2ac30 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
2ac40 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c  FromTerm(Parse*,
2ac50 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
2ac60 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  *, Token*,.     
2ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac90 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a   Token*, Select*
2aca0 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a  , Expr*, IdList*
2acb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2acc0 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28  rcListIndexedBy(
2acd0 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
2ace0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
2acf0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
2ad00 74 46 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a  tFuncArgs(Parse*
2ad10 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
2ad20 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2ad30 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b  te3IndexedByLook
2ad40 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75  up(Parse *, stru
2ad50 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
2ad60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ad70 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
2ad80 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a  Type(SrcList*);.
2ad90 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
2ada0 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73  istAssignCursors
2adb0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2adc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2add0 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  IdListDelete(sql
2ade0 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  ite3*, IdList*);
2adf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
2ae00 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
2ae10 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  e3*, SrcList*);.
2ae20 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c  Index *sqlite3Al
2ae30 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63  locateIndexObjec
2ae40 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69  t(sqlite3*,i16,i
2ae50 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64  nt,char**);.void
2ae60 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e   sqlite3CreateIn
2ae70 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  dex(Parse*,Token
2ae80 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74  *,Token*,SrcList
2ae90 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
2aea0 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
2aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aec0 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e    Expr*, int, in
2aed0 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
2aee0 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61  ite3DropIndex(Pa
2aef0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2af00 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2af10 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  3Select(Parse*, 
2af20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44  Select*, SelectD
2af30 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  est*);.Select *s
2af40 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28  qlite3SelectNew(
2af50 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
2af60 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
2af70 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ExprList*,.     
2af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af90 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69      Expr*,ExprLi
2afa0 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a  st*,u32,Expr*);.
2afb0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2afc0 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  ctDelete(sqlite3
2afd0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62  *, Select*);.Tab
2afe0 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  le *sqlite3SrcLi
2aff0 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c  stLookup(Parse*,
2b000 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
2b010 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c  sqlite3IsReadOnl
2b020 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  y(Parse*, Table*
2b030 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2b040 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61  ite3OpenTable(Pa
2b050 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  rse*, int iCur, 
2b060 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c  int iDb, Table*,
2b070 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e   int);.#if defin
2b080 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2b090 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
2b0a0 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  IMIT) && !define
2b0b0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  d(SQLITE_OMIT_SU
2b0c0 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71  BQUERY).Expr *sq
2b0d0 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28  lite3LimitWhere(
2b0e0 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
2b0f0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
2b100 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65  Expr*,char*);.#e
2b110 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2b120 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73  3DeleteFrom(Pars
2b130 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
2b140 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  pr*, ExprList*, 
2b150 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2b160 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65  ite3Update(Parse
2b170 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
2b180 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74  rList*,Expr*,int
2b190 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
2b1a0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2b1b0 20 20 20 20 20 55 70 73 65 72 74 2a 29 3b 0a 57       Upsert*);.W
2b1c0 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65  hereInfo *sqlite
2b1d0 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73  3WhereBegin(Pars
2b1e0 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
2b1f0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
2b200 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a  List*,u16,int);.
2b210 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72  void sqlite3Wher
2b220 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  eEnd(WhereInfo*)
2b230 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
2b240 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f  WhereOutputRowCo
2b250 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  unt(WhereInfo*);
2b260 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2b270 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72  eIsDistinct(Wher
2b280 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2b290 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72  ite3WhereIsOrder
2b2a0 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
2b2b0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
2b2c0 4f 72 64 65 72 42 79 4c 69 6d 69 74 4f 70 74 4c  OrderByLimitOptL
2b2d0 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
2b2e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
2b2f0 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65  reIsSorted(Where
2b300 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
2b310 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65  te3WhereContinue
2b320 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
2b330 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2b340 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68  ereBreakLabel(Wh
2b350 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2b360 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65  qlite3WhereOkOne
2b370 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c  Pass(WhereInfo*,
2b380 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20   int*);.#define 
2b390 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20  ONEPASS_OFF     
2b3a0 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65   0        /* Use
2b3b0 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20   of ONEPASS not 
2b3c0 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
2b3d0 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c  ne ONEPASS_SINGL
2b3e0 45 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20  E   1        /* 
2b3f0 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f  ONEPASS valid fo
2b400 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75  r a single row u
2b410 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pdate */.#define
2b420 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20   ONEPASS_MULTI  
2b430 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e    2        /* ON
2b440 45 50 41 53 53 20 69 73 20 76 61 6c 69 64 20 66  EPASS is valid f
2b450 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  or multiple rows
2b460 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
2b470 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65  ExprCodeLoadInde
2b480 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20  xColumn(Parse*, 
2b490 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
2b4a0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2b4b0 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
2b4c0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62  lumn(Parse*, Tab
2b4d0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
2b4e0 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
2b4f0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
2b500 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
2b510 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
2b520 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2b530 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
2b540 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
2b550 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
2b560 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2b570 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  de(Parse*, Expr*
2b580 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2b590 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79  ite3ExprCodeCopy
2b5a0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2b5b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b5c0 65 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72  e3ExprCodeFactor
2b5d0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70  able(Parse*, Exp
2b5e0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2b5f0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49  lite3ExprCodeAtI
2b600 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  nit(Parse*, Expr
2b610 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2b620 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70  ite3ExprCodeTemp
2b630 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2b640 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
2b650 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74  e3ExprCodeTarget
2b660 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2b670 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b680 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63  e3ExprCodeAndCac
2b690 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  he(Parse*, Expr*
2b6a0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2b6b0 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c  te3ExprCodeExprL
2b6c0 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ist(Parse*, Expr
2b6d0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
2b6e0 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51   u8);.#define SQ
2b6f0 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20  LITE_ECEL_DUP   
2b700 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70     0x01  /* Deep
2b710 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f  , not shallow co
2b720 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pies */.#define 
2b730 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54  SQLITE_ECEL_FACT
2b740 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61  OR   0x02  /* Fa
2b750 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
2b760 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69  t terms */.#defi
2b770 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52  ne SQLITE_ECEL_R
2b780 45 46 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a  EF      0x04  /*
2b790 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e   Use ExprList.u.
2b7a0 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f  x.iOrderByCol */
2b7b0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2b7c0 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78  ECEL_OMITREF  0x
2b7d0 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45  08  /* Omit if E
2b7e0 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64  xprList.u.x.iOrd
2b7f0 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20  erByCol */.void 
2b800 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75  sqlite3ExprIfTru
2b810 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
2b820 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2b830 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
2b840 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  lse(Parse*, Expr
2b850 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
2b860 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
2b870 46 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c  FalseDup(Parse*,
2b880 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
2b890 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
2b8a0 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74  3FindTable(sqlit
2b8b0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
2b8c0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
2b8d0 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49  define LOCATE_VI
2b8e0 45 57 20 20 20 20 30 78 30 31 0a 23 64 65 66 69  EW    0x01.#defi
2b8f0 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20  ne LOCATE_NOERR 
2b900 20 20 30 78 30 32 0a 54 61 62 6c 65 20 2a 73 71    0x02.Table *sq
2b910 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
2b920 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67  (Parse*,u32 flag
2b930 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  s,const char*, c
2b940 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62  onst char*);.Tab
2b950 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
2b960 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65  eTableItem(Parse
2b970 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73 74 72 75  *,u32 flags,stru
2b980 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
2b990 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
2b9a0 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69  e3FindIndex(sqli
2b9b0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
2b9c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2b9d0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
2b9e0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
2b9f0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
2ba00 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2ba10 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2ba20 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c  dDeleteIndex(sql
2ba30 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
2ba40 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2ba50 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65  ite3Vacuum(Parse
2ba60 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 2a 29 3b  *,Token*,Expr*);
2ba70 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56  .int sqlite3RunV
2ba80 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71  acuum(char**, sq
2ba90 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 73 71 6c  lite3*, int, sql
2baa0 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 63 68  ite3_value*);.ch
2bab0 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46  ar *sqlite3NameF
2bac0 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33  romToken(sqlite3
2bad0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
2bae0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
2baf0 72 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  re(Parse*,Expr*,
2bb00 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2bb10 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d  t sqlite3ExprCom
2bb20 70 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20  pareSkip(Expr*, 
2bb30 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2bb40 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2bb50 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74  Compare(ExprList
2bb60 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
2bb70 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2bb80 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 50  xprImpliesExpr(P
2bb90 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70  arse*,Expr*, Exp
2bba0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2bbb0 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73  lite3ExprImplies
2bbc0 4e 6f 6e 4e 75 6c 6c 52 6f 77 28 45 78 70 72 2a  NonNullRow(Expr*
2bbd0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2bbe0 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
2bbf0 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e  gregates(NameCon
2bc00 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  text*, Expr*);.v
2bc10 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
2bc20 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61  nalyzeAggList(Na
2bc30 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c  meContext*,ExprL
2bc40 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2bc50 65 33 45 78 70 72 43 6f 76 65 72 65 64 42 79 49  e3ExprCoveredByI
2bc60 6e 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74 20  ndex(Expr*, int 
2bc70 69 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49 64  iCur, Index *pId
2bc80 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  x);.int sqlite3F
2bc90 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
2bca0 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
2bcb0 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
2bcc0 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
2bcd0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2bce0 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69  E_UNTESTABLE.voi
2bcf0 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76  d sqlite3PrngSav
2bd00 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  eState(void);.vo
2bd10 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65  id sqlite3PrngRe
2bd20 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29  storeState(void)
2bd30 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2bd40 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
2bd50 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2bd60 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
2bd70 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72  VerifySchema(Par
2bd80 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
2bd90 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
2bda0 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72  yNamedSchema(Par
2bdb0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
2bdc0 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69  *zDb);.void sqli
2bdd0 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74  te3BeginTransact
2bde0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ion(Parse*, int)
2bdf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
2be00 64 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  dTransaction(Par
2be10 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
2be20 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
2be30 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b  Parse*, int, Tok
2be40 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2be50 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
2be60 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f  s(sqlite3 *);.vo
2be70 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d  id sqlite3LeaveM
2be80 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62  utexAndCloseZomb
2be90 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ie(sqlite3*);.in
2bea0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 64 54  t sqlite3ExprIdT
2beb0 6f 54 72 75 65 46 61 6c 73 65 28 45 78 70 72 2a  oTrueFalse(Expr*
2bec0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2bed0 70 72 54 72 75 74 68 56 61 6c 75 65 28 63 6f 6e  prTruthValue(con
2bee0 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  st Expr*);.int s
2bef0 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
2bf00 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tant(Expr*);.int
2bf10 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
2bf20 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78  nstantNotJoin(Ex
2bf30 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2bf40 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f  3ExprIsConstantO
2bf50 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c  rFunction(Expr*,
2bf60 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2bf70 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f  3ExprIsConstantO
2bf80 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
2bf90 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74   Expr*, ExprList
2bfa0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2bfb0 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61  xprIsTableConsta
2bfc0 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23  nt(Expr*,int);.#
2bfd0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2bfe0 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53  BLE_CURSOR_HINTS
2bff0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2c000 43 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79  ContainsSubquery
2c010 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  (Expr*);.#endif.
2c020 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2c030 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20  sInteger(Expr*, 
2c040 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
2c050 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28  e3ExprCanBeNull(
2c060 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e  const Expr*);.in
2c070 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65  t sqlite3ExprNee
2c080 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e  dsNoAffinityChan
2c090 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  ge(const Expr*, 
2c0a0 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  char);.int sqlit
2c0b0 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20  e3IsRowid(const 
2c0c0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2c0d0 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44  ite3GenerateRowD
2c0e0 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65  elete(.    Parse
2c0f0 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72  *,Table*,Trigger
2c100 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31  *,int,int,int,i1
2c110 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b  6,u8,u8,u8,int);
2c120 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
2c130 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c  erateRowIndexDel
2c140 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
2c150 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
2c160 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
2c170 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
2c180 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e  exKey(Parse*, In
2c190 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
2c1a0 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a  int, int*,Index*
2c1b0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2c1c0 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
2c1d0 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e  xLabel(Parse*,in
2c1e0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2c1f0 78 70 72 52 65 66 65 72 65 6e 63 65 73 55 70 64  xprReferencesUpd
2c200 61 74 65 64 43 6f 6c 75 6d 6e 28 45 78 70 72 2a  atedColumn(Expr*
2c210 2c 69 6e 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ,int*,int);.void
2c220 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
2c230 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73  ConstraintChecks
2c240 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
2c250 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  nt*,int,int,int,
2c260 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  int,.           
2c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c280 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c            u8,u8,
2c290 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 55 70  int,int*,int*,Up
2c2a0 73 65 72 74 2a 29 3b 0a 23 69 66 64 65 66 20 53  sert*);.#ifdef S
2c2b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c  QLITE_ENABLE_NUL
2c2c0 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20 73 71  L_TRIM.  void sq
2c2d0 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f  lite3SetMakeReco
2c2e0 72 64 50 35 28 56 64 62 65 2a 2c 54 61 62 6c 65  rdP5(Vdbe*,Table
2c2f0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2c300 6e 65 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b  ne sqlite3SetMak
2c310 65 52 65 63 6f 72 64 50 35 28 41 2c 42 29 0a 23  eRecordP5(A,B).#
2c320 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2c330 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74  e3CompleteInsert
2c340 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
2c350 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
2c360 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  t*,int,int,int);
2c370 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
2c380 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28  TableAndIndices(
2c390 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2c3a0 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38  int, u8, int, u8
2c3b0 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  *, int*, int*);.
2c3c0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
2c3d0 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
2c3e0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
2c3f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
2c400 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a  ultiWrite(Parse*
2c410 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
2c420 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b  ayAbort(Parse*);
2c430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c  .void sqlite3Hal
2c440 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  tConstraint(Pars
2c450 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68  e*, int, int, ch
2c460 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f  ar*, i8, u8);.vo
2c470 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65  id sqlite3Unique
2c480 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
2c490 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b  *, int, Index*);
2c4a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
2c4b0 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  idConstraint(Par
2c4c0 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a  se*, int, Table*
2c4d0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2c4e0 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a  ExprDup(sqlite3*
2c4f0 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70  ,Expr*,int);.Exp
2c500 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
2c510 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  prListDup(sqlite
2c520 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  3*,ExprList*,int
2c530 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
2c540 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
2c550 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c  lite3*,SrcList*,
2c560 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  int);.IdList *sq
2c570 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73  lite3IdListDup(s
2c580 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29  qlite3*,IdList*)
2c590 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
2c5a0 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74  3SelectDup(sqlit
2c5b0 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29  e3*,Select*,int)
2c5c0 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
2c5d0 65 33 46 75 6e 63 74 69 6f 6e 53 65 61 72 63 68  e3FunctionSearch
2c5e0 28 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  (int,const char*
2c5f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
2c600 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63  nsertBuiltinFunc
2c610 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b  s(FuncDef*,int);
2c620 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
2c630 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
2c640 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2c650 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76  r*,int,u8,u8);.v
2c660 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2c670 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
2c680 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
2c690 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44  sqlite3RegisterD
2c6a0 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73  ateTimeFunctions
2c6b0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
2c6c0 69 74 65 33 52 65 67 69 73 74 65 72 50 65 72 43  ite3RegisterPerC
2c6d0 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e  onnectionBuiltin
2c6e0 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
2c6f0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2c700 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71  SafetyCheckOk(sq
2c710 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2c720 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
2c730 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a  ickOrOk(sqlite3*
2c740 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2c750 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73  hangeCookie(Pars
2c760 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21  e*, int);..#if !
2c770 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2c780 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65  MIT_VIEW) && !de
2c790 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2c7a0 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20  T_TRIGGER).void 
2c7b0 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69  sqlite3Materiali
2c7c0 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54  zeView(Parse*, T
2c7d0 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  able*, Expr*, Ex
2c7e0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e  prList*,Expr*,in
2c7f0 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  t);.#endif..#ifn
2c800 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c810 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73  TRIGGER.  void s
2c820 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67  qlite3BeginTrigg
2c830 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  er(Parse*, Token
2c840 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
2c850 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  ,IdList*,SrcList
2c860 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
2c880 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  pr*,int, int);. 
2c890 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e   void sqlite3Fin
2c8a0 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65  ishTrigger(Parse
2c8b0 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c  *, TriggerStep*,
2c8c0 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64   Token*);.  void
2c8d0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
2c8e0 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ger(Parse*, SrcL
2c8f0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ist*, int);.  vo
2c900 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
2c910 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c  iggerPtr(Parse*,
2c920 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72   Trigger*);.  Tr
2c930 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
2c940 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
2c950 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  e *, Table*, int
2c960 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2c970 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67   *pMask);.  Trig
2c980 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
2c990 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c  gerList(Parse *,
2c9a0 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69   Table *);.  voi
2c9b0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
2c9c0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
2c9d0 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20  Trigger *, int, 
2c9e0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
2c9f0 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20  Table *,.       
2ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca10 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69       int, int, i
2ca20 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2ca30 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
2ca40 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c  rDirect(Parse *,
2ca50 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c   Trigger *, Tabl
2ca60 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e *, int, int, i
2ca70 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2ca80 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50  teViewTriggers(P
2ca90 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
2caa0 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  xpr*, int, ExprL
2cab0 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
2cac0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
2cad0 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  erStep(sqlite3*,
2cae0 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
2caf0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
2cb00 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c  qlite3TriggerSel
2cb10 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ectStep(sqlite3*
2cb20 2c 53 65 6c 65 63 74 2a 2c 0a 20 20 20 20 20 20  ,Select*,.      
2cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb50 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2cb60 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72  nst char*);.  Tr
2cb70 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2cb80 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53  e3TriggerInsertS
2cb90 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  tep(Parse*,Token
2cba0 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20  *, IdList*,.    
2cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbd0 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 2c 55      Select*,u8,U
2cbe0 70 73 65 72 74 2a 2c 0a 20 20 20 20 20 20 20 20  psert*,.        
2cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc10 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2cc20 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67  t char*);.  Trig
2cc30 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2cc40 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65  TriggerUpdateSte
2cc50 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  p(Parse*,Token*,
2cc60 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
2cc70 2c 20 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20  , u8,.          
2cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2cca0 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
2ccb0 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65  char*);.  Trigge
2ccc0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
2ccd0 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28  iggerDeleteStep(
2cce0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 45  Parse*,Token*, E
2ccf0 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  xpr*,.          
2cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2cd20 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
2cd30 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
2cd40 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
2cd50 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  ger(sqlite3*, Tr
2cd60 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20  igger*);.  void 
2cd70 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2cd80 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
2cd90 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
2cda0 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73   char*);.  u32 s
2cdb0 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
2cdc0 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67  mask(Parse*,Trig
2cdd0 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ger*,ExprList*,i
2cde0 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e  nt,int,Table*,in
2cdf0 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  t);.# define sql
2ce00 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
2ce10 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
2ce20 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70  evel ? (p)->pTop
2ce30 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64  level : (p)).# d
2ce40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54  efine sqlite3IsT
2ce50 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
2ce60 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23  >pToplevel==0).#
2ce70 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2ce80 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
2ce90 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a  st(B,C,D,E,F) 0.
2cea0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2ceb0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
2cec0 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
2ced0 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
2cee0 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
2cef0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2cf00 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
2cf10 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71  B,C).# define sq
2cf20 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
2cf30 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ger(A,B,C,D,E,F,
2cf40 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20  G,H,I).# define 
2cf50 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
2cf60 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c  iggerDirect(A,B,
2cf70 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e  C,D,E,F).# defin
2cf80 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
2cf90 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64  List(X, Y) 0.# d
2cfa0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
2cfb0 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a  seToplevel(p) p.
2cfc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2cfd0 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a  IsToplevel(p) 1.
2cfe0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2cff0 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41  TriggerColmask(A
2d000 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a  ,B,C,D,E,F,G) 0.
2d010 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
2d020 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73  te3JoinType(Pars
2d030 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2d040 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
2d050 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  d sqlite3CreateF
2d060 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
2d070 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  , ExprList*, Tok
2d080 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  en*, ExprList*, 
2d090 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2d0a0 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65  e3DeferForeignKe
2d0b0 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  y(Parse*, int);.
2d0c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2d0d0 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
2d0e0 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
2d0f0 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c  AuthRead(Parse*,
2d100 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72  Expr*,Schema*,Sr
2d110 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73  cList*);.  int s
2d120 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
2d130 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73  Parse*,int, cons
2d140 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2d150 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2d160 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2d170 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
2d180 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f  h(Parse*, AuthCo
2d190 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68  ntext*, const ch
2d1a0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
2d1b0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
2d1c0 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29  op(AuthContext*)
2d1d0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
2d1e0 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65  uthReadCol(Parse
2d1f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2d200 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
2d210 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  nt);.#else.# def
2d220 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52  ine sqlite3AuthR
2d230 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64  ead(a,b,c,d).# d
2d240 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
2d250 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  hCheck(a,b,c,d,e
2d260 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  )    SQLITE_OK.#
2d270 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
2d280 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61  uthContextPush(a
2d290 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73  ,b,c).# define s
2d2a0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
2d2b0 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29  tPop(a)  ((void)
2d2c0 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  (a)).#endif.void
2d2d0 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50   sqlite3Attach(P
2d2e0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  arse*, Expr*, Ex
2d2f0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
2d300 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28  d sqlite3Detach(
2d310 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2d320 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49  void sqlite3FixI
2d330 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61  nit(DbFixer*, Pa
2d340 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  rse*, int, const
2d350 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   char*, const To
2d360 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2d370 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46  e3FixSrcList(DbF
2d380 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ixer*, SrcList*)
2d390 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2d3a0 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c  Select(DbFixer*,
2d3b0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
2d3c0 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62  qlite3FixExpr(Db
2d3d0 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  Fixer*, Expr*);.
2d3e0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
2d3f0 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  prList(DbFixer*,
2d400 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
2d410 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67   sqlite3FixTrigg
2d420 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c  erStep(DbFixer*,
2d430 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
2d440 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 6c 53  int sqlite3RealS
2d450 61 6d 65 41 73 49 6e 74 28 64 6f 75 62 6c 65 2c  ameAsInt(double,
2d460 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 3b 0a  sqlite3_int64);.
2d470 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28  int sqlite3AtoF(
2d480 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64  const char *z, d
2d490 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29  ouble*, int, u8)
2d4a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
2d4b0 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72  Int32(const char
2d4c0 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73   *, int*);.int s
2d4d0 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74  qlite3Atoi(const
2d4e0 20 63 68 61 72 2a 29 3b 0a 23 69 66 6e 64 65 66   char*);.#ifndef
2d4f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
2d500 31 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  16.int sqlite3Ut
2d510 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74  f16ByteLen(const
2d520 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e   void *pData, in
2d530 74 20 6e 43 68 61 72 29 3b 0a 23 65 6e 64 69 66  t nChar);.#endif
2d540 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38  .int sqlite3Utf8
2d550 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68  CharLen(const ch
2d560 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  ar *pData, int n
2d570 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74  Byte);.u32 sqlit
2d580 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74  e3Utf8Read(const
2d590 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73   u8**);.LogEst s
2d5a0 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34  qlite3LogEst(u64
2d5b0 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
2d5c0 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73  3LogEstAdd(LogEs
2d5d0 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64  t,LogEst);.#ifnd
2d5e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2d5f0 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45  IRTUALTABLE.LogE
2d600 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
2d610 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c  FromDouble(doubl
2d620 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  e);.#endif.#if d
2d630 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
2d640 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
2d650 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64  ATUS) || \.    d
2d660 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
2d670 41 42 4c 45 5f 53 54 41 54 34 29 20 7c 7c 20 5c  ABLE_STAT4) || \
2d680 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
2d690 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49  ITE_EXPLAIN_ESTI
2d6a0 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20  MATED_ROWS).u64 
2d6b0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
2d6c0 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64  nt(LogEst);.#end
2d6d0 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65  if.VList *sqlite
2d6e0 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65  3VListAdd(sqlite
2d6f0 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  3*,VList*,const 
2d700 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  char*,int,int);.
2d710 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2d720 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d  te3VListNumToNam
2d730 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69  e(VList*,int);.i
2d740 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  nt sqlite3VListN
2d750 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c  ameToNum(VList*,
2d760 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2d770 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
2d780 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
2d790 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
2d7a0 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
2d7b0 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
2d7c0 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
2d7d0 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
2d7e0 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
2d7f0 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
2d800 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
2d810 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
2d820 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
2d830 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
2d840 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
2d850 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2d860 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
2d870 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
2d880 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
2d890 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
2d8a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2d8b0 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
2d8c0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
2d8d0 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
2d8e0 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
2d8f0 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
2d900 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
2d910 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
2d920 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
2d930 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
2d940 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
2d950 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
2d960 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
2d970 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
2d980 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
2d990 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
2d9a0 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
2d9b0 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
2d9c0 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
2d9d0 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
2d9e0 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
2d9f0 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
2da00 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
2da10 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
2da20 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
2da30 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
2da40 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
2da50 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
2da60 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
2da70 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2da80 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
2da90 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
2daa0 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
2dab0 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
2dac0 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c  xAffinityStr(sql
2dad0 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  ite3*, Index*);.
2dae0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
2daf0 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c  eAffinity(Vdbe*,
2db00 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63   Table*, int);.c
2db10 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
2db20 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
2db30 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
2db40 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
2db50 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
2db60 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
2db70 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
2db80 63 68 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c  char sqlite3Tabl
2db90 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  eColumnAffinity(
2dba0 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61  Table*,int);.cha
2dbb0 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66  r sqlite3ExprAff
2dbc0 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
2dbd0 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  r);.int sqlite3A
2dbe0 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
2dbf0 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38  *, i64*, int, u8
2dc00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
2dc10 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73  cOrHexToI64(cons
2dc20 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a  t char*, i64*);.
2dc30 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
2dc40 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33  rWithMsg(sqlite3
2dc50 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
2dc60 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  ar*,...);.void s
2dc70 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
2dc80 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
2dc90 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72  sqlite3SystemErr
2dca0 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  or(sqlite3*,int)
2dcb0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48  ;.void *sqlite3H
2dcc0 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33  exToBlob(sqlite3
2dcd0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
2dce0 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c  , int n);.u8 sql
2dcf0 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74  ite3HexToInt(int
2dd00 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   h);.int sqlite3
2dd10 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73  TwoPartName(Pars
2dd20 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  e *, Token *, To
2dd30 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29  ken *, Token **)
2dd40 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ;..#if defined(S
2dd50 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
2dd60 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20  AME).const char 
2dd70 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28  *sqlite3ErrName(
2dd80 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
2dd90 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2dda0 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 69  LE_DESERIALIZE.i
2ddb0 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62 49  nt sqlite3MemdbI
2ddc0 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  nit(void);.#endi
2ddd0 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
2dde0 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
2ddf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2de00 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
2de10 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
2de20 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
2de30 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
2de40 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
2de50 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
2de60 74 65 33 49 73 42 69 6e 61 72 79 28 63 6f 6e 73  te3IsBinary(cons
2de70 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c  t CollSeq*);.Col
2de80 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63  lSeq *sqlite3Loc
2de90 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  ateCollSeq(Parse
2dea0 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20   *pParse, const 
2deb0 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c  char*zName);.Col
2dec0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70  lSeq *sqlite3Exp
2ded0 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  rCollSeq(Parse *
2dee0 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45  pParse, Expr *pE
2def0 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  xpr);.CollSeq *s
2df00 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c  qlite3ExprNNColl
2df10 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
2df20 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
2df30 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2df40 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72  CollSeqMatch(Par
2df50 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  se*,Expr*,Expr*)
2df60 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2df70 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b  xprAddCollateTok
2df80 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  en(Parse *pParse
2df90 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54  , Expr*, const T
2dfa0 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70  oken*, int);.Exp
2dfb0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
2dfc0 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50  dCollateString(P
2dfd0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73  arse*,Expr*,cons
2dfe0 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a  t char*);.Expr *
2dff0 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43  sqlite3ExprSkipC
2e000 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69  ollate(Expr*);.i
2e010 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43  nt sqlite3CheckC
2e020 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
2e030 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20  CollSeq *);.int 
2e040 73 71 6c 69 74 65 33 57 72 69 74 61 62 6c 65 53  sqlite3WritableS
2e050 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 29 3b  chema(sqlite3*);
2e060 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
2e070 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73  kObjectName(Pars
2e080 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
2e090 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2e0a0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2e0b0 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
2e0c0 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
2e0d0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2e0e0 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
2e0f0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2e100 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
2e110 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
2e120 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
2e130 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
2e140 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
2e150 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2e160 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
2e170 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
2e180 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
2e190 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
2e1a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
2e1b0 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
2e1c0 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
2e1d0 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
2e1e0 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a  t char *z,u8);..
2e1f0 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
2e200 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c  te3ValueText(sql
2e210 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
2e220 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
2e230 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f  ueBytes(sqlite3_
2e240 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69  value*, u8);.voi
2e250 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
2e260 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c  tStr(sqlite3_val
2e270 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  ue*, int, const 
2e280 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20  void *,u8,.     
2e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2a0 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a     void(*)(void*
2e2b0 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
2e2c0 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c  ValueSetNull(sql
2e2d0 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f  ite3_value*);.vo
2e2e0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  id sqlite3ValueF
2e2f0 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ree(sqlite3_valu
2e300 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  e*);.#ifndef SQL
2e310 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76  ITE_UNTESTABLE.v
2e320 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 75 6c  oid sqlite3Resul
2e330 74 49 6e 74 52 65 61 6c 28 73 71 6c 69 74 65 33  tIntReal(sqlite3
2e340 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 23 65 6e 64  _context*);.#end
2e350 69 66 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  if.sqlite3_value
2e360 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65   *sqlite3ValueNe
2e370 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69  w(sqlite3 *);.#i
2e380 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e390 54 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73 71  T_UTF16.char *sq
2e3a0 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71  lite3Utf16to8(sq
2e3b0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76  lite3 *, const v
2e3c0 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  oid*, int, u8);.
2e3d0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2e3e0 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  e3ValueFromExpr(
2e3f0 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20  sqlite3 *, Expr 
2e400 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74  *, u8, u8, sqlit
2e410 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f  e3_value **);.vo
2e420 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41  id sqlite3ValueA
2e430 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c  pplyAffinity(sql
2e440 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38  ite3_value *, u8
2e450 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
2e460 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
2e470 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ON.extern const 
2e480 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
2e490 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
2e4a0 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  rty[];.extern co
2e4b0 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33  nst char sqlite3
2e4c0 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74  StrBINARY[];.ext
2e4d0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2e4e0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
2e4f0 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
2e500 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
2e510 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
2e520 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
2e530 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
2e540 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
2e550 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
2e560 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
2e570 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
2e580 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
2e590 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c   FuncDefHash sql
2e5a0 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74  ite3BuiltinFunct
2e5b0 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51  ions;.#ifndef SQ
2e5c0 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78  LITE_OMIT_WSD.ex
2e5d0 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
2e5e0 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e  PendingByte;.#en
2e5f0 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  dif.#endif.#ifde
2e600 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 65  f VDBE_PROFILE.e
2e610 78 74 65 72 6e 20 73 71 6c 69 74 65 33 5f 75 69  xtern sqlite3_ui
2e620 6e 74 36 34 20 73 71 6c 69 74 65 33 4e 50 72 6f  nt64 sqlite3NPro
2e630 66 69 6c 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a  fileCnt;.#endif.
2e640 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
2e650 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
2e660 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
2e670 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2e680 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
2e690 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2e6a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2e6b0 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
2e6c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2e6d0 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
2e6e0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2e6f0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2e700 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
2e710 6d 65 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  meColumn(Parse*,
2e720 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
2e730 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
2e740 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28  sqlite3GetToken(
2e750 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2e760 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76  har *, int *);.v
2e770 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65  oid sqlite3Neste
2e780 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63  dParse(Parse*, c
2e790 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
2e7a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2e7b0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
2e7c0 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 2c  ements(sqlite3*,
2e7d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2e7e0 74 65 33 43 6f 64 65 52 68 73 4f 66 49 4e 28 50  te3CodeRhsOfIN(P
2e7f0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2e800 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  t);.int sqlite3C
2e810 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72  odeSubselect(Par
2e820 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
2e830 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50  d sqlite3SelectP
2e840 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  rep(Parse*, Sele
2e850 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
2e860 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e870 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65  SelectWrongNumTe
2e880 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a  rmsError(Parse *
2e890 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a  pParse, Select *
2e8a0 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  p);.int sqlite3M
2e8b0 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e  atchSpanName(con
2e8c0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2e8d0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2e8e0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
2e8f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
2e900 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61  olveExprNames(Na
2e910 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
2e920 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2e930 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61  esolveExprListNa
2e940 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
2e950 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f  , ExprList*);.vo
2e960 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
2e970 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72  eSelectNames(Par
2e980 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
2e990 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  meContext*);.int
2e9a0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
2e9b0 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72  elfReference(Par
2e9c0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45  se*,Table*,int,E
2e9d0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  xpr*,ExprList*);
2e9e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
2e9f0 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
2ea00 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2ea10 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
2ea20 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2ea30 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
2ea40 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
2ea50 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
2ea60 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2ea70 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
2ea80 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
2ea90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2eaa0 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
2eab0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
2eac0 4c 69 73 74 20 2a 29 3b 0a 76 6f 69 64 20 2a 73  List *);.void *s
2ead0 71 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65  qlite3RenameToke
2eae0 6e 4d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f 69  nMap(Parse*, voi
2eaf0 64 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  d*, Token*);.voi
2eb00 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 54  d sqlite3RenameT
2eb10 6f 6b 65 6e 52 65 6d 61 70 28 50 61 72 73 65 2a  okenRemap(Parse*
2eb20 2c 20 76 6f 69 64 20 2a 70 54 6f 2c 20 76 6f 69  , void *pTo, voi
2eb30 64 20 2a 70 46 72 6f 6d 29 3b 0a 76 6f 69 64 20  d *pFrom);.void 
2eb40 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 45 78 70  sqlite3RenameExp
2eb50 72 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20 45  rUnmap(Parse*, E
2eb60 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2eb70 74 65 33 52 65 6e 61 6d 65 45 78 70 72 6c 69 73  te3RenameExprlis
2eb80 74 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20 45  tUnmap(Parse*, E
2eb90 78 70 72 4c 69 73 74 2a 29 3b 0a 43 6f 6c 6c 53  xprList*);.CollS
2eba0 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
2ebb0 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38  llSeq(Parse*, u8
2ebc0 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
2ebd0 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
2ebe0 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
2ebf0 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ype(const char*,
2ec00 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64 20   Column*);.void 
2ec10 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50  sqlite3Analyze(P
2ec20 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2ec30 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2ec40 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
2ec50 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
2ec60 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a  *, sqlite3_file*
2ec70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2ec80 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54  ndDb(sqlite3*, T
2ec90 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2eca0 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71  te3FindDbName(sq
2ecb0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
2ecc0 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
2ecd0 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
2ece0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42  sqlite3*,int iDB
2ecf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2ed00 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65  eleteIndexSample
2ed10 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78  s(sqlite3*,Index
2ed20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ed30 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e  DefaultRowEst(In
2ed40 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2ed50 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
2ed60 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
2ed70 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2ed80 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69  ite3IsLikeFuncti
2ed90 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  on(sqlite3*,Expr
2eda0 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76  *,int*,char*);.v
2edb0 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d  oid sqlite3Schem
2edc0 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a  aClear(void *);.
2edd0 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53  Schema *sqlite3S
2ede0 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33  chemaGet(sqlite3
2edf0 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e   *, Btree *);.in
2ee00 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54  t sqlite3SchemaT
2ee10 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a  oIndex(sqlite3 *
2ee20 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b  db, Schema *);.K
2ee30 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2ee40 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69  eyInfoAlloc(sqli
2ee50 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  te3*,int,int);.v
2ee60 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  oid sqlite3KeyIn
2ee70 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a  foUnref(KeyInfo*
2ee80 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2ee90 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65  te3KeyInfoRef(Ke
2eea0 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
2eeb0 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2eec0 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  OfIndex(Parse*, 
2eed0 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49 6e 66 6f  Index*);.KeyInfo
2eee0 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2eef0 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72  FromExprList(Par
2ef00 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
2ef10 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 64  int, int);..#ifd
2ef20 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2ef30 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  int sqlite3KeyIn
2ef40 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65  foIsWriteable(Ke
2ef50 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a  yInfo*);.#endif.
2ef60 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74  int sqlite3Creat
2ef70 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c  eFunc(sqlite3 *,
2ef80 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
2ef90 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c  nt, int, void *,
2efa0 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2efb0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2efc0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
2efd0 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
2efe0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2eff0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2f000 65 20 2a 2a 29 2c 20 0a 20 20 76 6f 69 64 20 28  e **), .  void (
2f010 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2f020 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29  xt*),.  void (*)
2f030 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2f040 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
2f050 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2f060 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2f070 65 20 2a 2a 29 2c 20 0a 20 20 46 75 6e 63 44 65  e **), .  FuncDe
2f080 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
2f090 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71  uctor.);.void sq
2f0a0 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74 72 75 63  lite3NoopDestruc
2f0b0 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  tor(void*);.void
2f0c0 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74   sqlite3OomFault
2f0d0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
2f0e0 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72   sqlite3OomClear
2f0f0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2f100 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73  sqlite3ApiExit(s
2f110 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29  qlite3 *db, int)
2f120 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
2f130 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61  nTempDatabase(Pa
2f140 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  rse *);..void sq
2f150 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
2f160 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c  t(StrAccum*, sql
2f170 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e  ite3*, char*, in
2f180 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  t, int);.char *s
2f190 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
2f1a0 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
2f1b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
2f1c0 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65  ectDestInit(Sele
2f1d0 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  ctDest*,int,int)
2f1e0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43  ;.Expr *sqlite3C
2f1f0 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28  reateColumnExpr(
2f200 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69  sqlite3 *, SrcLi
2f210 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  st *, int, int);
2f220 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ..void sqlite3Ba
2f230 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69  ckupRestart(sqli
2f240 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76  te3_backup *);.v
2f250 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
2f260 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f  pUpdate(sqlite3_
2f270 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20  backup *, Pgno, 
2f280 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69  const u8 *);..#i
2f290 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2f2a0 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74 20 73  T_SUBQUERY.int s
2f2b0 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49  qlite3ExprCheckI
2f2c0 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  N(Parse*, Expr*)
2f2d0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2f2e0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2f2f0 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54 45 5f  kIN(x,y) SQLITE_
2f300 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  OK.#endif..#ifde
2f310 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2f320 53 54 41 54 34 0a 69 6e 74 20 73 71 6c 69 74 65  STAT4.int sqlite
2f330 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
2f340 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c  lue(.    Parse*,
2f350 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52  Index*,UnpackedR
2f360 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e  ecord**,Expr*,in
2f370 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  t,int,int*);.int
2f380 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
2f390 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
2f3a0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
2f3b0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2f3c0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
2f3d0 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
2f3e0 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
2f3f0 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
2f400 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
2f410 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
2f420 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
2f430 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  ue**);.char sqli
2f440 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66  te3IndexColumnAf
2f450 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c  finity(sqlite3*,
2f460 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23   Index*, int);.#
2f470 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
2f480 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
2f490 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65  e LEMON-generate
2f4a0 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e  d parser.*/.#ifn
2f4b0 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
2f4c0 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a  AMATION.  void *
2f4d0 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
2f4e0 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
2f4f0 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20 76 6f 69  , Parse*);.  voi
2f500 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
2f510 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
2f520 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64  *)(void*));.#end
2f530 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  if.void sqlite3P
2f540 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
2f550 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74 20 73 71  , Token);.int sq
2f560 6c 69 74 65 33 50 61 72 73 65 72 46 61 6c 6c 62  lite3ParserFallb
2f570 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  ack(int);.#ifdef
2f580 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
2f590 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
2f5a0 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
2f5b0 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
2f5c0 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
2f5d0 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
2f5e0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
2f5f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2f600 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
2f610 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
2f620 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
2f630 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
2f640 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2f650 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
2f660 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
2f670 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
2f680 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
2f690 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
2f6a0 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
2f6b0 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
2f6c0 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
2f6d0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2f6e0 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
2f6f0 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
2f700 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
2f710 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
2f720 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
2f730 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
2f740 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
2f750 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
2f760 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2f770 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
2f780 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2f790 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
2f7a0 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
2f7b0 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
2f7c0 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2f7d0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
2f7e0 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2f7f0 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
2f800 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
2f810 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
2f820 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2f830 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
2f840 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2f850 69 74 65 33 56 74 61 62 4d 6f 64 75 6c 65 55 6e  ite3VtabModuleUn
2f860 72 65 66 28 44 2c 58 29 0a 23 20 20 64 65 66 69  ref(D,X).#  defi
2f870 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
2f880 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64  lockList(X).#  d
2f890 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2f8a0 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c  bSavepoint(X, Y,
2f8b0 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20   Z) SQLITE_OK.# 
2f8c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47   define sqlite3G
2f8d0 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28  etVTable(X,Y)  (
2f8e0 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73  (VTable*)0).#els
2f8f0 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  e.   void sqlite
2f900 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74  3VtabClear(sqlit
2f910 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b  e3 *db, Table*);
2f920 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2f930 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73  VtabDisconnect(s
2f940 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
2f950 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71  e *p);.   int sq
2f960 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71  lite3VtabSync(sq
2f970 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a  lite3 *db, Vdbe*
2f980 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2f990 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
2f9a0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
2f9b0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
2f9c0 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
2f9d0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2f9e0 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c  e3VtabLock(VTabl
2f9f0 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
2fa00 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
2fa10 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
2fa20 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 6f  id sqlite3VtabMo
2fa30 64 75 6c 65 55 6e 72 65 66 28 73 71 6c 69 74 65  duleUnref(sqlite
2fa40 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 20 20 20  3*,Module*);.   
2fa50 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2fa60 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
2fa70 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
2fa80 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
2fa90 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
2faa0 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
2fab0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
2fac0 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
2fad0 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
2fae0 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
2faf0 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
2fb00 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  e3*, Table*);.  
2fb10 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33   Module *sqlite3
2fb20 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65  VtabCreateModule
2fb30 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c  (.     sqlite3*,
2fb40 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  .     const char
2fb50 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71  *,.     const sq
2fb60 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20  lite3_module*,. 
2fb70 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20      void*,.     
2fb80 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20  void(*)(void*). 
2fb90 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73    );.#  define s
2fba0 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
2fbb0 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
2fbc0 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
2fbd0 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
2fbe0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  f.int sqlite3Vta
2fbf0 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49  bEponymousTableI
2fc00 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c  nit(Parse*,Modul
2fc10 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2fc20 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61  3VtabEponymousTa
2fc30 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33  bleClear(sqlite3
2fc40 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
2fc50 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65   sqlite3VtabMake
2fc60 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c  Writable(Parse*,
2fc70 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
2fc80 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61  lite3VtabBeginPa
2fc90 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
2fca0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
2fcb0 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
2fcc0 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68  qlite3VtabFinish
2fcd0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
2fce0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2fcf0 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50  te3VtabArgInit(P
2fd00 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
2fd10 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e  ite3VtabArgExten
2fd20 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  d(Parse*, Token*
2fd30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2fd40 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c  abCallCreate(sql
2fd50 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2fd60 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a  t char *, char *
2fd70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2fd80 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50  tabCallConnect(P
2fd90 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
2fda0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2fdb0 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74  allDestroy(sqlit
2fdc0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
2fdd0 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2fde0 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71  ite3VtabBegin(sq
2fdf0 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20  lite3 *, VTable 
2fe00 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
2fe10 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64  ite3VtabOverload
2fe20 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2fe30 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74   *,FuncDef*, int
2fe40 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 73   nArg, Expr*);.s
2fe50 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
2fe60 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54  ite3StmtCurrentT
2fe70 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ime(sqlite3_cont
2fe80 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
2fe90 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49  e3VdbeParameterI
2fea0 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73  ndex(Vdbe*, cons
2feb0 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  t char*, int);.i
2fec0 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66  nt sqlite3Transf
2fed0 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74  erBindings(sqlit
2fee0 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74  e3_stmt *, sqlit
2fef0 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64  e3_stmt *);.void
2ff00 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65   sqlite3ParserRe
2ff10 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  set(Parse*);.#if
2ff20 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2ff30 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 63 68 61 72  E_NORMALIZE.char
2ff40 20 2a 73 71 6c 69 74 65 33 4e 6f 72 6d 61 6c 69   *sqlite3Normali
2ff50 7a 65 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  ze(Vdbe*, const 
2ff60 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  char*);.#endif.i
2ff70 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
2ff80 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
2ff90 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2ffa0 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
2ffb0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
2ffc0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
2ffd0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
2ffe0 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
2fff0 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
30000 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
30010 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
30020 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
30030 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
30040 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
30050 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
30060 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30070 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
30080 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
30090 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
300a0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
300b0 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
300c0 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
300d0 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
300e0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
300f0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
30100 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
30110 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
30120 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
30130 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
30140 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
30150 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
30160 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
30170 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
30180 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
30190 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
301a0 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
301b0 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
301c0 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
301d0 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
301e0 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  y).#endif.#ifnde
301f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 50  f SQLITE_OMIT_UP
30200 53 45 52 54 0a 20 20 55 70 73 65 72 74 20 2a 73  SERT.  Upsert *s
30210 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28  qlite3UpsertNew(
30220 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
30230 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
30240 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  t*,Expr*);.  voi
30250 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  d sqlite3UpsertD
30260 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 55  elete(sqlite3*,U
30270 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73 65 72  psert*);.  Upser
30280 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74  t *sqlite3Upsert
30290 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55 70 73  Dup(sqlite3*,Ups
302a0 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ert*);.  int sql
302b0 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c 79 7a  ite3UpsertAnalyz
302c0 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 53  eTarget(Parse*,S
302d0 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a 29  rcList*,Upsert*)
302e0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
302f0 55 70 73 65 72 74 44 6f 55 70 64 61 74 65 28 50  UpsertDoUpdate(P
30300 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54 61  arse*,Upsert*,Ta
30310 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  ble*,Index*,int)
30320 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ;.#else.#define 
30330 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77  sqlite3UpsertNew
30340 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55 70  (v,w,x,y,z) ((Up
30350 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69 6e 65  sert*)0).#define
30360 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 65   sqlite3UpsertDe
30370 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66 69 6e  lete(x,y).#defin
30380 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  e sqlite3UpsertD
30390 75 70 28 78 2c 79 29 20 20 20 20 20 20 20 28 28  up(x,y)       ((
303a0 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e 64 69  Upsert*)0).#endi
303b0 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  f.../* Declarati
303c0 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
303d0 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
303e0 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
303f0 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
30400 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
30410 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
30420 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
30430 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
30440 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
30450 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
30460 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
30470 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
30480 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
30490 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
304a0 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
304b0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
304c0 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
304d0 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
304e0 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
304f0 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
30500 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a  nctionality is.*
30510 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f  * provided (enfo
30520 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f  rcement of FK co
30530 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72  nstraints requir
30540 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20  es the triggers 
30550 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a  sub-system)..*/.
30560 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
30570 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
30580 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
30590 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
305a0 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71  IGGER).  void sq
305b0 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72  lite3FkCheck(Par
305c0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
305d0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
305e0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
305f0 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72  3FkDropTable(Par
30600 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  se*, SrcList *, 
30610 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20  Table*);.  void 
30620 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
30630 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
30640 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
30650 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69   int*, int);.  i
30660 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  nt sqlite3FkRequ
30670 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62  ired(Parse*, Tab
30680 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  le*, int*, int);
30690 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b  .  u32 sqlite3Fk
306a0 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20  Oldmask(Parse*, 
306b0 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20  Table*);.  FKey 
306c0 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65  *sqlite3FkRefere
306d0 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23  nces(Table *);.#
306e0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
306f0 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
30700 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
30710 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
30720 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c  Check(a,b,c,d,e,
30730 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
30740 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
30750 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
30760 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
30770 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30  k(a,b)         0
30780 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
30790 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
307a0 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65  ,c,d)    0.  #de
307b0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
307c0 66 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20  ferences(a)     
307d0 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
307e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
307f0 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
30800 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
30810 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
30820 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
30830 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
30840 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
30850 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
30860 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
30870 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
30880 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
30890 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
308a0 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
308b0 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
308c0 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
308d0 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
308e0 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
308f0 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
30900 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
30910 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
30920 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
30930 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
30940 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
30950 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
30960 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
30970 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
30980 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
30990 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
309a0 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
309b0 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
309c0 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
309d0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
309e0 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  BLE.** is not de
309f0 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
30a00 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
30a10 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BLE.  void sqlit
30a20 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
30a30 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
30a40 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
30a50 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
30a60 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
30a70 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
30a80 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
30a90 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
30aa0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
30ab0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
30ac0 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
30ad0 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
30ae0 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
30af0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
30b00 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
30b10 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
30b20 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
30b30 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
30b40 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
30b50 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
30b60 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
30b70 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
30b80 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
30b90 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
30ba0 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
30bb0 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
30bc0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
30bd0 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
30be0 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
30bf0 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
30c00 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
30c10 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
30c20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
30c30 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
30c40 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
30c50 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
30c60 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
30c70 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
30c80 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
30c90 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
30ca0 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
30cb0 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
30cc0 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
30cd0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
30ce0 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
30cf0 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
30d00 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
30d10 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
30d20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
30d30 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
30d40 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
30d50 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
30d60 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
30d70 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
30d80 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
30d90 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u32, int*, int*
30da0 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71  , int*);..int sq
30db0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e  lite3JournalOpen
30dc0 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20  (sqlite3_vfs *, 
30dd0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71  const char *, sq
30de0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e  lite3_file *, in
30df0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
30e00 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
30e10 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
30e20 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
30e30 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
30e40 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64 65  _WRITE) \. || de
30e50 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
30e60 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
30e70 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73 71  _WRITE).  int sq
30e80 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
30e90 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
30ea0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
30eb0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73  sqlite3JournalIs
30ec0 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33  InMemory(sqlite3
30ed0 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20  _file *p);.void 
30ee0 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
30ef0 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
30f00 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  le *);..void sql
30f10 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
30f20 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20  tAndFlags(Parse 
30f30 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
30f40 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  );.#if SQLITE_MA
30f50 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
30f60 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
30f70 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
30f80 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
30f90 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
30fa0 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
30fb0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
30fc0 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
30fd0 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a  ExprHeight(x) 0.
30fe0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
30ff0 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
31000 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33  (x,y).#endif..u3
31010 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74  2 sqlite3Get4byt
31020 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f  e(const u8*);.vo
31030 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79  id sqlite3Put4by
31040 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23  te(u8*, u32);..#
31050 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
31060 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
31070 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
31080 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
31090 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c  d(sqlite3 *, sql
310a0 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20  ite3 *);.  void 
310b0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
310c0 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  nUnlocked(sqlite
310d0 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73  3 *db);.  void s
310e0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
310f0 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a  Closed(sqlite3 *
31100 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  db);.#else.  #de
31110 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
31120 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c  ectionBlocked(x,
31130 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
31140 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
31150 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66  locked(x).  #def
31160 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
31170 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23  ctionClosed(x).#
31180 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
31190 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69  LITE_DEBUG.  voi
311a0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54  d sqlite3ParserT
311b0 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72  race(FILE*, char
311c0 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20   *);.#endif.#if 
311d0 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52 41  defined(YYCOVERA
311e0 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  GE).  int sqlite
311f0 33 50 61 72 73 65 72 43 6f 76 65 72 61 67 65 28  3ParserCoverage(
31200 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  FILE*);.#endif..
31210 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
31220 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
31230 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
31240 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
31250 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
31260 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
31270 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
31280 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
31290 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
312a0 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
312b0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
312c0 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
312d0 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  E.# define IOTRA
312e0 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74  CE(A)  if( sqlit
312f0 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c  e3IoTrace ){ sql
31300 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d  ite3IoTrace A; }
31310 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
31320 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64  dbeIOTraceSql(Vd
31330 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49  be*);.SQLITE_API
31340 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76   SQLITE_EXTERN v
31350 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43  oid (SQLITE_CDEC
31360 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63  L *sqlite3IoTrac
31370 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
31380 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
31390 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
313a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
313b0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
313c0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
313d0 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
313e0 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
313f0 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
31400 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
31410 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
31420 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
31430 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
31440 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
31450 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
31460 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
31470 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
31480 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
31490 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
314a0 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
314b0 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
314c0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
314d0 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
314e0 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
314f0 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
31500 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
31510 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
31520 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
31530 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
31540 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
31550 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
31560 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
31570 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
31580 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
31590 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
315a0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
315b0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
315c0 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
315d0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
315e0 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
315f0 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
31600 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
31610 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
31620 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
31630 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
31640 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
31650 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
31660 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
31670 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
31680 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
31690 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
316a0 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
316b0 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
316c0 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
316d0 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
316e0 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
316f0 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
31700 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
31710 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
31720 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
31730 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
31740 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
31750 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
31760 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
31770 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
31780 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
31790 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
317a0 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
317b0 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
317c0 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
317d0 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
317e0 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
317f0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
31800 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
31810 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
31820 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
31830 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
31840 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
31850 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
31860 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
31870 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
31880 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
31890 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
318a0 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
318b0 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
318c0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
318d0 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
318e0 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
318f0 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
31900 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
31910 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
31920 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
31930 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
31940 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
31950 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
31960 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
31970 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
31980 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
31990 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
319a0 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
319b0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
319c0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
319d0 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
319e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
319f0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
31a00 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
31a10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
31a20 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
31a30 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
31a40 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
31a50 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
31a60 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
31a70 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
31a80 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
31a90 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
31aa0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
31ab0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
31ac0 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70  E  0x02  /* Heap
31ad0 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
31ae0 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
31af0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
31b00 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
31b10 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  04  /* Page cach
31b20 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
31b30 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e  ../*.** Threadin
31b40 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23  g interface.*/.#
31b50 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  if SQLITE_MAX_WO
31b60 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69  RKER_THREADS>0.i
31b70 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
31b80 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72  Create(SQLiteThr
31b90 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76  ead**,void*(*)(v
31ba0 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e  oid*),void*);.in
31bb0 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a  t sqlite3ThreadJ
31bc0 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64  oin(SQLiteThread
31bd0 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64  *, void**);.#end
31be0 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
31bf0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42  SQLITE_ENABLE_DB
31c00 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65  PAGE_VTAB) || de
31c10 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
31c20 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  T).int sqlite3Db
31c30 70 61 67 65 52 65 67 69 73 74 65 72 28 73 71 6c  pageRegister(sql
31c40 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23  ite3*);.#endif.#
31c50 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
31c60 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
31c70 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64  VTAB) || defined
31c80 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e  (SQLITE_TEST).in
31c90 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52  t sqlite3DbstatR
31ca0 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
31cb0 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
31cc0 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72  qlite3ExprVector
31cd0 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72  Size(Expr *pExpr
31ce0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
31cf0 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20  prIsVector(Expr 
31d00 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
31d10 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c  qlite3VectorFiel
31d20 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20  dSubexpr(Expr*, 
31d30 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
31d40 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72  te3ExprForVector
31d50 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70  Field(Parse*,Exp
31d60 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
31d70 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72  lite3VectorError
31d80 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Msg(Parse*, Expr
31d90 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  *);..#ifndef SQL
31da0 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
31db0 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e  OPTION_DIAGS.con
31dc0 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65  st char **sqlite
31dd0 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28  3CompileOptions(
31de0 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e  int *pnOpt);.#en
31df0 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  dif..#endif /* S
31e00 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a        QLITEINT_H */.