/ Hex Artifact Content
Login

Artifact d8a3b17c1292f9491d6437e2125b14823f281a6b58f614f47bc790c57196ee68:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 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 7c 7c 20 64  d(i386)     || d
6dd0: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
6de0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
6df0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
6e00: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
6e10: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
6e20: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
6e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
6e40: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6e50: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
6e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
6e70: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
6e80: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
6e90: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ea0: 5f 5f 61 72 6d 5f 5f 29 20 20 7c 7c 20 64 65 66  __arm__)  || def
6eb0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 36 34 29 0a 23  ined(_M_ARM64).#
6ec0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ed0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
6ee0: 33 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65  34.# elif define
6ef0: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
6f00: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a  efined(__ppc__).
6f10: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6f20: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6f30: 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  321.# else.#   d
6f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6f50: 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66  EORDER 0.# endif
6f60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
6f70: 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33  TE_BYTEORDER==43
6f80: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
6f90: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6fa0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6fb0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
6fc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6fd0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
6fe0: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c  LITE_UTF16BE.#el
6ff0: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
7000: 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69  DER==1234.# defi
7010: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
7020: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
7030: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7040: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
7050: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
7060: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
7070: 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65  6LE.#else.# ifde
7080: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
7090: 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e  ATION.  const in
70a0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31  t sqlite3one = 1
70b0: 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72  ;.# else.  exter
70c0: 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  n const int sqli
70d0: 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a  te3one;.# endif.
70e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70f0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28  BIGENDIAN    (*(
7100: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
7110: 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e  one)==0).# defin
7120: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7130: 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29  NDIAN (*(char *)
7140: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31  (&sqlite3one)==1
7150: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
7160: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28  E_UTF16NATIVE  (
7170: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
7180: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
7190: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
71a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
71b0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
71c0: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
71d0: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
71e0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
71f0: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
7200: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
7210: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
7220: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
7230: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
7240: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
7250: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
7260: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
7270: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
7280: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
7290: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
72a0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
72b0: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
72c0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61  /*.** Round up a
72d0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e   number to the n
72e0: 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69  ext larger multi
72f0: 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20  ple of 8.  This 
7300: 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f  is used.** to fo
7310: 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e  rce 8-byte align
7320: 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61  ment on 64-bit a
7330: 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f  rchitectures..*/
7340: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28  .#define ROUND8(
7350: 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26  x)     (((x)+7)&
7360: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  ~7)../*.** Round
7370: 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61   down to the nea
7380: 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rest multiple of
7390: 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f   8.*/.#define RO
73a0: 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29  UNDDOWN8(x) ((x)
73b0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65  &~7)../*.** Asse
73c0: 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e  rt that the poin
73d0: 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64  ter X is aligned
73e0: 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f   to an 8-byte bo
73f0: 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a  undary.  This.**
7400: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f   macro is used o
7410: 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72  nly within asser
7420: 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68  t() to verify th
7430: 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73  at the code gets
7440: 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e  .** all alignmen
7450: 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63  t restrictions c
7460: 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78  orrect..**.** Ex
7470: 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f  cept, if SQLITE_
7480: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
7490: 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64  ALLOC is defined
74a0: 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e  , then the.** un
74b0: 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28  derlying malloc(
74c0: 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ) implementation
74d0: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
74e0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
74f0: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
7500: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
7510: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
7520: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
7530: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
7540: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
7550: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
7560: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
7570: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
7580: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
7590: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
75a0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
75b0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
75c0: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
75d0: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
75e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  endif../*.** Dis
75f0: 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61  able MMAP on pla
7600: 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20  tforms where it 
7610: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20  is known to not 
7620: 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69  work.*/.#if defi
7630: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
7640: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e   || defined(__QN
7650: 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20  XNTO__).# undef 
7660: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7670: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7690: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ZE 0.#endif../*.
76a0: 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d  ** Default maxim
76b0: 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72  um size of memor
76c0: 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79  y used by memory
76d0: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74  -mapped I/O in t
76e0: 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66  he VFS.*/.#ifdef
76f0: 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63   __APPLE__.# inc
7700: 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64  lude <TargetCond
7710: 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64  itionals.h>.#end
7720: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
7730: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7740: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
7750: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
7760: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
7770: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
7780: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
7790: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
77a0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
77b0: 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66  _sun) \.  || def
77c0: 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f  ined(__FreeBSD__
77d0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
77e0: 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a  (__DragonFly__).
77f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
7800: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7810: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
7820: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
7830: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
7840: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7850: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
7860: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
7870: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
7880: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
7890: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
78a0: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
78b0: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
78c0: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
78d0: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
78e0: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
78f0: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
7900: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
7910: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
7920: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7930: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7940: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7950: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7960: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7970: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7980: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7990: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
79a0: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
79b0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
79c0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
79d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
79e0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
79f0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
7a00: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
7a10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7a20: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7a30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7a40: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7a50: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7a60: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7a70: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7a80: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7a90: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7aa0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7ab0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7ac0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
7ad0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
7ae0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
7af0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7b00: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7b10: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7b20: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7b30: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7b40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7b50: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7b60: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7b70: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7b80: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7b90: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ba0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7bb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
7bc0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
7bd0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
7be0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
7bf0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
7c00: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
7c10: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7c20: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7c30: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7c40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7c50: 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
7c60: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  CE).# define SEL
7c70: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
7c80: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
7c90: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
7ca0: 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a  ABLED 0.#endif..
7cb0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
7cc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
7cd0: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
7ce0: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
7cf0: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
7d00: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
7d10: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
7d20: 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndle..**.** The 
7d30: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7d40: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
7d50: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
7d60: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
7d70: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
7d80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7d90: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
7da0: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
7db0: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
7dc0: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
7dd0: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
7de0: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
7e10: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
7e20: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
7e30: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
7e40: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
7e50: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
7e60: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
7e70: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
7e80: 78 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f  xBusyHandler)(vo
7e90: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
7ea0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
7eb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73   */.  void *pBus
7ec0: 79 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  yArg;           
7ed0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
7ee0: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
7ef0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
7f00: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7f20: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
7f30: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
7f40: 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69  */.  u8 bExtraFi
7f50: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
7f60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64         /* Includ
7f70: 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61  e sqlite3_file a
7f80: 73 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a  s callback arg *
7f90: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
7fa0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7fb0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7fc0: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7fd0: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7fe0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7ff0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
8000: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
8010: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
8020: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
8030: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
8040: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
8050: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
8060: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
8070: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
8080: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
8090: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
80a0: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
80b0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
80c0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80d0: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
80e0: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
80f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
8100: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
8110: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
8120: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
8130: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
8140: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
8150: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
8160: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
8170: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
8180: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
8190: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
81a0: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
81b0: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
81c0: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
81d0: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
81e0: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
81f0: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
8200: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
8210: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
8220: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
8230: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
8240: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
8250: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
8260: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
8270: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
8280: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
8290: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
82a0: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
82b0: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
82c0: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
82d0: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
82e0: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
82f0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
8300: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
8310: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
8320: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
8330: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
8340: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
8350: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
8360: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
8370: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
8380: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
8390: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
83a0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
83b0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
83c0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
83d0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
83e0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
83f0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
8400: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
8410: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
8420: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
8430: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
8440: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
8450: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
8460: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
8470: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
8480: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
8490: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
84a0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
84b0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
84c0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
84d0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
84e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
84f0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
8500: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
8510: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
8520: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
8530: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
8540: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
8550: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
8560: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
8570: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
8580: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
8590: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
85a0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
85b0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
85c0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
85d0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
85e0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
85f0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
8600: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
8610: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8620: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
8630: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
8640: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
8650: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
8660: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
8670: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
8680: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
8690: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
86a0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
86b0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
86c0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
86d0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
86e0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
86f0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
8700: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
8710: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
8720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8730: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
8740: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
8750: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
8760: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
8770: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
8780: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
8790: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
87a0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
87b0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
87c0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
87d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
87e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
87f0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
8800: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
8810: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
8820: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
8830: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
8840: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
8850: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
8860: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
8870: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
8880: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
8890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
88a0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
88b0: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
88c0: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
88d0: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
88e0: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
88f0: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
8900: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
8910: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
8920: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
8930: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
8940: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
8950: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
8960: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
8970: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
8980: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
8990: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
89a0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
89b0: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
89c0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
89d0: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
89e0: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
89f0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
8a00: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
8a10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
8a20: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
8a30: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
8a40: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
8a50: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
8a60: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
8a70: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
8a80: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
8a90: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
8aa0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
8ab0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
8ac0: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
8ad0: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
8ae0: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
8af0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
8b00: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
8b10: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
8b20: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
8b30: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
8b40: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
8b50: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
8b60: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
8b70: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
8b80: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
8b90: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
8ba0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
8bb0: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
8bc0: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
8bd0: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
8be0: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
8bf0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
8c00: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
8c10: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
8c20: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
8c30: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
8c40: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
8c50: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
8c60: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
8c70: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
8c80: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
8c90: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
8ca0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
8cb0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
8cc0: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
8cd0: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
8ce0: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
8cf0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
8d00: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
8d10: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8d20: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
8d30: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
8d40: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
8d50: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
8d60: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
8d70: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
8d80: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
8d90: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
8da0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
8db0: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
8dc0: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
8dd0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
8de0: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
8df0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
8e00: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
8e10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
8e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
8e40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
8e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
8e90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
8ea0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
8eb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8ec0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
8ed0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ee0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
8ef0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
8f00: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
8f10: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
8f20: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
8f30: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
8f40: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f50: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
8f60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8f70: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
8f80: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
8f90: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
8fa0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
8fb0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
8fc0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
8fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fe0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
9000: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
9010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9020: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
9030: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61  RenameToken Rena
9060: 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  meToken;.typedef
9070: 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52   struct RowSet R
9080: 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73  owSet;.typedef s
9090: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
90a0: 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64  Savepoint;.typed
90b0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
90c0: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
90d0: 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68   struct SQLiteTh
90e0: 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61  read SQLiteThrea
90f0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9100: 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c  t SelectDest Sel
9110: 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66  ectDest;.typedef
9120: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
9130: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
9140: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
9150: 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a  str StrAccum; /*
9160: 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20   Internal alias 
9170: 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20  for sqlite3_str 
9180: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
9190: 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74  t Table Table;.t
91a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
91b0: 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63  bleLock TableLoc
91c0: 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  k;.typedef struc
91d0: 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74  t Token Token;.t
91e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
91f0: 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b  eeView TreeView;
9200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9210: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
9220: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9230: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
9240: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
9250: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
9260: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
9270: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
9280: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
9290: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
92a0: 65 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65  edef struct Upse
92b0: 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64  rt Upsert;.typed
92c0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
92d0: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
92e0: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
92f0: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
9300: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
9310: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
9320: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
9330: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
9340: 65 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77  ef struct Window
9350: 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66   Window;.typedef
9360: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
9370: 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  h;.../*.** The b
9380: 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
9390: 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
93a0: 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
93b0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
93c0: 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
93d0: 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
93e0: 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
93f0: 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
9400: 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
9410: 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
9420: 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
9430: 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
9440: 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
9450: 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
9460: 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
9470: 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65  n ix86..*/.#ifde
9480: 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
9490: 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20  _TYPE.  typedef 
94a0: 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
94b0: 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c  YPE Bitmask;.#el
94c0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
94d0: 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66   Bitmask;.#endif
94e0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
94f0: 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
9500: 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
9510: 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
9520: 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
9530: 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
9540: 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
9550: 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
9560: 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
9570: 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
9580: 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
9590: 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
95a0: 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
95b0: 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
95c0: 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c  (n)).#define ALL
95d0: 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d  BITS      ((Bitm
95e0: 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c  ask)-1)../* A VL
95f0: 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72  ist object recor
9600: 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74  ds a mapping bet
9610: 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f  ween parameters/
9620: 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61  variables/wildca
9630: 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51  rds.** in the SQ
9640: 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63  L statement (suc
9650: 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c  h as $abc, @pqr,
9660: 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68   or :xyz) and th
9670: 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72  e integer.** var
9680: 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73  iable number ass
9690: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61  ociated with tha
96a0: 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65  t parameter.  Se
96b0: 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73  e the format des
96c0: 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74  cription.** on t
96d0: 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41  he sqlite3VListA
96e0: 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72  dd() routine for
96f0: 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f   more informatio
9700: 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72  n.  A VList is r
9710: 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e  eally.** just an
9720: 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65   array of intege
9730: 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69  rs..*/.typedef i
9740: 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a  nt VList;../*.**
9750: 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20   Defer sourcing 
9760: 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65  vdbe.h and btree
9770: 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74  .h until after t
9780: 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22  he "u8" and.** "
9790: 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70  BusyHandler" typ
97a0: 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c  edefs. vdbe.h al
97b0: 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65  so requires a fe
97c0: 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a  w of the opaque.
97d0: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73  ** pointer types
97e0: 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20   (i.e. FuncDef) 
97f0: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a  defined above..*
9800: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65  /.#include "btre
9810: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  e.h".#include "v
9820: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
9830: 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75  "pager.h".#inclu
9840: 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69  de "pcache.h".#i
9850: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
9860: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
9870: 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  ../* The SQLITE_
9880: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f  EXTRA_DURABLE co
9890: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
98a0: 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68  n used to set th
98b0: 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e  e default.** syn
98c0: 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67  chronous setting
98d0: 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69   to EXTRA.  It i
98e0: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70  s no longer supp
98f0: 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  orted..*/.#ifdef
9900: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9910: 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20  RABLE.# warning 
9920: 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  Use SQLITE_DEFAU
9930: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33  LT_SYNCHRONOUS=3
9940: 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49   instead of SQLI
9950: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
9960: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9970: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9980: 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f  NOUS 3.#endif../
9990: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e  *.** Default syn
99a0: 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e  chronous levels.
99b0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
99c0: 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20   (for historcal 
99d0: 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47  reasons) the PAG
99e0: 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a  ER_SYNCHRONOUS_*
99f0: 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a   macros differ.*
9a00: 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  * from the SQLIT
9a10: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9a20: 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31  ONOUS value by 1
9a30: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  ..**.**         
9a40: 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e    PAGER_SYNCHRON
9a50: 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c  OUS       DEFAUL
9a60: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a  T_SYNCHRONOUS.**
9a70: 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20     OFF          
9a80: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
9a90: 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20             0.** 
9aa0: 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20    NORMAL        
9ab0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
9ac0: 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20            1.**  
9ad0: 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33   FULL          3
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20           2.**   
9b00: 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20  EXTRA         4 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20          3.**.** 
9b30: 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63  The "PRAGMA sync
9b40: 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65  hronous" stateme
9b50: 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65  nt also uses the
9b60: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9b70: 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ers..** In other
9b80: 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f   words, the zero
9b90: 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61  -based numbers a
9ba0: 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  re used for all 
9bb0: 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61  external interfa
9bc0: 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f  ces.** and the o
9bd0: 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20  ne-based values 
9be0: 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61  are used interna
9bf0: 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  lly..*/.#ifndef 
9c00: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9c10: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66  YNCHRONOUS.# def
9c20: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
9c30: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32  LT_SYNCHRONOUS 2
9c40: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
9c50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9c60: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23  AL_SYNCHRONOUS.#
9c70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
9c80: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9c90: 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45  RONOUS SQLITE_DE
9ca0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
9cb0: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
9cc0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  Each database fi
9cd0: 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65  le to be accesse
9ce0: 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20  d by the system 
9cf0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
9d00: 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * of the followi
9d10: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  ng structure.  T
9d20: 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  here are normall
9d30: 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73  y two of these s
9d40: 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20  tructures.** in 
9d50: 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d  the sqlite.aDb[]
9d60: 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20   array.  aDb[0] 
9d70: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
9d80: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a  base file and.**
9d90: 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64   aDb[1] is the d
9da0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
9db0: 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72  d to hold tempor
9dc0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64  ary tables.  Add
9dd0: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62  itional.** datab
9de0: 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61  ases may be atta
9df0: 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ched..*/.struct 
9e00: 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62  Db {.  char *zDb
9e10: 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  SName;      /* N
9e20: 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61  ame of this data
9e30: 62 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61  base. (schema na
9e40: 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65  me, not filename
9e50: 29 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  ) */.  Btree *pB
9e60: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
9e70: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
9e80: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
9e90: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
9ea0: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
9eb0: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
9ec0: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
9ed0: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
9ee0: 2f 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b  /.  u8 bSyncSet;
9ef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
9f00: 20 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63   if "PRAGMA sync
9f10: 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62  hronous=N" has b
9f20: 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68  een run */.  Sch
9f30: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
9f40: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
9f50: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
9f60: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
9f70: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
9f80: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9f90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
9fa0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
9fb0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
9fc0: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
9fd0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
9fe0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
9ff0: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
a000: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
a010: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
a020: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
a030: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
a040: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
a050: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
a060: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
a070: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
a080: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
a090: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
a0a0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
a0b0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
a0c0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
a0d0: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a  ared object..**.
a0e0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
a0f0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
a100: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
a110: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
a120: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
a130: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
a140: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
a150: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
a160: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
a170: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
a180: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
a190: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
a1a0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
a1b0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
a1c0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
a1d0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
a1e0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
a1f0: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
a200: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
a210: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
a220: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a230: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
a240: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
a250: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
a260: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
a270: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
a280: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
a290: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
a2a0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
a2b0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
a2c0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
a2d0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
a2e0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
a2f0: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
a300: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
a310: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
a320: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
a330: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
a340: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
a350: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
a360: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
a370: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a380: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
a390: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a3a0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
a3b0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a3c0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
a3d0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
a3e0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
a3f0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
a400: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
a410: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
a420: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
a430: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
a440: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
a450: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
a460: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
a470: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
a480: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
a490: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
a4a0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
a4b0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
a4c0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
a4d0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
a4e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
a4f0: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
a500: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
a510: 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46  */.  u16 schemaF
a520: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
a530: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
a540: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
a550: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
a560: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
a570: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
a580: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
a590: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
a5a0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
a5b0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
a5c0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
a5d0: 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70  s in the.** Db.p
a5e0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
a5f0: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
a600: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
a610: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
a620: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a630: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
a640: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
a650: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
a660: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
a670: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a680: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
a690: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
a6a0: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
a6b0: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
a6c0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a6d0: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
a6e0: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
a6f0: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
a700: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a710: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
a720: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
a730: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
a740: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
a750: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
a760: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
a770: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
a780: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
a790: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
a7a0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
a7b0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
a7c0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
a7d0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
a7e0: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
a7f0: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
a800: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
a810: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
a820: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
a830: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
a840: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
a850: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
a860: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
a870: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
a880: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
a890: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
a8a0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
a8b0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
a8c0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
a8d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
a8e0: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
a8f0: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
a900: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
a910: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
a920: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
a930: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
a940: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
a950: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
a960: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65   0 bytes) */.#de
a970: 66 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e  fine DB_ResetWan
a980: 74 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20  ted     0x0008  
a990: 2f 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68  /* Reset the sch
a9a0: 65 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61  ema when nSchema
a9b0: 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a  Lock==0 */../*.*
a9c0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
a9d0: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
a9e0: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
a9f0: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
aa00: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
aa10: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
aa20: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
aa30: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
aa40: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f  (SQLITE_LIMIT_WO
aa50: 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a  RKER_THREADS+1).
aa60: 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  ./*.** Lookaside
aa70: 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74   malloc is a set
aa80: 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62   of fixed-size b
aa90: 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20  uffers that can 
aaa0: 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  be used.** to sa
aab0: 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e  tisfy small tran
aac0: 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c  sient memory all
aad0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73  ocation requests
aae0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20   for objects.** 
aaf0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ab00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ab10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ab20: 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a  .  The use of.**
ab30: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
ab40: 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67  c provides a sig
ab50: 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d  nificant perform
ab60: 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ance enhancement
ab70: 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29  .** (approx 10%)
ab80: 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d   by avoiding num
ab90: 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65  erous malloc/fre
aba0: 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65  e requests while
abb0: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20   parsing.** SQL 
abc0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
abd0: 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20  * The Lookaside 
abe0: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
abf0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e  configuration in
ac00: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
ac10: 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  the.** lookaside
ac20: 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65   malloc subsyste
ac30: 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62  m.  Each availab
ac40: 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
ac50: 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c  tion in.** the l
ac60: 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74  ookaside subsyst
ac70: 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  em is stored on 
ac80: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
ac90: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a   LookasideSlot.*
aca0: 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a  * objects..**.**
acb0: 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   Lookaside alloc
acc0: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
acd0: 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65  allowed for obje
ace0: 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73  cts that are ass
acf0: 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20  ociated.** with 
ad00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ad10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ad20: 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61  .  Hence, schema
ad30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e   information can
ad40: 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64  not.** be stored
ad50: 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65   in lookaside be
ad60: 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20  cause in shared 
ad70: 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73  cache mode the s
ad80: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
ad90: 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62  n.** is shared b
ada0: 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  y multiple datab
adb0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ase connections.
adc0: 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69    Therefore, whi
add0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63  le parsing.** sc
ade0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
adf0: 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e  , the Lookaside.
ae00: 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73  bEnabled flag is
ae10: 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74   cleared so that
ae20: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** lookaside al
ae30: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f  locations are no
ae40: 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72  t used to constr
ae50: 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f  uct the schema o
ae60: 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
ae70: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20  t Lookaside {.  
ae80: 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20  u32 bDisable;   
ae90: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20          /* Only 
aea0: 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b  operate the look
aeb0: 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20  aside when zero 
aec0: 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20  */.  u16 sz;    
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aee0: 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66  Size of each buf
aef0: 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  fer in bytes */.
af00: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
af10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
af20: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
af30: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
af40: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
af50: 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20  u32 nSlot;      
af60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
af70: 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73  r of lookaside s
af80: 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  lots allocated *
af90: 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33  /.  u32 anStat[3
afa0: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
afb0: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
afc0: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
afd0: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
afe0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e  okasideSlot *pIn
aff0: 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  it;   /* List of
b000: 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65   buffers not pre
b010: 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a  viously used */.
b020: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b030: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
b040: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
b050: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
b060: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
b070: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
b080: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
b090: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
b0a0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
b0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
b0c0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
b0d0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
b0e0: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
b0f0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
b100: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b110: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
b120: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
b130: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
b140: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
b150: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
b160: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
b170: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b180: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
b190: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
b1a0: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
b1b0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
b1c0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
b1d0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
b1e0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
b1f0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
b200: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
b210: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
b220: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
b230: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
b240: 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  chain..*/.#defin
b250: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  e SQLITE_FUNC_HA
b260: 53 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74 20  SH_SZ 23.struct 
b270: 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20  FuncDefHash {.  
b280: 46 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49 54  FuncDef *a[SQLIT
b290: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b  E_FUNC_HASH_SZ];
b2a0: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
b2b0: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
b2c0: 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66  ns */.};..#ifdef
b2d0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b2e0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a  HENTICATION./*.*
b2f0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65  * Information he
b300: 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74  ld in the "sqlit
b310: 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e3" database con
b320: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61  nection object a
b330: 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61  nd used.** to ma
b340: 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65 6e  nage user authen
b350: 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70  tication..*/.typ
b360: 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69  edef struct sqli
b370: 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c  te3_userauth sql
b380: 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73  ite3_userauth;.s
b390: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
b3a0: 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75  erauth {.  u8 au
b3b0: 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20  thLevel;        
b3c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
b3d0: 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69  ent authenticati
b3e0: 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  on level */.  in
b3f0: 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20  t nAuthPW;      
b400: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
b410: 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68  ize of the zAuth
b420: 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  PW in bytes */. 
b430: 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20   char *zAuthPW; 
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b450: 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64 20  * Password used 
b460: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
b470: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
b480: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  User;           
b490: 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20     /* User name 
b4a0: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
b4b0: 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  cate */.};../* A
b4c0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
b4d0: 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  r sqlite3_userau
b4e0: 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a  th.authLevel */.
b4f0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e  #define UAUTH_Un
b500: 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20  known     0     
b510: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f  /* Authenticatio
b520: 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65  n not yet checke
b530: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  d */.#define UAU
b540: 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31  TH_Fail        1
b550: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74       /* User aut
b560: 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c  hentication fail
b570: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
b580: 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20 20  UTH_User        
b590: 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  2     /* Authent
b5a0: 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d  icated as a norm
b5b0: 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69  al user */.#defi
b5c0: 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20  ne UAUTH_Admin  
b5d0: 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75       3     /* Au
b5e0: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
b5f0: 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20  n administrator 
b600: 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73  */../* Functions
b610: 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73   used only by us
b620: 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  er authorization
b630: 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71   logic */.int sq
b640: 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61 62  lite3UserAuthTab
b650: 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  le(const char*);
b660: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
b670: 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73  AuthCheckLogin(s
b680: 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
b690: 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73  ar*,u8*);.void s
b6a0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49 6e  qlite3UserAuthIn
b6b0: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
b6c0: 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74 46  id sqlite3CryptF
b6d0: 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  unc(sqlite3_cont
b6e0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
b6f0: 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64  _value**);..#end
b700: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
b710: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
b720: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64   */../*.** typed
b730: 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f  ef for the autho
b740: 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63  rization callbac
b750: 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  k function..*/.#
b760: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
b770: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
b780: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
b790: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
b7a0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
b7b0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b7c0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
b7f0: 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
b800: 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20   char*);.#else. 
b810: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
b820: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
b830: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
b840: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
b850: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
b880: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
b890: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
b8a0: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
b8b0: 0a 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 65  ./* This is an e
b8c0: 78 74 72 61 20 53 51 4c 49 54 45 5f 54 52 41 43  xtra SQLITE_TRAC
b8d0: 45 20 6d 61 63 72 6f 20 74 68 61 74 20 69 6e 64  E macro that ind
b8e0: 69 63 61 74 65 73 20 22 6c 65 67 61 63 79 22 20  icates "legacy" 
b8f0: 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e 20 74 68  tracing.** in th
b900: 65 20 73 74 79 6c 65 20 6f 66 20 73 71 6c 69 74  e style of sqlit
b910: 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f 0a 23 64  e3_trace().*/.#d
b920: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41  efine SQLITE_TRA
b930: 43 45 5f 4c 45 47 41 43 59 20 20 30 78 38 30 0a  CE_LEGACY  0x80.
b940: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51  #else.#define SQ
b950: 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43  LITE_TRACE_LEGAC
b960: 59 20 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53  Y  0.#endif /* S
b970: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b980: 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  CATED */.../*.**
b990: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63   Each database c
b9a0: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20  onnection is an 
b9b0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
b9c0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
b9d0: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  ure..*/.struct s
b9e0: 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74  qlite3 {.  sqlit
b9f0: 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20  e3_vfs *pVfs;   
ba00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49           /* OS I
ba10: 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74  nterface */.  st
ba20: 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65  ruct Vdbe *pVdbe
ba30: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
ba40: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69  ist of active vi
ba50: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a  rtual machines *
ba60: 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66  /.  CollSeq *pDf
ba70: 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  ltColl;         
ba80: 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74    /* The default
ba90: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
baa0: 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a  nce (BINARY) */.
bab0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
bac0: 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  *mutex;         
bad0: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  /* Connection mu
bae0: 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62  tex */.  Db *aDb
baf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bb00: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61         /* All ba
bb10: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  ckends */.  int 
bb20: 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  nDb;            
bb30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
bb40: 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20  ber of backends 
bb50: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
bb60: 20 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61   */.  u32 mDbFla
bb70: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bb80: 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63      /* flags rec
bb90: 6f 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20  ording internal 
bba0: 73 74 61 74 65 20 2a 2f 0a 20 20 75 33 32 20 66  state */.  u32 f
bbb0: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
bbc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67           /* flag
bbd0: 73 20 73 65 74 74 61 62 6c 65 20 62 79 20 70 72  s settable by pr
bbe0: 61 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77  agmas. See below
bbf0: 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f   */.  i64 lastRo
bc00: 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  wid;            
bc10: 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20      /* ROWID of 
bc20: 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65  most recent inse
bc30: 72 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  rt (see above) *
bc40: 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20  /.  i64 szMmap; 
bc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc60: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61    /* Default mma
bc70: 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a  p_size setting *
bc80: 2f 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c  /.  u32 nSchemaL
bc90: 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
bca0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65    /* Do not rese
bcb0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65  t the schema whe
bcc0: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20  n non-zero */.  
bcd0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65  unsigned int ope
bce0: 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  nFlags;       /*
bcf0: 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
bd00: 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70   sqlite3_vfs.xOp
bd10: 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  en() */.  int er
bd20: 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  rCode;          
bd30: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
bd40: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
bd50: 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a  e (SQLITE_*) */.
bd60: 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20    int errMask;  
bd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd80: 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65  /* & result code
bd90: 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f  s with this befo
bda0: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a  re returning */.
bdb0: 20 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b    int iSysErrno;
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdd0: 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66  /* Errno value f
bde0: 72 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20  rom last system 
bdf0: 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64  error */.  u16 d
be00: 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20  bOptFlags;      
be10: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67           /* Flag
be20: 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61  s to enable/disa
be30: 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ble optimization
be40: 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  s */.  u8 enc;  
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be60: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
be70: 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75  oding */.  u8 au
be80: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
be90: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
bea0: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
beb0: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
bec0: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
bed0: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
bee0: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
bef0: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
bf00: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
bf10: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
bf20: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
bf30: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
bf40: 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e   */.  u8 bBenign
bf50: 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  Malloc;         
bf60: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65      /* Do not re
bf70: 71 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72  quire OOMs if tr
bf80: 75 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  ue */.  u8 dfltL
bf90: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
bfa0: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
bfb0: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
bfc0: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
bfd0: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
bfe0: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
bff0: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
c000: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
c010: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
c020: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
c030: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c040: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
c050: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
c060: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
c070: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
c080: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
c090: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
c0a0: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
c0b0: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
c0c0: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
c0d0: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
c0e0: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
c0f0: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
c100: 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b   */.  u8 mTrace;
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c120: 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d      /* zero or m
c130: 6f 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ore SQLITE_TRACE
c140: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e   flags */.  u8 n
c150: 6f 53 68 61 72 65 64 43 61 63 68 65 3b 20 20 20  oSharedCache;   
c160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
c170: 65 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63  e if no shared-c
c180: 61 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ache backends */
c190: 0a 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20  .  u8 nSqlExec; 
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1b0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65   /* Number of pe
c1c0: 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63  nding OP_SqlExec
c1d0: 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e   opcodes */.  in
c1e0: 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20  t nextPagesize; 
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
c200: 61 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41  agesize after VA
c210: 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20  CUUM if >0 */.  
c220: 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20  u32 magic;      
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c240: 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f   Magic number fo
c250: 72 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79  r detect library
c260: 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74   misuse */.  int
c270: 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20   nChange;       
c280: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
c290: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
c2a0: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
c2b0: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61  ) */.  int nTota
c2c0: 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  lChange;        
c2d0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
c2e0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
c2f0: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
c300: 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69  ) */.  int aLimi
c310: 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  t[SQLITE_N_LIMIT
c320: 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a  ];   /* Limits *
c330: 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74  /.  int nMaxSort
c340: 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  erMmap;         
c350: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a    /* Maximum siz
c360: 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70  e of regions map
c370: 70 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f  ped by sorter */
c380: 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  .  struct sqlite
c390: 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20  3InitInfo {     
c3a0: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
c3b0: 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74  used during init
c3c0: 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20  ialization */.  
c3d0: 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20    int newTnum;  
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c3f0: 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62   Rootpage of tab
c400: 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  le being initial
c410: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69  ized */.    u8 i
c420: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
c430: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
c440: 20 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e   db file is bein
c450: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
c460: 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20  .    u8 busy;   
c470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c480: 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72   /* TRUE if curr
c490: 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69  ently initializi
c4a0: 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ng */.    unsign
c4b0: 65 64 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  ed orphanTrigger
c4c0: 20 3a 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74   : 1; /* Last st
c4d0: 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61  atement is orpha
c4e0: 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72  ned TEMP trigger
c4f0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c500: 20 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a   imposterTable :
c510: 20 31 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20   1; /* Building 
c520: 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c  an imposter tabl
c530: 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
c540: 64 20 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20  d reopenMemdb : 
c550: 31 3b 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69  1;   /* ATTACH i
c560: 73 20 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65  s really a reope
c570: 6e 20 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f  n using MemDB */
c580: 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74  .  } init;.  int
c590: 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20   nVdbeActive;   
c5a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c5b0: 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75  mber of VDBEs cu
c5c0: 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
c5d0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65  */.  int nVdbeRe
c5e0: 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ad;             
c5f0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c600: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
c610: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
c620: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72  */.  int nVdbeWr
c630: 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ite;            
c640: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c650: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
c660: 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  t read and write
c670: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45   */.  int nVdbeE
c680: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
c690: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c6a0: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
c6b0: 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20   VdbeExec() */. 
c6c0: 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20   int nVDestroy; 
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c6e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c6f0: 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f  ve OP_VDestroy o
c700: 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  perations */.  i
c710: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c730: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
c740: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
c750: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
c760: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
c770: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
c780: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
c790: 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72  s */.  int (*xTr
c7a0: 61 63 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76  ace)(u32,void*,v
c7b0: 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20  oid*,void*);    
c7c0: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
c7d0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
c7e0: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c800: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
c810: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
c820: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
c830: 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c  xProfile)(void*,
c840: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29  const char*,u64)
c850: 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20  ;  /* Profiling 
c860: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
c870: 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b  id *pProfileArg;
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c890: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c8a0: 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66  ent to profile f
c8b0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
c8c0: 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20  d *pCommitArg;  
c8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c8e0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  * Argument to xC
c8f0: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20  ommitCallback() 
c900: 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d  */.  int (*xComm
c910: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
c920: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
c930: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
c940: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
c950: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
c960: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
c970: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
c980: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a  ckCallback() */.
c990: 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61    void (*xRollba
c9a0: 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  ckCallback)(void
c9b0: 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61  *); /* Invoked a
c9c0: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
c9d0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61  */.  void *pUpda
c9e0: 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a  teArg;.  void (*
c9f0: 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
ca00: 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
ca10: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
ca20: 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34  ar*,sqlite_int64
ca30: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
ca40: 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
ca50: 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70  E_HOOK.  void *p
ca60: 50 72 65 55 70 64 61 74 65 41 72 67 3b 20 20 20  PreUpdateArg;   
ca70: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
ca80: 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50 72 65  argument to xPre
ca90: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a  UpdateCallback *
caa0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 65 55  /.  void (*xPreU
cab0: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 20  pdateCallback)( 
cac0: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65 64 20    /* Registered 
cad0: 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72  using sqlite3_pr
cae0: 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a  eupdate_hook() *
caf0: 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69  /.    void*,sqli
cb00: 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f  te3*,int,char co
cb10: 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a  nst*,char const*
cb20: 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73  ,sqlite3_int64,s
cb30: 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20 20 29  qlite3_int64.  )
cb40: 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a 70  ;.  PreUpdate *p
cb50: 50 72 65 55 70 64 61 74 65 3b 20 20 20 20 20 20  PreUpdate;      
cb60: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
cb70: 20 61 63 74 69 76 65 20 70 72 65 2d 75 70 64 61   active pre-upda
cb80: 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  te callback */.#
cb90: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
cba0: 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
cbb0: 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66  _HOOK */.#ifndef
cbc0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
cbd0: 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c  .  int (*xWalCal
cbe0: 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73  lback)(void *, s
cbf0: 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
cc00: 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20  char *, int);.  
cc10: 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23  void *pWalArg;.#
cc20: 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43  endif.  void(*xC
cc30: 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a  ollNeeded)(void*
cc40: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
cc50: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61  extRep,const cha
cc60: 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f  r*);.  void(*xCo
cc70: 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64  llNeeded16)(void
cc80: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
cc90: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f  TextRep,const vo
cca0: 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43  id*);.  void *pC
ccb0: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20  ollNeededArg;.  
ccc0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
ccd0: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Err;          /*
cce0: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
ccf0: 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
cd00: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61  union {.    vola
cd10: 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72  tile int isInter
cd20: 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20  rupted; /* True 
cd30: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
cd40: 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61  rupt has been ca
cd50: 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62  lled */.    doub
cd60: 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20  le notUsed1;    
cd70: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
cd80: 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c  r */.  } u1;.  L
cd90: 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69  ookaside lookasi
cda0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
cdb0: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
cdc0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
cdd0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
cde0: 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
cdf0: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61  ION.  sqlite3_xa
ce00: 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20 20  uth xAuth;      
ce10: 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75      /* Access au
ce20: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63  thorization func
ce30: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
ce40: 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20 20  pAuthArg;       
ce50: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
ce60: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61  rgument to the a
ce70: 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63 74  ccess auth funct
ce80: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ion */.#endif.#i
ce90: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cea0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
ceb0: 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f  ACK.  int (*xPro
cec0: 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20  gress)(void *); 
ced0: 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72      /* The progr
cee0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
cef0: 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73    void *pProgres
cf00: 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
cf10: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
cf20: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
cf30: 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  back */.  unsign
cf40: 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b  ed nProgressOps;
cf50: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
cf60: 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72  r of opcodes for
cf70: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
cf80: 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ck */.#endif.#if
cf90: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
cfa0: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
cfb0: 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20  int nVTrans;    
cfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cfd0: 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20   Allocated size 
cfe0: 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20  of aVTrans */.  
cff0: 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20  Hash aModule;   
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d010: 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71   populated by sq
d020: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
d030: 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43  ule() */.  VtabC
d040: 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20  tx *pVtabCtx;   
d050: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
d060: 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 76  ext for active v
d070: 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61  tab connect/crea
d080: 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  te */.  VTable *
d090: 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20  *aVTrans;       
d0a0: 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c        /* Virtual
d0b0: 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65   tables with ope
d0c0: 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a  n transactions *
d0d0: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73  /.  VTable *pDis
d0e0: 63 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20 20  connect;        
d0f0: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
d100: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
d110: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
d120: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73 68  */.#endif.  Hash
d130: 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   aFunc;         
d140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
d150: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
d160: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
d170: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
d180: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
d190: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
d1a0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
d1b0: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
d1c0: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
d1d0: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
d1e0: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
d1f0: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
d200: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
d210: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
d220: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
d230: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
d240: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
d250: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
d260: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
d270: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
d280: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
d290: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
d2a0: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
d2b0: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
d2c0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
d2d0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d2e0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
d2f0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
d300: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
d310: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
d320: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
d330: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
d340: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
d350: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
d360: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
d370: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
d380: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
d390: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
d3a0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
d3b0: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
d3c0: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
d3d0: 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73  d immediate cons
d3e0: 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
d3f0: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
d400: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
d410: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
d420: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
d430: 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  ree() */.#ifdef 
d440: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
d450: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a  LOCK_NOTIFY.  /*
d460: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
d470: 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c  ariables are all
d480: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68   protected by th
d490: 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 0a  e STATIC_MASTER.
d4a0: 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20    ** mutex, not 
d4b0: 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  by sqlite3.mutex
d4c0: 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20  . They are used 
d4d0: 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66  by code in notif
d4e0: 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  y.c..  **.  ** W
d4f0: 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e  hen X.pUnlockCon
d500: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
d510: 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73   means that X is
d520: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74   waiting for Y t
d530: 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f  o.  ** unlock so
d540: 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f   that it can pro
d550: 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ceed..  **.  ** 
d560: 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67  When X.pBlocking
d570: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
d580: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73  hat means that s
d590: 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20  omething that X 
d5a0: 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64  tried.  ** tried
d5b0: 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20   to do recently 
d5c0: 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53  failed with an S
d5d0: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72  QLITE_LOCKED err
d5e0: 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a  or due to locks.
d5f0: 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a    ** held by Y..
d600: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a    */.  sqlite3 *
d610: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
d620: 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69  ion; /* Connecti
d630: 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53  on that caused S
d640: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a  QLITE_LOCKED */.
d650: 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f    sqlite3 *pUnlo
d660: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20  ckConnection;   
d670: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
d680: 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66  ction to watch f
d690: 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76  or unlock */.  v
d6a0: 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b  oid *pUnlockArg;
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6c0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
d6d0: 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66   to xUnlockNotif
d6e0: 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55  y */.  void (*xU
d6f0: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69  nlockNotify)(voi
d700: 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20  d **, int);  /* 
d710: 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61  Unlock notify ca
d720: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69  llback */.  sqli
d730: 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65  te3 *pNextBlocke
d740: 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
d750: 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c  t in list of all
d760: 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74   blocked connect
d770: 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ions */.#endif.#
d780: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
d790: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
d7a0: 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  .  sqlite3_usera
d7b0: 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20 20  uth auth;       
d7c0: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
d7d0: 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  ication informat
d7e0: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ion */.#endif.};
d7f0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
d800: 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20  to discover the 
d810: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61  encoding of a da
d820: 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69  tabase..*/.#defi
d830: 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62  ne SCHEMA_ENC(db
d840: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
d850: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64  pSchema->enc).#d
d860: 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20 20  efine ENC(db)   
d870: 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63 29       ((db)->enc)
d880: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
d890: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
d8a0: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a  sqlite3.flags..*
d8b0: 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
d8c0: 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
d8d0: 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
d8e0: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46  **      SQLITE_F
d8f0: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d 20  ullFSync     == 
d900: 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 0a  PAGER_FULLFSYNC.
d910: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43  **      SQLITE_C
d920: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d 20  kptFullFSync == 
d930: 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46  PAGER_CKPT_FULLF
d940: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
d950: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
d960: 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43 48 45    == PAGER_CACHE
d970: 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e  _SPILL.*/.#defin
d980: 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63  e SQLITE_WriteSc
d990: 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 30  hema    0x000000
d9a0: 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64  01  /* OK to upd
d9b0: 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  ate SQLITE_MASTE
d9c0: 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  R */.#define SQL
d9d0: 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d  ITE_LegacyFileFm
d9e0: 74 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f  t  0x00000002  /
d9f0: 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74  * Create new dat
da00: 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74  abases in format
da10: 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51   1 */.#define SQ
da20: 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65  LITE_FullColName
da30: 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20  s   0x00000004  
da40: 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c  /* Show full col
da50: 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c  umn names on SEL
da60: 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ECT */.#define S
da70: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
da80: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38 20       0x00000008 
da90: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
daa0: 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e  nc on the backen
dab0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
dac0: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
dad0: 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f  c  0x00000010  /
dae0: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
daf0: 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20   for checkpoint 
db00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
db10: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20  E_CacheSpill    
db20: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
db30: 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65  OK to spill page
db40: 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  r cache */.#defi
db50: 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43  ne SQLITE_ShortC
db60: 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30  olNames  0x00000
db70: 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f  040  /* Show sho
db80: 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73  rt columns names
db90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dba0: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20  TE_CountRows    
dbb0: 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a    0x00000080  /*
dbc0: 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e   Count rows chan
dbd0: 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a  ged by INSERT, *
dbe0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
dc10: 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
dc20: 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f  TE and return */
dc30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
dc60: 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20  the count using 
dc70: 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23  a callback. */.#
dc80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75  define SQLITE_Nu
dc90: 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30  llCallback   0x0
dca0: 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f  0000100  /* Invo
dcb0: 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  ke the callback 
dcc0: 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20  once if the */. 
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65           /*   re
dd00: 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
dd10: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  y */.#define SQL
dd20: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
dd30: 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f     0x00000200  /
dd40: 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65  * Do not enforce
dd50: 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
dd60: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
dd70: 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
dd80: 74 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20  t   0x00000400  
dd90: 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d 4d 49 54  /* READ UNCOMMIT
dda0: 54 45 44 20 69 6e 20 73 68 61 72 65 64 2d 63 61  TED in shared-ca
ddb0: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
ddc0: 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c  QLITE_NoCkptOnCl
ddd0: 6f 73 65 20 20 30 78 30 30 30 30 30 38 30 30 20  ose  0x00000800 
dde0: 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70 6f 69 6e   /* No checkpoin
ddf0: 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f 44 45 54  t on close()/DET
de00: 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ACH */.#define S
de10: 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64  QLITE_ReverseOrd
de20: 65 72 20 20 20 30 78 30 30 30 30 31 30 30 30 20  er   0x00001000 
de30: 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72   /* Reverse unor
de40: 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f  dered SELECTs */
de50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
de60: 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30  RecTriggers    0
de70: 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 45 6e  x00002000  /* En
de80: 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74  able recursive t
de90: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
dea0: 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67  ne SQLITE_Foreig
deb0: 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 30 34  nKeys    0x00004
dec0: 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20  000  /* Enforce 
ded0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
dee0: 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66  traints  */.#def
def0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49  ine SQLITE_AutoI
df00: 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 30 30  ndex      0x0000
df10: 38 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  8000  /* Enable 
df20: 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65  automatic indexe
df30: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
df40: 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  ITE_LoadExtensio
df50: 6e 20 20 30 78 30 30 30 31 30 30 30 30 20 20 2f  n  0x00010000  /
df60: 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78  * Enable load_ex
df70: 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  tension */.#defi
df80: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
df90: 74 46 75 6e 63 20 20 20 20 30 78 30 30 30 32 30  tFunc    0x00020
dfa0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
dfb0: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20  oad_extension() 
dfc0: 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  SQL func */.#def
dfd0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c  ine SQLITE_Enabl
dfe0: 65 54 72 69 67 67 65 72 20 20 30 78 30 30 30 34  eTrigger  0x0004
dff0: 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0000  /* True to
e000: 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73   enable triggers
e010: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e020: 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20  TE_DeferFKs     
e030: 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a    0x00080000  /*
e040: 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f   Defer all FK co
e050: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
e060: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
e070: 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 30 31  yOnly      0x001
e080: 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c  00000  /* Disabl
e090: 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  e database chang
e0a0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e0b0: 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20  LITE_CellSizeCk 
e0c0: 20 20 20 20 30 78 30 30 32 30 30 30 30 30 20 20      0x00200000  
e0d0: 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63  /* Check btree c
e0e0: 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61  ell sizes on loa
e0f0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
e100: 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65  ITE_Fts3Tokenize
e110: 72 20 20 30 78 30 30 34 30 30 30 30 30 20 20 2f  r  0x00400000  /
e120: 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f  * Enable fts3_to
e130: 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 23 64  kenizer(2) */.#d
e140: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61  efine SQLITE_Ena
e150: 62 6c 65 51 50 53 47 20 20 20 20 20 30 78 30 30  bleQPSG     0x00
e160: 38 30 30 30 30 30 20 20 2f 2a 20 51 75 65 72 79  800000  /* Query
e170: 20 50 6c 61 6e 6e 65 72 20 53 74 61 62 69 6c 69   Planner Stabili
e180: 74 79 20 47 75 61 72 61 6e 74 65 65 2a 2f 0a 23  ty Guarantee*/.#
e190: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
e1a0: 69 67 67 65 72 45 51 50 20 20 20 20 20 30 78 30  iggerEQP     0x0
e1b0: 31 30 30 30 30 30 30 20 20 2f 2a 20 53 68 6f 77  1000000  /* Show
e1c0: 20 74 72 69 67 67 65 72 20 45 58 50 4c 41 49 4e   trigger EXPLAIN
e1d0: 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23   QUERY PLAN */.#
e1e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
e1f0: 73 65 74 44 61 74 61 62 61 73 65 20 20 30 78 30  setDatabase  0x0
e200: 32 30 30 30 30 30 30 20 20 2f 2a 20 52 65 73 65  2000000  /* Rese
e210: 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 2a  t the database *
e220: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e230: 5f 4c 65 67 61 63 79 41 6c 74 65 72 20 20 20 20  _LegacyAlter    
e240: 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 4c  0x04000000  /* L
e250: 65 67 61 63 79 20 41 4c 54 45 52 20 54 41 42 4c  egacy ALTER TABL
e260: 45 20 62 65 68 61 76 69 6f 75 72 20 2a 2f 0a 0a  E behaviour */..
e270: 2f 2a 20 46 6c 61 67 73 20 75 73 65 64 20 6f 6e  /* Flags used on
e280: 6c 79 20 69 66 20 64 65 62 75 67 67 69 6e 67 20  ly if debugging 
e290: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
e2a0: 5f 44 45 42 55 47 0a 23 64 65 66 69 6e 65 20 53  _DEBUG.#define S
e2b0: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
e2c0: 20 20 20 20 20 30 78 30 38 30 30 30 30 30 30 20       0x08000000 
e2d0: 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20   /* Debug print 
e2e0: 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74  SQL as it execut
e2f0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e300: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
e310: 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20      0x10000000  
e320: 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67  /* Debug listing
e330: 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61  s of VDBE progra
e340: 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
e350: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20  LITE_VdbeTrace  
e360: 20 20 20 20 30 78 32 30 30 30 30 30 30 30 20 20      0x20000000  
e370: 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65  /* True to trace
e380: 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20   VDBE execution 
e390: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e3a0: 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65  E_VdbeAddopTrace
e3b0: 20 30 78 34 30 30 30 30 30 30 30 20 20 2f 2a 20   0x40000000  /* 
e3c0: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
e3d0: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
e3e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e3f0: 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20  _VdbeEQP        
e400: 30 78 38 30 30 30 30 30 30 30 20 20 2f 2a 20 44  0x80000000  /* D
e410: 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45  ebug EXPLAIN QUE
e420: 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 65 6e 64 69  RY PLAN */.#endi
e430: 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  f../*.** Allowed
e440: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
e450: 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a 2a 2f 0a  te3.mDbFlags.*/.
e460: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53  #define DBFLAG_S
e470: 63 68 65 6d 61 43 68 61 6e 67 65 20 20 20 30 78  chemaChange   0x
e480: 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69  0001  /* Uncommi
e490: 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20  tted Hash table 
e4a0: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e4b0: 6e 65 20 44 42 46 4c 41 47 5f 50 72 65 66 65 72  ne DBFLAG_Prefer
e4c0: 42 75 69 6c 74 69 6e 20 20 30 78 30 30 30 32 20  Builtin  0x0002 
e4d0: 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74   /* Preference t
e4e0: 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73  o built-in funcs
e4f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c   */.#define DBFL
e500: 41 47 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20  AG_Vacuum       
e510: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 43 75 72    0x0004  /* Cur
e520: 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55  rently in a VACU
e530: 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  UM */.#define DB
e540: 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e  FLAG_SchemaKnown
e550: 4f 6b 20 20 30 78 30 30 30 38 20 20 2f 2a 20 53  Ok  0x0008  /* S
e560: 63 68 65 6d 61 20 69 73 20 6b 6e 6f 77 6e 20 74  chema is known t
e570: 6f 20 62 65 20 76 61 6c 69 64 20 2a 2f 0a 0a 2f  o be valid */../
e580: 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65  *.** Bits of the
e590: 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c   sqlite3.dbOptFl
e5a0: 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61  ags field that a
e5b0: 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a  re used by the.*
e5c0: 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
e5d0: 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45  ontrol(SQLITE_TE
e5e0: 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54  STCTRL_OPTIMIZAT
e5f0: 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66  IONS,...) interf
e600: 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74  ace to.** select
e610: 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61  ively disable va
e620: 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
e630: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
e640: 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74  SQLITE_QueryFlat
e650: 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f  tener 0x0001   /
e660: 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69  * Query flatteni
e670: 6e 67 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ng */.          
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e690: 2f 2a 20 20 30 78 30 30 30 32 20 20 20 61 76 61  /*  0x0002   ava
e6a0: 69 6c 61 62 6c 65 20 66 6f 72 20 72 65 75 73 65  ilable for reuse
e6b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e6c0: 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20  TE_GroupByOrder 
e6d0: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52    0x0004   /* GR
e6e0: 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f  OUPBY cover of O
e6f0: 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e  RDERBY */.#defin
e700: 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f  e SQLITE_FactorO
e710: 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20  utConst 0x0008  
e720: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63   /* Constant fac
e730: 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  toring */.#defin
e740: 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63  e SQLITE_Distinc
e750: 74 4f 70 74 20 20 20 20 30 78 30 30 31 30 20 20  tOpt    0x0010  
e760: 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69   /* DISTINCT usi
e770: 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ng indexes */.#d
e780: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76  efine SQLITE_Cov
e790: 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30  erIdxScan   0x00
e7a0: 32 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67  20   /* Covering
e7b0: 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a   index scans */.
e7c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
e7d0: 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78  rderByIdxJoin 0x
e7e0: 30 30 34 30 20 20 20 2f 2a 20 4f 52 44 45 52 20  0040   /* ORDER 
e7f0: 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20  BY of joins via 
e800: 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
e810: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
e820: 76 65 20 20 20 20 20 30 78 30 30 38 30 20 20 20  ve     0x0080   
e830: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
e840: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
e850: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74  fine SQLITE_Omit
e860: 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 31 30  NoopJoin   0x010
e870: 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73  0   /* Omit unus
e880: 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69  ed tables in joi
e890: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
e8a0: 4c 49 54 45 5f 43 6f 75 6e 74 4f 66 56 69 65 77  LITE_CountOfView
e8b0: 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20      0x0200   /* 
e8c0: 54 68 65 20 63 6f 75 6e 74 2d 6f 66 2d 76 69 65  The count-of-vie
e8d0: 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  w optimization *
e8e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e8f0: 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20  _CursorHints    
e900: 30 78 30 34 30 30 20 20 20 2f 2a 20 41 64 64 20  0x0400   /* Add 
e910: 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70  OP_CursorHint op
e920: 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  codes */.#define
e930: 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20   SQLITE_Stat34  
e940: 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20         0x0800   
e950: 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20  /* Use STAT3 or 
e960: 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 20 20  STAT4 data */.  
e970: 20 2f 2a 20 54 48 33 20 65 78 70 65 63 74 73 20   /* TH3 expects 
e980: 74 68 65 20 53 74 61 74 33 34 20 20 5e 5e 5e 5e  the Stat34  ^^^^
e990: 5e 5e 20 76 61 6c 75 65 20 74 6f 20 62 65 20 30  ^^ value to be 0
e9a0: 78 30 38 30 30 2e 20 20 44 6f 6e 27 74 20 63 68  x0800.  Don't ch
e9b0: 61 6e 67 65 20 69 74 20 2a 2f 0a 23 64 65 66 69  ange it */.#defi
e9c0: 6e 65 20 53 51 4c 49 54 45 5f 50 75 73 68 44 6f  ne SQLITE_PushDo
e9d0: 77 6e 20 20 20 20 20 20 20 30 78 31 30 30 30 20  wn       0x1000 
e9e0: 20 20 2f 2a 20 54 68 65 20 70 75 73 68 2d 64 6f    /* The push-do
e9f0: 77 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  wn optimization 
ea00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ea10: 45 5f 53 69 6d 70 6c 69 66 79 4a 6f 69 6e 20 20  E_SimplifyJoin  
ea20: 20 30 78 32 30 30 30 20 20 20 2f 2a 20 43 6f 6e   0x2000   /* Con
ea30: 76 65 72 74 20 4c 45 46 54 20 4a 4f 49 4e 20 74  vert LEFT JOIN t
ea40: 6f 20 4a 4f 49 4e 20 2a 2f 0a 23 64 65 66 69 6e  o JOIN */.#defin
ea50: 65 20 53 51 4c 49 54 45 5f 53 6b 69 70 53 63 61  e SQLITE_SkipSca
ea60: 6e 20 20 20 20 20 20 20 30 78 34 30 30 30 20 20  n       0x4000  
ea70: 20 2f 2a 20 53 6b 69 70 2d 73 63 61 6e 73 20 2a   /* Skip-scans *
ea80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ea90: 5f 50 72 6f 70 61 67 61 74 65 43 6f 6e 73 74 20  _PropagateConst 
eaa0: 30 78 38 30 30 30 20 20 20 2f 2a 20 54 68 65 20  0x8000   /* The 
eab0: 63 6f 6e 73 74 61 6e 74 20 70 72 6f 70 61 67 61  constant propaga
eac0: 74 69 6f 6e 20 6f 70 74 20 2a 2f 0a 23 64 65 66  tion opt */.#def
ead0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70  ine SQLITE_AllOp
eae0: 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66  ts        0xffff
eaf0: 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69     /* All optimi
eb00: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  zations */../*.*
eb10: 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73  * Macros for tes
eb20: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
eb30: 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  not optimization
eb40: 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72  s are enabled or
eb50: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64   disabled..*/.#d
eb60: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
eb70: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
eb80: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
eb90: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
eba0: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
ebb0: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
ebc0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
ebd0: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
ebe0: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a  (mask))==0)../*.
ebf0: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
ec00: 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f  f it OK to facto
ec10: 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  r constant expre
ec20: 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20  ssions into the 
ec30: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
ec40: 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75  * code. The argu
ec50: 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20  ment is a Parse 
ec60: 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63  object for the c
ec70: 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a  ode generator..*
ec80: 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46  /.#define ConstF
ec90: 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d  actorOk(P) ((P)-
eca0: 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a  >okConstFactor).
ecb0: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
ecc0: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
ecd0: 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c  qlite.magic fiel
ece0: 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  d..** The number
ecf0: 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61  s are obtained a
ed00: 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76  t random and hav
ed10: 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61  e no special mea
ed20: 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74  ning, other.** t
ed30: 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e  han being distin
ed40: 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74  ct from one anot
ed50: 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
ed60: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
ed70: 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37  N     0xa029a697
ed80: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
ed90: 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   open */.#define
eda0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
edb0: 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33  OSED   0x9f3c2d3
edc0: 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  3  /* Database i
edd0: 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66  s closed */.#def
ede0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
edf0: 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37  _SICK     0x4b77
ee00: 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61  1290  /* Error a
ee10: 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73  nd awaiting clos
ee20: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
ee30: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20  ITE_MAGIC_BUSY  
ee40: 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f     0xf03b7906  /
ee50: 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65  * Database curre
ee60: 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23  ntly in use */.#
ee70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
ee80: 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62  GIC_ERROR    0xb
ee90: 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53  5357930  /* An S
eea0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72  QLITE_MISUSE err
eeb0: 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23  or occurred */.#
eec0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
eed0: 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36  GIC_ZOMBIE   0x6
eee0: 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73  4cffc7f  /* Clos
eef0: 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74  e with last stat
ef00: 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a  ement close */..
ef10: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66  /*.** Each SQL f
ef20: 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e  unction is defin
ef30: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
ef40: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
ef50: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
ef60: 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69    For global bui
ef70: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
ef80: 28 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20 6d  (ex: substr(), m
ef90: 61 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a  ax(), count()).*
efa0: 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * a pointer to t
efb0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
efc0: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71 6c   held in the sql
efd0: 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74  ite3BuiltinFunct
efe0: 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ions object..** 
eff0: 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69  For per-connecti
f000: 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  on application-d
f010: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
f020: 2c 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  , a pointer to t
f030: 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  his.** structure
f040: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
f050: 64 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20 74  db->aHash hash t
f060: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  able..**.** The 
f070: 75 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69 73  u.pHash field is
f080: 20 75 73 65 64 20 62 79 20 74 68 65 20 67 6c 6f   used by the glo
f090: 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20  bal built-ins.  
f0a0: 54 68 65 20 75 2e 70 44 65 73 74 72 75 63 74 6f  The u.pDestructo
f0b0: 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75 73  r.** field is us
f0c0: 65 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63  ed by per-connec
f0d0: 74 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75 6e  tion app-def fun
f0e0: 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctions..*/.struc
f0f0: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 38  t FuncDef {.  i8
f100: 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
f110: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f120: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
f130: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
f140: 2f 0a 20 20 75 33 32 20 66 75 6e 63 46 6c 61 67  /.  u32 funcFlag
f150: 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65  s;       /* Some
f160: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
f170: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
f180: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
f190: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
f1a0: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
f1b0: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
f1c0: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
f1d0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
f1e0: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
f1f0: 69 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c  id (*xSFunc)(sql
f200: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
f210: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
f220: 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61  *); /* func or a
f230: 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69  gg-step */.  voi
f240: 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73  d (*xFinalize)(s
f250: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
f260: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
f270: 20 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69     /* Agg finali
f280: 7a 65 72 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  zer */.  void (*
f290: 78 56 61 6c 75 65 29 28 73 71 6c 69 74 65 33 5f  xValue)(sqlite3_
f2a0: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f2c0: 2a 20 43 75 72 72 65 6e 74 20 61 67 67 20 76 61  * Current agg va
f2d0: 6c 75 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  lue */.  void (*
f2e0: 78 49 6e 76 65 72 73 65 29 28 73 71 6c 69 74 65  xInverse)(sqlite
f2f0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
f300: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
f310: 20 2f 2a 20 69 6e 76 65 72 73 65 20 61 67 67 2d   /* inverse agg-
f320: 73 74 65 70 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  step */.  const 
f330: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f  char *zName;   /
f340: 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68  * SQL name of th
f350: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20  e function. */. 
f360: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e   union {.    Fun
f370: 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20  cDef *pHash;    
f380: 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61    /* Next with a
f390: 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
f3a0: 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73  but the same has
f3b0: 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 73  h */.    FuncDes
f3c0: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
f3d0: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
f3e0: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
f3f0: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
f400: 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
f410: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
f420: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
f430: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
f440: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
f450: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
f460: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
f470: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
f480: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
f490: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
f4a0: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
f4b0: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
f4c0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
f4d0: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
f4e0: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
f4f0: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
f500: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
f510: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
f520: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
f530: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
f540: 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20  mber of FuncDef 
f550: 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20  objects created 
f560: 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20  (either 1 or 3, 
f570: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
f580: 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74  ther.** or not t
f590: 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63  he specified enc
f5a0: 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f  oding is SQLITE_
f5b0: 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65  ANY). The FuncDe
f5c0: 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  f.pDestructor.**
f5d0: 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20   member of each 
f5e0: 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44  of the new FuncD
f5f0: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65  ef objects is se
f600: 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  t to point to th
f610: 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46  e allocated.** F
f620: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a  uncDestructor..*
f630: 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c  *.** Thereafter,
f640: 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65   when one of the
f650: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
f660: 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65   is deleted, the
f670: 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f   reference.** co
f680: 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65  unt on this obje
f690: 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65  ct is decremente
f6a0: 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68  d. When it reach
f6b0: 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75  es 0, the destru
f6c0: 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b  ctor.** is invok
f6d0: 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44  ed and the FuncD
f6e0: 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74  estructor struct
f6f0: 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74  ure freed..*/.st
f700: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
f710: 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66  tor {.  int nRef
f720: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  ;.  void (*xDest
f730: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20  roy)(void *);.  
f740: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
f750: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  .};../*.** Possi
f760: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46  ble values for F
f770: 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e  uncDef.flags.  N
f780: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45  ote that the _LE
f790: 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46  NGTH and _TYPEOF
f7a0: 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20  .** values must 
f7b0: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50  correspond to OP
f7c0: 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
f7d0: 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
f7e0: 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c  ARG.  And.** SQL
f7f0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
f800: 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  T must be the sa
f810: 6d 65 20 61 73 20 53 51 4c 49 54 45 5f 44 45 54  me as SQLITE_DET
f820: 45 52 4d 49 4e 49 53 54 49 43 2e 20 20 54 68 65  ERMINISTIC.  The
f830: 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74  re.** are assert
f840: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  () statements in
f850: 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72   the code to ver
f860: 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20  ify this..**.** 
f870: 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
f880: 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
f890: 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
f8a0: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49    SQLITE_FUNC_MI
f8b0: 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d  NMAX    ==  NC_M
f8c0: 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 3d 3d  inMaxAgg      ==
f8d0: 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a   SF_MinMaxAgg.**
f8e0: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
f8f0: 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f  _LENGTH    ==  O
f900: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a  PFLAG_LENGTHARG.
f910: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
f920: 4e 43 5f 54 59 50 45 4f 46 20 20 20 20 3d 3d 20  NC_TYPEOF    == 
f930: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
f940: 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  G.**     SQLITE_
f950: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d  FUNC_CONSTANT  =
f960: 3d 20 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  =  SQLITE_DETERM
f970: 49 4e 49 53 54 49 43 20 66 72 6f 6d 20 74 68 65  INISTIC from the
f980: 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49   API.**     SQLI
f990: 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20  TE_FUNC_ENCMASK 
f9a0: 20 20 64 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c    depends on SQL
f9b0: 49 54 45 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20  ITE_UTF* macros 
f9c0: 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64  in the API.*/.#d
f9d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f9e0: 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 30  C_ENCMASK  0x000
f9f0: 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38  3 /* SQLITE_UTF8
fa00: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
fa10: 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23   or UTF16LE */.#
fa20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
fa30: 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30  NC_LIKE     0x00
fa40: 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  04 /* Candidate 
fa50: 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
fa60: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
fa70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fa80: 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 30 38  _CASE     0x0008
fa90: 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69   /* Case-sensiti
faa0: 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e  ve LIKE-type fun
fab0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fac0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48   SQLITE_FUNC_EPH
fad0: 45 4d 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20  EM    0x0010 /* 
fae0: 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
faf0: 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
fb00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fb10: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
fb20: 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  020 /* sqlite3Ge
fb30: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
fb40: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f  ight be called*/
fb50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fb60: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78  FUNC_LENGTH   0x
fb70: 30 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0040 /* Built-in
fb80: 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69   length() functi
fb90: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
fba0: 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
fbb0: 20 20 20 30 78 30 30 38 30 20 2f 2a 20 42 75 69     0x0080 /* Bui
fbc0: 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66  lt-in typeof() f
fbd0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
fbe0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
fbf0: 4f 55 4e 54 20 20 20 20 30 78 30 31 30 30 20 2f  OUNT    0x0100 /
fc00: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74  * Built-in count
fc10: 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f  (*) aggregate */
fc20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fc30: 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78  FUNC_COALESCE 0x
fc40: 30 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0200 /* Built-in
fc50: 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69   coalesce() or i
fc60: 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69  fnull() */.#defi
fc70: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55  ne SQLITE_FUNC_U
fc80: 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30 30 20 2f  NLIKELY 0x0400 /
fc90: 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b  * Built-in unlik
fca0: 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ely() function *
fcb0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fcc0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30  _FUNC_CONSTANT 0
fcd0: 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e  x0800 /* Constan
fce0: 74 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20  t inputs give a 
fcf0: 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20  constant output 
fd00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fd10: 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20  E_FUNC_MINMAX   
fd20: 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66  0x1000 /* True f
fd30: 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78  or min() and max
fd40: 28 29 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f  () aggregates */
fd50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fd60: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78  FUNC_SLOCHNG  0x
fd70: 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68  2000 /* "Slow Ch
fd80: 61 6e 67 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e  ange". Value con
fd90: 73 74 61 6e 74 20 64 75 72 69 6e 67 20 61 0a 20  stant during a. 
fda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdc0: 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65     ** single que
fdd0: 72 79 20 2d 20 6d 69 67 68 74 20 63 68 61 6e 67  ry - might chang
fde0: 65 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23  e over time */.#
fdf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
fe00: 4e 43 5f 41 46 46 49 4e 49 54 59 20 30 78 34 30  NC_AFFINITY 0x40
fe10: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61  00 /* Built-in a
fe20: 66 66 69 6e 69 74 79 28 29 20 66 75 6e 63 74 69  ffinity() functi
fe30: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
fe40: 4c 49 54 45 5f 46 55 4e 43 5f 4f 46 46 53 45 54  LITE_FUNC_OFFSET
fe50: 20 20 20 30 78 38 30 30 30 20 2f 2a 20 42 75 69     0x8000 /* Bui
fe60: 6c 74 2d 69 6e 20 73 71 6c 69 74 65 5f 6f 66 66  lt-in sqlite_off
fe70: 73 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  set() function *
fe80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fe90: 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 20 20 30 78  _FUNC_WINDOW  0x
fea0: 31 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  10000 /* Built-i
feb0: 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75  n window-only fu
fec0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
fed0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49  e SQLITE_FUNC_WI
fee0: 4e 44 4f 57 5f 53 49 5a 45 20 20 30 78 32 30 30  NDOW_SIZE  0x200
fef0: 30 30 20 20 2f 2a 20 52 65 71 75 69 72 65 73 20  00  /* Requires 
ff00: 70 61 72 74 69 74 69 6f 6e 20 73 69 7a 65 20 61  partition size a
ff10: 73 20 61 72 67 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  s arg. */../*.**
ff20: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
ff30: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
ff40: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
ff50: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
ff60: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
ff70: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
ff80: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
ff90: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
ffa0: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
ffb0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
ffc0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
ffd0: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
ffe0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
fff0: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
10000 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
10010 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
10020 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
10030 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
10040 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
10050 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
10060 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
10070 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
10080 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
10090 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
100a0 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
100b0 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
100c0 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
100d0 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
100e0 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20  function. If.** 
100f0 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
10100 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
10110 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
10120 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
10130 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
10140 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10150 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10160 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
10170 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
10180 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
10190 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
101a0 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
101b0 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    DFUNCTION(zNam
101c0 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
101d0 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
101e0 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
101f0 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
10200 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
10210 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e  CONSTANT flag an
10220 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68  d.**     adds th
10230 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
10240 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65  OCHNG flag.  Use
10250 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d  d for date & tim
10260 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  e functions.**  
10270 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73     and functions
10280 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72   like sqlite_ver
10290 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20  sion() that can 
102a0 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20  change, but not 
102b0 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20  during.**     a 
102c0 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 20 20 54  single query.  T
102d0 68 65 20 69 41 72 67 20 69 73 20 69 67 6e 6f 72  he iArg is ignor
102e0 65 64 2e 20 20 54 68 65 20 75 73 65 72 2d 64 61  ed.  The user-da
102f0 74 61 20 69 73 20 61 6c 77 61 79 73 20 73 65 74  ta is always set
10300 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20 4e 55 4c  .**     to a NUL
10310 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20  L pointer.  The 
10320 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69 73  bNC parameter is
10330 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
10340 20 20 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61     PURE_DATE(zNa
10350 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10360 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
10370 20 20 20 55 73 65 64 20 66 6f 72 20 22 70 75 72     Used for "pur
10380 65 22 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e  e" date/time fun
10390 63 74 69 6f 6e 73 2c 20 74 68 69 73 20 6d 61 63  ctions, this mac
103a0 72 6f 20 69 73 20 6c 69 6b 65 20 44 46 55 4e 43  ro is like DFUNC
103b0 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65 78 63 65  TION.**     exce
103c0 70 74 20 74 68 61 74 20 69 74 20 64 6f 65 73 20  pt that it does 
103d0 73 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 46  set the SQLITE_F
103e0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
103f0 67 73 2e 20 20 69 41 72 67 20 69 73 0a 2a 2a 20  gs.  iArg is.** 
10400 20 20 20 20 69 67 6e 6f 72 65 64 20 61 6e 64 20      ignored and 
10410 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 66 6f  the user-data fo
10420 72 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e  r these function
10430 73 20 69 73 20 73 65 74 20 74 6f 20 61 6e 20 0a  s is set to an .
10440 2a 2a 20 20 20 20 20 61 72 62 69 74 72 61 72 79  **     arbitrary
10450 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65   non-NULL pointe
10460 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72 61  r.  The bNC para
10470 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65  meter is not use
10480 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45  d..**.**   AGGRE
10490 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
104a0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74  , iArg, bNC, xSt
104b0 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20  ep, xFinal).**  
104c0 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
104d0 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  e an aggregate f
104e0 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
104f0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  on implemented b
10500 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66  y.**     the C f
10510 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61  unctions xStep a
10520 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66  nd xFinal. The f
10530 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65  irst four parame
10540 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20  ters.**     are 
10550 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74  interpreted in t
10560 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74  he same way as t
10570 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d  he first 4 param
10580 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20  eters to.**     
10590 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a  FUNCTION()..**.*
105a0 2a 20 20 20 57 46 55 4e 43 54 49 4f 4e 28 7a 4e  *   WFUNCTION(zN
105b0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
105c0 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20   xStep, xFinal, 
105d0 78 56 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65  xValue, xInverse
105e0 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
105f0 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65   create an aggre
10600 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65  gate function de
10610 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  finition impleme
10620 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74  nted by.**     t
10630 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78  he C functions x
10640 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e  Step and xFinal.
10650 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20   The first four 
10660 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20  parameters.**   
10670 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65    are interprete
10680 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  d in the same wa
10690 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34  y as the first 4
106a0 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a   parameters to.*
106b0 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29  *     FUNCTION()
106c0 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55  ..**.**   LIKEFU
106d0 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
106e0 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20  pArg, flags).** 
106f0 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
10700 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
10710 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
10720 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
10730 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20  ame.**     that 
10740 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
10750 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d  uments and is im
10760 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63  plemented by a c
10770 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20  all to C.**     
10780 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e  function likeFun
10790 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67  c. Argument pArg
107a0 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
107b0 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a  oid *) and made.
107c0 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65  **     available
107d0 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   as the function
107e0 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
107f0 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
10800 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e  . The.**     Fun
10810 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61  cDef.flags varia
10820 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68  ble is set to th
10830 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61  e value passed a
10840 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20  s the flags.**  
10850 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f     parameter..*/
10860 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
10870 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
10880 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10890 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
108a0 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
108b0 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
108c0 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
108d0 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
108e0 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
108f0 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
10900 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
10910 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10920 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
10930 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10940 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
10950 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
10960 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
10970 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
10980 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
10990 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
109a0 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
109b0 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
109c0 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne DFUNCTION(zNa
109d0 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
109e0 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
109f0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10a00 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
10a10 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20 30 2c 20  E_UTF8, \.   0, 
10a20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
10a30 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
10a40 0a 23 64 65 66 69 6e 65 20 50 55 52 45 5f 44 41  .#define PURE_DA
10a50 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
10a60 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10a70 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10a80 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
10a90 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c  |SQLITE_UTF8|SQL
10aa0 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10ab0 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64 2a 29 26  T, \.   (void*)&
10ac0 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 30  sqlite3Config, 0
10ad0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10ae0 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10af0 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
10b00 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  2(zName, nArg, i
10b10 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c  Arg, bNC, xFunc,
10b20 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
10b30 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55   {nArg,SQLITE_FU
10b40 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
10b50 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10b60 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10b70 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a  L)|extraFlags,\.
10b80 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
10b90 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
10ba0 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
10bb0 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
10bc0 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f  fine STR_FUNCTIO
10bd0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  N(zName, nArg, p
10be0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10bf0 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10c00 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
10c10 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
10c20 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10c30 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
10c40 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
10c50 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a  0, 0, #zName, }.
10c60 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43  #define LIKEFUNC
10c70 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
10c80 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  g, flags) \.  {n
10c90 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10ca0 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
10cb0 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20  _UTF8|flags, \. 
10cc0 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30    (void *)arg, 0
10cd0 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30  , likeFunc, 0, 0
10ce0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10cf0 20 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45   }.#define AGGRE
10d00 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
10d10 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
10d20 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65  , xFinal, xValue
10d30 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10d40 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
10d50 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10d60 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
10d70 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
10d80 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
10d90 2c 78 56 61 6c 75 65 2c 30 2c 23 7a 4e 61 6d 65  ,xValue,0,#zName
10da0 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41  , {0}}.#define A
10db0 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c  GGREGATE2(zName,
10dc0 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
10dd0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65  xStep, xFinal, e
10de0 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
10df0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
10e00 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
10e10 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
10e20 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c  aFlags, \.   SQL
10e30 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
10e40 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
10e50 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30 2c 23 7a  inal,xFinal,0,#z
10e60 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 23 64 65 66  Name, {0}}..#def
10e70 69 6e 65 20 57 41 47 47 52 45 47 41 54 45 28 7a  ine WAGGREGATE(z
10e80 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
10e90 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
10ea0 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76  al, xValue, xInv
10eb0 65 72 73 65 2c 20 66 29 20 5c 0a 20 20 7b 6e 41  erse, f) \.  {nA
10ec0 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
10ed0 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
10ee0 4e 45 45 44 43 4f 4c 4c 29 7c 66 2c 20 5c 0a 20  NEEDCOLL)|f, \. 
10ef0 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
10f00 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
10f10 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65  ep,xFinal,xValue
10f20 2c 78 49 6e 76 65 72 73 65 2c 23 7a 4e 61 6d 65  ,xInverse,#zName
10f30 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  , {0}}../*.** Al
10f40 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f  l current savepo
10f50 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ints are stored 
10f60 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  in a linked list
10f70 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20   starting at.** 
10f80 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
10f90 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  nt. The first el
10fa0 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73  ement in the lis
10fb0 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65  t is the most re
10fc0 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64  cently.** opened
10fd0 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65   savepoint. Save
10fe0 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64  points are added
10ff0 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20   to the list by 
11000 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53  the vdbe.** OP_S
11010 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
11020 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
11030 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68  Savepoint {.  ch
11040 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e    /* Savepoint n
11070 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61  ame (nul-termina
11080 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ted) */.  i64 nD
11090 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
110a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
110b0 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
110c0 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e  red fk violation
110d0 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  s */.  i64 nDefe
110e0 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
110f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11100 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
11110 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61   imm fk. */.  Sa
11120 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20  vepoint *pNext; 
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11140 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65    /* Parent save
11150 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a  point (if any) *
11160 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
11170 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73  following are us
11180 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64  ed as the second
11190 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71   parameter to sq
111a0 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29  lite3Savepoint()
111b0 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20  ,.** and as the 
111c0 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
111d0 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  he OP_Savepoint 
111e0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
111f0 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
11200 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23  T_BEGIN      0.#
11210 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
11220 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64  _RELEASE    1.#d
11230 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
11240 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f  ROLLBACK   2.../
11250 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65  *.** Each SQLite
11260 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c   module (virtual
11270 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
11280 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  n) is defined by
11290 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
112a0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
112b0 20 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72   structure, stor
112c0 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
112d0 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73  3.aModule.** has
112e0 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75  h table..*/.stru
112f0 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f  ct Module {.  co
11300 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
11310 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20  le *pModule;    
11320 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70     /* Callback p
11330 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e  ointers */.  con
11340 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11360 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64    /* Name passed
11370 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
11380 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  e() */.  void *p
11390 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aux;            
113a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
113b0 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20   pAux passed to 
113c0 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
113d0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  */.  void (*xDes
113e0 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20  troy)(void *);  
113f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64            /* Mod
11400 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66  ule destructor f
11410 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62  unction */.  Tab
11420 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20  le *pEpoTab;    
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74    /* Eponymous t
11450 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f  able for this mo
11460 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  dule */.};../*.*
11470 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
11480 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
11490 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  of an SQL table 
114a0 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e  is held in an in
114b0 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
114c0 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  s structure..*/.
114d0 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a  struct Column {.
114e0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
114f0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
11500 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c  is column, \000,
11510 20 74 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a   then the type *
11520 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b  /.  Expr *pDflt;
11530 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
11540 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
11550 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
11560 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  zColl;     /* Co
11570 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11580 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20  .  If NULL, use 
11590 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20  the default */. 
115a0 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20   u8 notNull;    
115b0 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65    /* An OE_ code
115c0 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20   for handling a 
115d0 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
115e0 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  int */.  char af
115f0 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65  finity;   /* One
11600 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   of the SQLITE_A
11610 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f  FF_... values */
11620 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20  .  u8 szEst;    
11630 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
11640 20 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69   size of value i
11650 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73  n this column. s
11660 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f  izeof(INT)==1 */
11670 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20  .  u8 colFlags; 
11680 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70      /* Boolean p
11690 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20  roperties.  See 
116a0 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73  COLFLAG_ defines
116b0 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
116c0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
116d0 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c  for Column.colFl
116e0 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags:.*/.#define 
116f0 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20  COLFLAG_PRIMKEY 
11700 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f   0x0001    /* Co
11710 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
11720 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
11730 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11740 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30  AG_HIDDEN   0x00
11750 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65  02    /* A hidde
11760 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69  n column in a vi
11770 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  rtual table */.#
11780 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
11790 41 53 54 59 50 45 20 20 30 78 30 30 30 34 20 20  ASTYPE  0x0004  
117a0 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66    /* Type name f
117b0 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61  ollows column na
117c0 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  me */.#define CO
117d0 4c 46 4c 41 47 5f 55 4e 49 51 55 45 20 20 20 30  LFLAG_UNIQUE   0
117e0 78 30 30 30 38 20 20 20 20 2f 2a 20 43 6f 6c 75  x0008    /* Colu
117f0 6d 6e 20 64 65 66 20 63 6f 6e 74 61 69 6e 73 20  mn def contains 
11800 22 55 4e 49 51 55 45 22 20 6f 72 20 22 50 4b 22  "UNIQUE" or "PK"
11810 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
11820 4c 41 47 5f 53 4f 52 54 45 52 52 45 46 20 30 78  LAG_SORTERREF 0x
11830 30 30 31 30 20 20 20 2f 2a 20 55 73 65 20 73 6f  0010   /* Use so
11840 72 74 65 72 2d 72 65 66 73 20 77 69 74 68 20 74  rter-refs with t
11850 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f  his column */../
11860 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
11870 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
11880 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
11890 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
118a0 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
118b0 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
118c0 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
118d0 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
118e0 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
118f0 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
11900 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
11910 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
11920 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
11930 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
11940 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
11950 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
11960 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
11970 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
11980 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
11990 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
119a0 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
119b0 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
119c0 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
119d0 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
119e0 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
119f0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
11a00 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
11a10 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
11a20 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
11a30 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11a50 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
11a60 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
11a70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
11a80 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
11a90 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
11aa0 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
11ab0 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
11ac0 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
11ad0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
11ae0 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
11af0 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
11b00 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
11b10 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
11b20 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
11b30 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
11b40 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
11b50 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
11b60 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
11b70 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
11b80 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
11b90 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
11ba0 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
11bb0 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
11bc0 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
11bd0 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45  LITE_SO_UNDEFINE
11be0 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20  D -1 /* No sort 
11bf0 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20  order specified 
11c00 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e  */../*.** Column
11c10 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e   affinity types.
11c20 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65  .**.** These use
11c30 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e  d to have mnemon
11c40 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27  ic name like 'i'
11c50 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
11c60 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27  INTEGER and.** '
11c70 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  t' for SQLITE_AF
11c80 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20  F_TEXT.  But we 
11c90 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c  can save a littl
11ca0 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72  e space and impr
11cb0 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64  ove.** the speed
11cc0 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d   a little by num
11cd0 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bering the value
11ce0 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e  s consecutively.
11cf0 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
11d00 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
11d10 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
11d20 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68  in with 'A'.  Th
11d30 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
11d40 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
11d50 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
11d60 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
11d70 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
11d80 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
11d90 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
11da0 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
11db0 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
11dc0 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
11dd0 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
11de0 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
11df0 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
11e00 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
11e10 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
11e20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64  comparison.  And
11e30 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69   the BLOB type i
11e40 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66  s first..*/.#def
11e50 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  ine SQLITE_AFF_B
11e60 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66  LOB     'A'.#def
11e70 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  ine SQLITE_AFF_T
11e80 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66  EXT     'B'.#def
11e90 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ine SQLITE_AFF_N
11ea0 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66  UMERIC  'C'.#def
11eb0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  ine SQLITE_AFF_I
11ec0 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66  NTEGER  'D'.#def
11ed0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  ine SQLITE_AFF_R
11ee0 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65  EAL     'E'..#de
11ef0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75  fine sqlite3IsNu
11f00 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29  mericAffinity(X)
11f10 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41    ((X)>=SQLITE_A
11f20 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a  FF_NUMERIC)../*.
11f30 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
11f40 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61  F_MASK values ma
11f50 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e  sks off the sign
11f60 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20  ificant bits of 
11f70 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76  an.** affinity v
11f80 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  alue..*/.#define
11f90 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
11fa0 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a       0x47../*.**
11fb0 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
11fc0 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
11fd0 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
11fe0 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
11ff0 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
12000 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a   affinity..**.**
12010 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e   The SQLITE_NOTN
12020 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f  ULL flag is a co
12030 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c  mbination of NUL
12040 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55  LEQ and JUMPIFNU
12050 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73  LL..** It causes
12060 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20   an assert() to 
12070 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f  fire if either o
12080 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70  perand to a comp
12090 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74  arison.** operat
120a0 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20  or is NULL.  It 
120b0 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74  is added to cert
120c0 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  ain comparison o
120d0 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70  perators to.** p
120e0 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70  rove that the op
120f0 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79  erands are alway
12100 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23  s NOT NULL..*/.#
12110 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45  define SQLITE_KE
12120 45 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20  EPNULL     0x08 
12130 20 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63 74   /* Used by vect
12140 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23  or == or <> */.#
12150 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55  define SQLITE_JU
12160 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20  MPIFNULL   0x10 
12170 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74   /* jumps if eit
12180 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
12190 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
121a0 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20  QLITE_STOREP2   
121b0 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72     0x20  /* Stor
121c0 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b  e result in reg[
121d0 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20  P2] rather than 
121e0 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  jump */.#define 
121f0 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20  SQLITE_NULLEQ   
12200 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c      0x80  /* NUL
12210 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  L=NULL */.#defin
12220 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
12230 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41        0x90  /* A
12240 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61  ssert that opera
12250 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55  nds are never NU
12260 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LL */../*.** An 
12270 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
12280 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ype is created f
12290 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20  or each virtual 
122a0 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e  table present in
122b0 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
122c0 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49   schema..**.** I
122d0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  f the database s
122e0 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
122f0 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f   then there is o
12300 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
12310 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  his.** structure
12320 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
12330 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73  se connection (s
12340 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73  qlite3*) that us
12350 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a  es the shared.**
12360 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73   schema. This is
12370 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61   because each da
12380 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12390 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f  n requires its o
123a0 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73  wn unique.** ins
123b0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c  tance of the sql
123c0 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
123d0 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  e used to access
123e0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
123f0 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  le.** implementa
12400 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74  tion. sqlite3_vt
12410 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20  ab* handles can 
12420 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65  not be shared be
12430 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73  tween.** databas
12440 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65  e connections, e
12450 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73  ven when the res
12460 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  t of the in-memo
12470 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73  ry database.** s
12480 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
12490 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   as the implemen
124a0 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f  tation often sto
124b0 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  res the database
124c0 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  .** connection h
124d0 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20  andle passed to 
124e0 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e  it via the xConn
124f0 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65  ect() or xCreate
12500 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72  () method.** dur
12510 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
12520 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54  on internally. T
12530 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
12540 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d  nection handle m
12550 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73  ay.** then be us
12560 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61  ed by the virtua
12570 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
12580 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73  tation to access
12590 20 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20   real tables.** 
125a0 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
125b0 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
125c0 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
125d0 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a   of the callers.
125e0 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
125f0 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e  these accesses n
12600 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76  eed to be made v
12610 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ia the same data
12620 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
12630 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
12640 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
12650 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
12660 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
12670 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
12680 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
12690 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
126a0 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
126b0 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
126c0 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
126d0 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
126e0 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
126f0 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
12700 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
12710 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
12720 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
12730 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
12740 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
12750 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
12760 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
12770 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
12780 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
12790 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
127a0 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
127b0 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
127c0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
127d0 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
127e0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
127f0 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
12800 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
12810 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
12820 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
12830 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
12840 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
12850 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
12860 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
12870 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
12880 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
12890 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
128a0 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
128b0 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
128c0 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
128d0 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65  re not.** delete
128e0 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
128f0 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
12900 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
12910 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64  ect()ed.** immed
12920 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c  iately. Instead,
12930 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20   they are moved 
12940 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70  from the Table.p
12950 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a  VTable list to.*
12960 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64  * another linked
12970 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20   list headed by 
12980 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73  the sqlite3.pDis
12990 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f  connect member o
129a0 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  f the.** corresp
129b0 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73  onding sqlite3 s
129c0 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61  tructure. They a
129d0 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f  re then deleted/
129e0 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a  xDisconnected.**
129f0 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
12a00 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
12a10 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
12a20 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
12a30 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
12a40 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
12a50 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
12a60 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
12a70 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
12a80 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
12a90 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
12aa0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
12ab0 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
12ac0 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
12ad0 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
12ae0 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
12af0 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
12b00 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
12b10 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
12b20 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
12b30 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
12b40 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
12b50 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
12b60 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
12b70 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
12b80 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73  llocated by.** s
12b90 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
12ba0 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
12bb0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
12bc0 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
12bd0 62 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73  b as.** the firs
12be0 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73  t argument..*/.s
12bf0 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20  truct VTable {. 
12c00 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
12c10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
12c20 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12c30 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
12c40 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  h this table */.
12c50 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20    Module *pMod; 
12c60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
12c70 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65  ointer to module
12c80 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
12c90 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
12ca0 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f  b *pVtab;      /
12cb0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61  * Pointer to vta
12cc0 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20  b instance */.  
12cd0 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
12ce0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12cf0 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
12d00 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
12d10 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74  e */.  u8 bConst
12d20 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  raint;          
12d30 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
12d40 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70  traints are supp
12d50 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  orted */.  int i
12d60 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
12d70 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66       /* Depth of
12d80 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73   the SAVEPOINT s
12d90 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65  tack */.  VTable
12da0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
12db0 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
12dc0 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20  inked list (see 
12dd0 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  above) */.};../*
12de0 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66  .** The schema f
12df0 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c  or each SQL tabl
12e00 65 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65  e and view is re
12e10 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
12e20 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73  ory.** by an ins
12e30 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
12e40 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
12e50 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c  ..*/.struct Tabl
12e60 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  e {.  char *zNam
12e70 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
12e80 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
12e90 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c  or view */.  Col
12ea0 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20  umn *aCol;      
12eb0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
12ec0 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
12ed0 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
12ee0 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20  Index;       /* 
12ef0 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65  List of SQL inde
12f00 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c  xes on this tabl
12f10 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  e. */.  Select *
12f20 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
12f30 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e  NULL for tables.
12f40 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69    Points to defi
12f50 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77  nition if a view
12f60 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b  . */.  FKey *pFK
12f70 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ey;         /* L
12f80 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c  inked list of al
12f90 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69  l foreign keys i
12fa0 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
12fb0 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
12fc0 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
12fd0 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
12fe0 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
12ff0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c  olumn */.  ExprL
13000 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20  ist *pCheck;    
13010 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e  /* All CHECK con
13020 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20  straints */.    
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f     /*   ... also
13050 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20   used as column 
13060 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56  name list in a V
13070 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  IEW */.  int tnu
13080 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
13090 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65   Root BTree page
130a0 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20   for this table 
130b0 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66  */.  u32 nTabRef
130c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
130d0 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
130e0 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
130f0 0a 20 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b  .  u32 tabFlags;
13100 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
13110 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a  of TF_* values *
13120 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20  /.  i16 iPKey;  
13130 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e           /* If n
13140 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65  ot negative, use
13150 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20   aCol[iPKey] as 
13160 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  the rowid */.  i
13170 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  16 nCol;        
13180 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13190 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
131a0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   table */.  LogE
131b0 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20  st nRowLogEst;  
131c0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f   /* Estimated ro
131d0 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72  ws in table - fr
131e0 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
131f0 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
13200 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20  t szTabRow;     
13210 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
13220 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20  e of each table 
13230 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  row in bytes */.
13240 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
13250 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20  ABLE_COSTMULT.  
13260 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b  LogEst costMult;
13270 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c       /* Cost mul
13280 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e  tiplier for usin
13290 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
132a0 23 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43  #endif.  u8 keyC
132b0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
132c0 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63   What to do in c
132d0 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73  ase of uniquenes
132e0 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50  s conflict on iP
132f0 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  Key */.#ifndef S
13300 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
13310 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43  TABLE.  int addC
13320 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20  olOffset;    /* 
13330 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45  Offset in CREATE
13340 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61   TABLE stmt to a
13350 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
13360 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
13370 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
13380 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
13390 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20   nModuleArg;    
133a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
133b0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
133c0 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72  module */.  char
133d0 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20   **azModuleArg; 
133e0 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a   /* 0: module 1:
133f0 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20   schema 2: vtab 
13400 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20  name 3...: args 
13410 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54  */.  VTable *pVT
13420 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73  able;     /* Lis
13430 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65  t of VTable obje
13440 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  cts. */.#endif. 
13450 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
13460 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  er;   /* List of
13470 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64   triggers stored
13480 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20   in pSchema */. 
13490 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
134a0 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
134b0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
134c0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61  is table */.  Ta
134d0 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65  ble *pNextZombie
134e0 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68  ;  /* Next on th
134f0 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54  e Parse.pZombieT
13500 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ab list */.};../
13510 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
13520 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61  ues for Table.ta
13530 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46  bFlags..**.** TF
13540 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69  _OOOHidden appli
13550 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20  es to tables or 
13560 76 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68  view that have h
13570 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68  idden columns th
13580 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  at are.** follow
13590 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e  ed by non-hidden
135a0 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70   columns.  Examp
135b0 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52  le:  "CREATE VIR
135c0 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49  TUAL TABLE x USI
135d0 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49  NG.** vtab1(a HI
135e0 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e  DDEN, b);".  Sin
135f0 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d  ce "b" is a non-
13600 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75  hidden column bu
13610 74 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c  t "a" is hidden,
13620 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69  .** the TF_OOOHi
13630 64 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77  dden attribute w
13640 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68  ould apply in th
13650 69 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74  is case.  Such t
13660 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a  ables require.**
13670 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e   special handlin
13680 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20  g during INSERT 
13690 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23  processing..*/.#
136a0 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e  define TF_Readon
136b0 6c 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31  ly        0x0001
136c0 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79      /* Read-only
136d0 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f   system table */
136e0 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65  .#define TF_Ephe
136f0 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30  meral       0x00
13700 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
13710 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
13720 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
13730 6d 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34  maryKey   0x0004
13740 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73      /* Table has
13750 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a   a primary key *
13760 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74  /.#define TF_Aut
13770 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30  oincrement   0x0
13780 30 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  008    /* Intege
13790 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
137a0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
137b0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
137c0 53 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30  Stat1        0x0
137d0 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f  010    /* nRowLo
137e0 67 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71  gEst set from sq
137f0 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64  lite_stat1 */.#d
13800 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74  efine TF_Without
13810 52 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20  Rowid    0x0020 
13820 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20     /* No rowid. 
13830 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
13840 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  the key */.#defi
13850 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52  ne TF_NoVisibleR
13860 6f 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20  owid  0x0040    
13870 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62  /* No user-visib
13880 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d  le "rowid" colum
13890 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  n */.#define TF_
138a0 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20  OOOHidden       
138b0 30 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74  0x0080    /* Out
138c0 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e  -of-Order hidden
138d0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66   columns */.#def
138e0 69 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64  ine TF_StatsUsed
138f0 20 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20         0x0100   
13900 20 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65   /* Query planne
13910 72 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65  r decisions affe
13920 63 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20  cted by.        
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
13950 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73  Index.aiRowLogEs
13960 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64  t[] values */.#d
13970 65 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e  efine TF_HasNotN
13980 75 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20  ull      0x0200 
13990 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e     /* Contains N
139a0 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
139b0 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65  nts */../*.** Te
139c0 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
139d0 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
139e0 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
139f0 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
13a00 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
13a10 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
13a20 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
13a30 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
13a40 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
13a50 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
13a60 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
13a70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13a80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
13a90 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
13aa0 61 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d  al(X)      ((X)-
13ab0 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c  >nModuleArg).#el
13ac0 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  se.#  define IsV
13ad0 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30  irtual(X)      0
13ae0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
13af0 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
13b00 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ne if a column i
13b10 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64  s hidden.  IsOrd
13b20 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
13b30 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b  n().** only work
13b40 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61  s for non-virtua
13b50 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61  l tables (ordina
13b60 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69  ry tables and vi
13b70 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61  ews) and is.** a
13b80 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65  lways false unle
13b90 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ss SQLITE_ENABLE
13ba0 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20  _HIDDEN_COLUMNS 
13bb0 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65  is defined.  The
13bc0 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  .** IsHiddenColu
13bd0 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65  mn() macro is ge
13be0 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a  neral purpose..*
13bf0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
13c00 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
13c10 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64  EN_COLUMNS).#  d
13c20 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
13c30 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
13c40 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
13c50 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
13c60 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
13c70 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
13c80 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
13c90 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
13ca0 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
13cb0 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53  #elif !defined(S
13cc0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
13cd0 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69  ALTABLE).#  defi
13ce0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
13cf0 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
13d00 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
13d10 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
13d20 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
13d30 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
13d40 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23  umn(X) 0.#else.#
13d50 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
13d60 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
13d70 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
13d80 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
13d90 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
13da0 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20  f.../* Does the 
13db0 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77  table have a row
13dc0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61  id */.#define Ha
13dd0 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28  sRowid(X)     ((
13de0 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
13df0 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29  TF_WithoutRowid)
13e00 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73  ==0).#define Vis
13e10 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28  ibleRowid(X) (((
13e20 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
13e30 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
13e40 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  )==0)../*.** Eac
13e50 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  h foreign key co
13e60 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69  nstraint is an i
13e70 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
13e80 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
13e90 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65  re..**.** A fore
13ea0 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63  ign key is assoc
13eb0 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74  iated with two t
13ec0 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f  ables.  The "fro
13ed0 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74  m" table is.** t
13ee0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  he table that co
13ef0 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52  ntains the REFER
13f00 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61  ENCES clause tha
13f10 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f  t creates the fo
13f20 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54  reign.** key.  T
13f30 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73  he "to" table is
13f40 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
13f50 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20  is named in the 
13f60 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
13f70 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74  e..** Consider t
13f80 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a  his example:.**.
13f90 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
13fa0 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20  BLE ex1(.**     
13fb0 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d    a INTEGER PRIM
13fc0 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20  ARY KEY,.**     
13fd0 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53    b INTEGER CONS
13fe0 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52  TRAINT fk1 REFER
13ff0 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20  ENCES ex2(x).** 
14000 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72      );.**.** For
14010 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b   foreign key "fk
14020 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  1", the from-tab
14030 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20  le is "ex1" and 
14040 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
14050 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61  "ex2"..** Equiva
14060 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a  lent names:.**.*
14070 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65  *     from-table
14080 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a   == child-table.
14090 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c  **       to-tabl
140a0 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c  e == parent-tabl
140b0 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46  e.**.** Each REF
140c0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67  ERENCES clause g
140d0 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74  enerates an inst
140e0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
140f0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
14100 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61  ** which is atta
14110 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d  ched to the from
14120 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d  -table.  The to-
14130 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65  table need not e
14140 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65  xist when.** the
14150 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63   from-table is c
14160 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69  reated.  The exi
14170 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f  stence of the to
14180 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68  -table is not ch
14190 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ecked..**.** The
141a0 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72   list of all par
141b0 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54  ents for child T
141c0 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61  able X is held a
141d0 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a  t X.pFKey..**.**
141e0 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63   A list of all c
141f0 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61  hildren for a ta
14200 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69  ble named Z (whi
14210 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65  ch might not eve
14220 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68  n exist).** is h
14230 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b  eld in Schema.fk
14240 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61  eyHash with a ha
14250 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a  sh key of Z..*/.
14260 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20  struct FKey {.  
14270 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20  Table *pFrom;   
14280 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61    /* Table conta
14290 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45  ining the REFERE
142a0 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61  NCES clause (aka
142b0 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b  : Child) */.  FK
142c0 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20  ey *pNextFrom;  
142d0 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74  /* Next FKey wit
142e0 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46  h the same in pF
142f0 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74  rom. Next parent
14300 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63   of pFrom */.  c
14310 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20  har *zTo;       
14320 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c   /* Name of tabl
14330 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70  e that the key p
14340 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50  oints to (aka: P
14350 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79  arent) */.  FKey
14360 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a   *pNextTo;    /*
14370 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73   Next with the s
14380 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68  ame zTo. Next ch
14390 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20  ild of zTo. */. 
143a0 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20   FKey *pPrevTo; 
143b0 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77     /* Previous w
143c0 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
143d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
143e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
143f0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
14400 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a  this key */.  /*
14410 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39   EV: R-30323-219
14420 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66  17 */.  u8 isDef
14430 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20  erred;       /* 
14440 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
14450 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64  nt checking is d
14460 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d  eferred till COM
14470 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74  MIT */.  u8 aAct
14480 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ion[2];        /
14490 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20  * ON DELETE and 
144a0 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e  ON UPDATE action
144b0 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  s, respectively 
144c0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70  */.  Trigger *ap
144d0 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72  Trigger[2];/* Tr
144e0 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
144f0 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
14500 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
14510 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69   {      /* Mappi
14520 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  ng of columns in
14530 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e   pFrom to column
14540 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20  s in zTo */.    
14550 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20  int iFrom;      
14560 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
14570 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f  f column in pFro
14580 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  m */.    char *z
14590 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Col;           /
145a0 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e  * Name of column
145b0 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c   in zTo.  If NUL
145c0 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45  L use PRIMARY KE
145d0 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d  Y */.  } aCol[1]
145e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
145f0 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
14600 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d  ch of nCol colum
14610 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ns */.};../*.** 
14620 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
14630 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
14640 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
14650 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
14660 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
14670 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
14680 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
14690 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
146a0 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
146b0 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
146c0 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
146d0 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
146e0 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
146f0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
14700 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
14710 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
14720 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
14730 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
14740 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
14750 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
14760 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
14770 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
14780 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
14790 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
147a0 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
147b0 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
147c0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
147d0 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
147e0 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
147f0 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
14800 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
14810 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
14820 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
14830 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
14840 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
14850 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
14860 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
14870 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
14880 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
14890 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
148a0 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
148b0 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
148c0 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
148d0 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
148e0 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
148f0 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
14900 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
14910 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
14920 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
14930 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
14940 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
14950 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
14960 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
14970 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
14980 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
14990 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
149a0 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
149b0 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
149c0 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
149d0 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
149e0 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
149f0 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
14a00 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
14a10 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
14a20 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
14a30 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
14a40 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
14a50 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
14a60 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
14a70 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
14a80 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
14a90 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
14aa0 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
14ab0 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
14ac0 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
14ad0 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
14ae0 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
14af0 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
14b00 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
14b10 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
14b20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  key..**.** The f
14b30 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
14b40 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
14b50 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
14b60 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
14b70 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
14b80 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
14b90 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
14ba0 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
14bb0 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
14bc0 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
14bd0 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
14be0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
14bf0 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
14c00 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
14c10 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
14c20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
14c30 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
14c40 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
14c50 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
14c60 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
14c70 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
14c80 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
14c90 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
14ca0 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
14cb0 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
14cc0 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
14cd0 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
14ce0 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
14cf0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
14d00 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
14d10 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
14d20 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
14d30 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
14d40 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
14d50 55 70 64 61 74 65 20 20 20 36 20 20 20 2f 2a 20  Update   6   /* 
14d60 50 72 6f 63 65 73 73 20 61 73 20 61 20 44 4f 20  Process as a DO 
14d70 55 50 44 41 54 45 20 69 6e 20 61 6e 20 75 70 73  UPDATE in an ups
14d80 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ert */.#define O
14d90 45 5f 52 65 73 74 72 69 63 74 20 37 20 20 20 2f  E_Restrict 7   /
14da0 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49  * OE_Abort for I
14db0 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c  MMEDIATE, OE_Rol
14dc0 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52  lback for DEFERR
14dd0 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ED */.#define OE
14de0 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f 2a  _SetNull  8   /*
14df0 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
14e00 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55   key value to NU
14e10 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  LL */.#define OE
14e20 5f 53 65 74 44 66 6c 74 20 20 39 20 20 20 2f 2a  _SetDflt  9   /*
14e30 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
14e40 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74   key value to it
14e50 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65  s default */.#de
14e60 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20  fine OE_Cascade 
14e70 20 31 30 20 20 2f 2a 20 43 61 73 63 61 64 65 20   10  /* Cascade 
14e80 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  the changes */.#
14e90 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
14ea0 74 20 20 31 31 20 20 2f 2a 20 44 6f 20 77 68 61  t  11  /* Do wha
14eb0 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
14ec0 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
14ed0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
14ee0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
14ef0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
14f00 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
14f10 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
14f20 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
14f30 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
14f40 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
14f50 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
14f60 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e  on of the two in
14f70 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20  dex keys..**.** 
14f80 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f  Note that aSortO
14f90 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c  rder[] and aColl
14fa0 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31  [] have nField+1
14fb0 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a   slots.  There.*
14fc0 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f  * are nField slo
14fd0 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ts for the colum
14fe0 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74  ns of an index t
14ff0 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c  hen one extra sl
15000 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f  ot.** for the ro
15010 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  wid at the end..
15020 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66  */.struct KeyInf
15030 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20  o {.  u32 nRef; 
15040 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15050 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65  ber of reference
15060 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66  s to this KeyInf
15070 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38  o object */.  u8
15080 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
15090 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
150a0 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
150b0 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75  SQLITE_UTF* valu
150c0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
150d0 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e  Field;      /* N
150e0 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c  umber of key col
150f0 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65  umns in the inde
15100 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46  x */.  u16 nAllF
15110 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f  ield;      /* To
15120 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63  tal columns, inc
15130 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20  luding key plus 
15140 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69  others */.  sqli
15150 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
15160 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
15170 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
15180 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
15190 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
151a0 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
151b0 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
151c0 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
151d0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
151e0 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
151f0 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
15200 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a  ../*.** This obj
15210 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ect holds a reco
15220 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65  rd which has bee
15230 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
15240 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
15250 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20  fields, for the 
15260 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e  purposes of doin
15270 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  g a comparison..
15280 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69  **.** A record i
15290 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  s an object that
152a0 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
152b0 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20   more fields of 
152c0 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73  data..** Records
152d0 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f   are used to sto
152e0 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  re the content o
152f0 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  f a table row an
15300 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68  d to store.** th
15310 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65  e key of an inde
15320 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64  x.  A blob encod
15330 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20  ing of a record 
15340 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
15350 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
15360 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  rd opcode of the
15370 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73   VDBE and is dis
15380 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65  assembled by the
15390 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  .** OP_Column op
153a0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69  code..**.** An i
153b0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
153c0 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73  object serves as
153d0 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69   a "key" for doi
153e0 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a  ng a search on.*
153f0 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65  * an index b+tre
15400 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74  e. The goal of t
15410 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20  he search is to 
15420 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74  find the entry t
15430 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64  hat.** is closed
15440 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63   to the key desc
15450 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62  ribed by this ob
15460 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65  ject.  This obje
15470 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a  ct might hold.**
15480 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f   just a prefix o
15490 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20  f the key.  The 
154a0 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
154b0 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20   is given by.** 
154c0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
154d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
154e0 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65  nd r2 fields are
154f0 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72   the values to r
15500 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65  eturn if this ke
15510 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a  y is less than.*
15520 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  * or greater tha
15530 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62  n a key in the b
15540 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65  tree, respective
15550 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e  ly.  These are n
15560 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e  ormally.** -1 an
15570 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c  d +1 respectivel
15580 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20  y, but might be 
15590 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61  inverted to +1 a
155a0 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74  nd -1 if the b-t
155b0 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53  ree.** is in DES
155c0 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  C order..**.** T
155d0 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f  he key compariso
155e0 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75  n functions actu
155f0 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61  ally return defa
15600 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79  ult_rc when they
15610 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61   find.** an equa
15620 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  ls comparison.  
15630 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
15640 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20  e -1, 0, or +1. 
15650 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a   If there are.**
15660 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
15670 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20  s in the b-tree 
15680 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
15690 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f  y (when only loo
156a0 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66  king.** at the f
156b0 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  irst pKeyInfo->n
156c0 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65  Fields,) then de
156d0 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
156e0 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20  set to -1 to.** 
156f0 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
15700 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73   to find the las
15710 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74  t match, or +1 t
15720 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  o cause the sear
15730 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68  ch to.** find th
15740 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a  e first match..*
15750 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
15760 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
15770 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65  s will set eqSee
15780 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65  n to true if the
15790 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e  y ever.** get an
157a0 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20  d equal results 
157b0 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74  when comparing t
157c0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f  his structure to
157d0 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64   a b-tree record
157e0 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c  ..** When defaul
157f0 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61  t_rc!=0, the sea
15800 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70  rch might end up
15810 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   on the record i
15820 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65  mmediately.** be
15830 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d  fore the first m
15840 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74  atch or immediat
15850 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61  ely after the la
15860 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a  st match.  The.*
15870 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77  * eqSeen field w
15880 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65  ill indicate whe
15890 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
158a0 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74  xact match exist
158b0 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72  s in the.** b-tr
158c0 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ee..*/.struct Un
158d0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
158e0 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
158f0 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
15900 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
15910 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
15920 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
15930 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
15940 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
15950 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15960 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
15970 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
15980 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
15990 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
159a0 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
159b0 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
159c0 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
159d0 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63    /* Error detec
159e0 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
159f0 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f  mpare (CORRUPT o
15a00 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38  r NOMEM) */.  i8
15a10 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   r1;            
15a20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
15a30 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72  turn if (lhs < r
15a40 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20  hs) */.  i8 r2; 
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15a60 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
15a70 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a  if (lhs > rhs) *
15a80 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20  /.  u8 eqSeen;  
15a90 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
15aa0 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63  if an equality c
15ab0 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65  omparison has be
15ac0 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a  en seen */.};...
15ad0 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69  /*.** Each SQL i
15ae0 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e  ndex is represen
15af0 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
15b00 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
15b10 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
15b20 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
15b30 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  * The columns of
15b40 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
15b50 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65  are to be indexe
15b60 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a  d are described.
15b70 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75  ** by the aiColu
15b80 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68  mn[] field of th
15b90 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  is structure.  F
15ba0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70  or example, supp
15bb0 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74  ose.** we have t
15bc0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62  he following tab
15bd0 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a  le and index:.**
15be0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
15bf0 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c  ABLE Ex1(c1 int,
15c00 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74   c2 int, c3 text
15c10 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  );.**     CREATE
15c20 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78   INDEX Ex2 ON Ex
15c30 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20  1(c3,c1);.**.** 
15c40 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72  In the Table str
15c50 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
15c60 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62  g Ex1, nCol==3 b
15c70 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65  ecause there are
15c80 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e  .** three column
15c90 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
15ca0 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74   In the Index st
15cb0 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
15cc0 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75  ng.** Ex2, nColu
15cd0 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66  mn==2 since 2 of
15ce0 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f   the 3 columns o
15cf0 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65  f Ex1 are indexe
15d00 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  d..** The value 
15d10 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b  of aiColumn is {
15d20 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e  2, 0}.  aiColumn
15d30 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74  [0]==2 because t
15d40 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  he.** first colu
15d50 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
15d60 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
15d70 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
15d80 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
15d90 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
15da0 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
15db0 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
15dc0 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
15dd0 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
15de0 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
15df0 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
15e00 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
15e10 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
15e20 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
15e30 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
15e40 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
15e50 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
15e60 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
15e70 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
15e80 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
15e90 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
15ea0 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
15eb0 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
15ec0 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
15ed0 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
15ee0 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
15ef0 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
15f00 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
15f10 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f  solution.** algo
15f20 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20  rithm to employ 
15f30 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65  whenever an atte
15f40 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69  mpt is made to i
15f50 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71  nsert a non-uniq
15f60 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a  ue.** element..*
15f70 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69  *.** While parsi
15f80 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  ng a CREATE TABL
15f90 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45  E or CREATE INDE
15fa0 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f  X statement in o
15fb0 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72  rder to.** gener
15fc0 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61  ate VDBE code (a
15fd0 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72  s opposed to par
15fe0 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72  sing one read fr
15ff0 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73  om an sqlite_mas
16000 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20  ter.** table as 
16010 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20  part of parsing 
16020 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  an existing data
16030 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72  base schema), tr
16040 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65  ansient instance
16050 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  s.** of this str
16060 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72  ucture may be cr
16070 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63  eated. In this c
16080 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e  ase the Index.tn
16090 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a  um variable is.*
160a0 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
160b0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
160c0 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f   VDBE instructio
160d0 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  n, not a databas
160e0 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72  e page.** number
160f0 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68   (it cannot - th
16100 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
16110 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64  is not allocated
16120 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a   until the VDBE.
16130 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78  ** program is ex
16140 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e  ecuted). See con
16150 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77  vertToWithoutRow
16160 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65  idTable() for de
16170 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tails..*/.struct
16180 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20   Index {.  char 
16190 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
161a0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
161b0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
161c0 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20  16 *aiColumn;   
161d0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
161e0 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
161f0 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e  d by this index.
16200 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20    1st is 0 */.  
16210 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67  LogEst *aiRowLog
16220 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d  Est;     /* From
16230 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72   ANALYZE: Est. r
16240 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20  ows selected by 
16250 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
16260 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20   Table *pTable; 
16270 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
16280 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67   SQL table being
16290 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68   indexed */.  ch
162a0 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
162b0 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
162c0 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
162d0 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
162e0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
162f0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
16300 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
16310 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
16320 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74   with the same t
16330 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  able */.  Schema
16340 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
16350 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
16360 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64  taining this ind
16370 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  ex */.  u8 *aSor
16380 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
16390 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c   /* for each col
163a0 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c  umn: True==DESC,
163b0 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20   False==ASC */. 
163c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a   const char **az
163d0 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72  Coll;     /* Arr
163e0 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20  ay of collation 
163f0 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66  sequence names f
16400 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78  or index */.  Ex
16410 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72  pr *pPartIdxWher
16420 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20  e;     /* WHERE 
16430 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69  clause for parti
16440 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20  al indices */.  
16450 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78  ExprList *aColEx
16460 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  pr;      /* Colu
16470 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  mn expressions *
16480 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
164a0 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69  DB Page containi
164b0 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20  ng root of this 
164c0 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73  index */.  LogEs
164d0 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20  t szIdxRow;     
164e0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
164f0 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a   average row siz
16500 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  e in bytes */.  
16510 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20  u16 nKeyCol;    
16520 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16530 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
16540 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f  rming the key */
16550 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20  .  u16 nColumn; 
16560 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16570 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16580 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69   stored in the i
16590 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45  ndex */.  u8 onE
165a0 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20  rror;           
165b0 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20     /* OE_Abort, 
165c0 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65  OE_Ignore, OE_Re
165d0 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e  place, or OE_Non
165e0 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
165f0 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20  idxType:2;      
16600 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d  /* 1==UNIQUE, 2=
16610 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d  =PRIMARY KEY, 0=
16620 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f  =CREATE INDEX */
16630 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f  .  unsigned bUno
16640 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55  rdered:1;   /* U
16650 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f  se this index fo
16660 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69  r == or IN queri
16670 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73  es only */.  uns
16680 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c  igned uniqNotNul
16690 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66  l:1;  /* True if
166a0 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20   UNIQUE and NOT 
166b0 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c  NULL for all col
166c0 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  umns */.  unsign
166d0 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20  ed isResized:1; 
166e0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
166f0 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  sizeIndexObject(
16700 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  ) has been calle
16710 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  d */.  unsigned 
16720 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20  isCovering:1;   
16730 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20  /* True if this 
16740 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e  is a covering in
16750 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  dex */.  unsigne
16760 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20  d noSkipScan:1; 
16770 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20    /* Do not try 
16780 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e  to use skip-scan
16790 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e   if true */.  un
167a0 73 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a  signed hasStat1:
167b0 31 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c  1;     /* aiRowL
167c0 6f 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d  ogEst values com
167d0 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  e from sqlite_st
167e0 61 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  at1 */.  unsigne
167f0 64 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20  d bNoQuery:1;   
16800 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20    /* Do not use 
16810 74 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70  this index to op
16820 74 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a  timize queries *
16830 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
16840 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
16850 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d  STAT4.  int nSam
16860 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ple;            
16870 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c   /* Number of el
16880 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c  ements in aSampl
16890 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  e[] */.  int nSa
168a0 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20  mpleCol;        
168b0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64    /* Size of Ind
168c0 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20  exSample.anEq[] 
168d0 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74  and so on */.  t
168e0 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20  Rowcnt *aAvgEq; 
168f0 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
16900 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f  ge nEq values fo
16910 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53  r keys not in aS
16920 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78  ample */.  Index
16930 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
16940 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f      /* Samples o
16950 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
16960 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  key */.  tRowcnt
16970 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20   *aiRowEst;     
16980 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
16990 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20  hmic stat1 data 
169a0 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a  for this index *
169b0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77  /.  tRowcnt nRow
169c0 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20  Est0;        /* 
169d0 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
169e0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
169f0 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23  n the index */.#
16a00 65 6e 64 69 66 0a 20 20 42 69 74 6d 61 73 6b 20  endif.  Bitmask 
16a10 63 6f 6c 4e 6f 74 49 64 78 65 64 3b 20 20 20 20  colNotIdxed;    
16a20 20 2f 2a 20 30 20 66 6f 72 20 75 6e 69 6e 64 65   /* 0 for uninde
16a30 78 65 64 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70  xed columns in p
16a40 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  Tab */.};../*.**
16a50 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
16a60 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70  for Index.idxTyp
16a70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e.*/.#define SQL
16a80 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44  ITE_IDXTYPE_APPD
16a90 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43  EF      0   /* C
16aa0 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45  reated using CRE
16ab0 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
16ac0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
16ad0 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20  YPE_UNIQUE      
16ae0 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1   /* Implement
16af0 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  s a UNIQUE const
16b00 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
16b10 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
16b20 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20  PRIMARYKEY  2   
16b30 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52  /* Is the PRIMAR
16b40 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61  Y KEY for the ta
16b50 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72  ble */../* Retur
16b60 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
16b70 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b  X is a PRIMARY K
16b80 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  EY index */.#def
16b90 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79  ine IsPrimaryKey
16ba0 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e  Index(X)  ((X)->
16bb0 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  idxType==SQLITE_
16bc0 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
16bd0 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74  EY)../* Return t
16be0 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
16bf0 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  s a UNIQUE index
16c00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e   */.#define IsUn
16c10 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20  iqueIndex(X)    
16c20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21    ((X)->onError!
16c30 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68  =OE_None)../* Th
16c40 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e  e Index.aiColumn
16c50 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f  [] values are no
16c60 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20  rmally positive 
16c70 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a  integer.  But.**
16c80 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20   there are some 
16c90 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
16ca0 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61  that have specia
16cb0 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64  l meaning:.*/.#d
16cc0 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20  efine XN_ROWID  
16cd0 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49     (-1)     /* I
16ce0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
16cf0 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64   the rowid */.#d
16d00 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20  efine XN_EXPR   
16d10 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49     (-2)     /* I
16d20 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
16d30 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
16d40 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  /../*.** Each sa
16d50 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
16d60 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
16d70 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
16d80 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
16d90 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74  * using a struct
16da0 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
16db0 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  .  See documenta
16dc0 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20  tion at the top 
16dd0 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a  of the.** analyz
16de0 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20  e.c source file 
16df0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
16e00 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
16e10 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
16e20 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20  e {.  void *p;  
16e30 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
16e40 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65  er to sampled re
16e50 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  cord */.  int n;
16e60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
16e70 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e  ize of record in
16e80 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77   bytes */.  tRow
16e90 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a  cnt *anEq;    /*
16ea0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
16eb0 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b  rows where the k
16ec0 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73  ey equals this s
16ed0 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
16ee0 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20  nt *anLt;    /* 
16ef0 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
16f00 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73  ows where key is
16f10 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
16f20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
16f30 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a  cnt *anDLt;   /*
16f40 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
16f50 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65  distinct keys le
16f60 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
16f70 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ple */.};../*.**
16f80 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69   Each token comi
16f90 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65  ng out of the le
16fa0 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  xer is an instan
16fb0 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74  ce of.** this st
16fc0 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73  ructure.  Tokens
16fd0 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61   are also used a
16fe0 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70  s part of an exp
16ff0 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ression..**.** T
17000 68 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 20 22  he memory that "
17010 7a 22 20 70 6f 69 6e 74 73 20 74 6f 20 69 73 20  z" points to is 
17020 6f 77 6e 65 64 20 62 79 20 6f 74 68 65 72 20 6f  owned by other o
17030 62 6a 65 63 74 73 2e 20 20 54 61 6b 65 20 63 61  bjects.  Take ca
17040 72 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6f  re.** that the o
17050 77 6e 65 72 20 6f 66 20 74 68 65 20 22 7a 22 20  wner of the "z" 
17060 73 74 72 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20  string does not 
17070 64 65 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 73  deallocate the s
17080 74 72 69 6e 67 20 62 65 66 6f 72 65 0a 2a 2a 20  tring before.** 
17090 74 68 65 20 54 6f 6b 65 6e 20 67 6f 65 73 20 6f  the Token goes o
170a0 75 74 20 6f 66 20 73 63 6f 70 65 21 20 20 56 65  ut of scope!  Ve
170b0 72 79 20 6f 66 74 65 6e 2c 20 74 68 65 20 22 7a  ry often, the "z
170c0 22 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65  " points to some
170d0 20 70 6c 61 63 65 0a 2a 2a 20 69 6e 20 74 68 65   place.** in the
170e0 20 6d 69 64 64 6c 65 20 6f 66 20 74 68 65 20 50   middle of the P
170f0 61 72 73 65 2e 7a 53 71 6c 20 74 65 78 74 2e 20  arse.zSql text. 
17100 20 42 75 74 20 69 74 20 6d 69 67 68 74 20 61 6c   But it might al
17110 73 6f 20 70 6f 69 6e 74 20 74 6f 20 61 0a 2a 2a  so point to a.**
17120 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 2e 0a   static string..
17130 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
17140 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
17150 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
17160 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
17170 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
17180 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
17190 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
171a0 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
171b0 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
171c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
171d0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
171e0 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
171f0 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
17200 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
17210 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
17220 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
17230 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
17240 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
17250 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
17260 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
17270 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
17280 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
17290 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
172a0 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
172b0 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
172c0 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
172d0 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
172e0 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
172f0 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
17300 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
17310 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
17320 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
17330 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
17340 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
17350 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
17360 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
17370 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
17380 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
17390 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
173a0 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
173b0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
173c0 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
173d0 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
173e0 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
173f0 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
17400 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
17410 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
17420 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
17430 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
17440 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
17450 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
17460 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
17470 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17490 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
174a0 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
174b0 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
174c0 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
174d0 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
174e0 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
174f0 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
17500 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
17510 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
17520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17530 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
17540 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
17550 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
17560 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
17570 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
17580 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
17590 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
175a0 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
175b0 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
175c0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
175d0 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
175e0 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
175f0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
17600 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
17610 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ndex */.  int mn
17620 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20  Reg, mxReg;     
17630 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65    /* Range of re
17640 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
17650 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61  d for aCol and a
17660 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69  Func */.  ExprLi
17670 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
17680 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
17690 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
176a0 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
176b0 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
176c0 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
176d0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
176e0 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
176f0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
17700 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
17710 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
17720 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
17730 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
17740 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
17750 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
17760 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
17770 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
17780 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
17790 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
177a0 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
177b0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
177c0 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
177d0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
177e0 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
177f0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
17800 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
17810 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
17820 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
17830 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
17840 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
17850 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
17860 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
17870 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
17880 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
17890 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
178a0 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
178b0 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
178c0 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
178d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
178e0 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
178f0 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
17900 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
17910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17920 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
17930 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
17940 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
17950 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
17980 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
17990 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
179a0 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
179b0 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
179c0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
179d0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
179e0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
179f0 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
17a00 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
17a10 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
17a20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
17a30 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17a40 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
17a50 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
17a60 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
17a70 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
17a80 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
17a90 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
17aa0 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
17ab0 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
17ac0 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
17ad0 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
17ae0 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
17af0 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
17b00 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
17b10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17b20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
17b30 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
17b40 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
17b50 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
17b60 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
17b70 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
17b80 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
17b90 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
17ba0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
17bb0 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
17bc0 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
17bd0 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
17be0 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
17bf0 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
17c00 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
17c10 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
17c20 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
17c30 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
17c40 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
17c50 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
17c60 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
17c70 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
17c80 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
17c90 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
17ca0 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
17cb0 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
17cc0 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
17cd0 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
17ce0 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
17cf0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
17d00 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
17d10 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
17d20 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
17d30 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
17d40 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
17d50 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
17d60 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
17d70 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
17d80 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
17d90 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
17da0 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
17db0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
17dc0 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
17dd0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
17de0 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
17df0 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
17e00 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
17e10 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
17e20 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
17e30 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
17e40 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
17e50 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
17e60 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
17e70 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
17e80 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
17e90 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
17ea0 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
17eb0 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
17ec0 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
17ed0 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
17ee0 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
17ef0 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
17f00 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
17f10 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
17f20 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
17f30 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
17f40 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
17f50 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
17f60 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
17f70 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
17f80 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  OB,.** or TK_STR
17f90 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
17fa0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
17fb0 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
17fc0 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
17fd0 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
17fe0 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
17ff0 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
18000 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
18010 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61  ntains the.** va
18020 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
18030 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
18040 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
18050 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
18060 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
18070 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
18080 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
18090 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
180a0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
180b0 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
180c0 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
180d0 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
180e0 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
180f0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
18100 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
18110 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
18120 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
18130 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
18140 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
18150 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
18160 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
18170 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
18180 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
18190 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
181a0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
181b0 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
181c0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
181d0 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
181e0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
181f0 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
18200 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
18210 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
18220 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
18230 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
18240 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
18250 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
18260 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
18270 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
18280 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
18290 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
182a0 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  is.** valid..**.
182b0 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
182c0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
182d0 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
182e0 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
182f0 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
18300 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
18310 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
18320 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
18330 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
18340 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
18350 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
18360 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
18370 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
18380 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
18390 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
183a0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
183b0 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
183c0 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
183d0 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
183e0 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
183f0 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
18400 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
18410 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
18420 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
18430 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
18440 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
18450 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
18460 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
18470 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
18480 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
18490 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
184a0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
184b0 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
184c0 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
184d0 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68  stion mark.** ch
184e0 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
184f0 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
18500 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
18510 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
18520 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20  index.** number 
18530 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
18540 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
18550 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
18560 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
18570 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
18580 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
18590 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
185a0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
185b0 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
185c0 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
185d0 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
185e0 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
185f0 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
18600 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
18610 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
18620 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
18630 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
18640 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
18650 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
18660 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
18670 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
18680 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
18690 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
186a0 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
186b0 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
186c0 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
186d0 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
186e0 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
186f0 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
18700 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
18710 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
18720 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
18730 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
18740 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
18750 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
18760 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
18770 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
18780 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
18790 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
187a0 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
187b0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
187c0 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
187d0 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
187e0 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
187f0 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
18800 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
18810 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
18820 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
18830 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
18840 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
18850 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
18860 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
18870 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
18880 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
18890 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
188a0 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
188b0 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
188c0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
188d0 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
188e0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
188f0 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
18900 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
18910 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
18920 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
18930 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
18940 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
18950 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
18960 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
18970 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
18980 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
18990 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
189a0 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
189b0 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
189c0 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
189d0 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
189e0 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
189f0 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
18a00 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
18a10 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
18a20 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
18a30 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
18a40 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
18a50 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
18a60 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
18a70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18a80 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
18a90 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
18aa0 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
18ab0 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
18ac0 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
18ad0 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
18ae0 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
18af0 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
18b00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
18b10 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
18b20 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
18b30 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
18b40 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
18b50 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
18b60 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
18b70 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
18b80 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
18b90 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
18ba0 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
18bb0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
18bc0 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
18bd0 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
18be0 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
18bf0 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
18c00 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
18c10 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
18c20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
18c30 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
18c40 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
18c50 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
18c60 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
18c70 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
18c80 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
18c90 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
18ca0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
18cb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18cc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18cd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18ce0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
18cf0 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
18d00 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
18d10 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
18d20 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
18d30 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
18d40 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
18d50 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
18d60 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
18d70 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
18d80 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
18d90 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
18da0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
18db0 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
18dc0 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
18dd0 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
18de0 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
18df0 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
18e00 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
18e10 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
18e20 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
18e30 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
18e40 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
18e50 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
18e60 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
18e70 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
18e80 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
18e90 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
18ea0 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
18eb0 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
18ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18ed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18ee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18ef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
18f00 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
18f10 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
18f20 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
18f30 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
18f40 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
18f50 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
18f60 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
18f70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
18f80 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
18f90 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
18fa0 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
18fb0 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
18fc0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
18fd0 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
18fe0 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19000 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
19010 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
19020 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19040 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
19050 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20  134217728 times 
19060 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20  likelihood.     
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54      ** TK_SELECT
19090 3a 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f  : 1st register o
190a0 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20  f result vector 
190b0 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
190c0 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
190d0 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
190e0 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
190f0 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
19120 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
19130 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20  (always >= 1).. 
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19150 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45          ** TK_SE
19160 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  LECT_COLUMN: col
19170 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
19180 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31  t vector */.  i1
19190 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20  6 iAgg;         
191a0 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
191b0 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d  try in pAggInfo-
191c0 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75  >aCol[] or ->aFu
191d0 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52  nc[] */.  i16 iR
191e0 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20  ightJoinTable;  
191f0 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f   /* If EP_FromJo
19200 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61  in, the right ta
19210 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ble of the join 
19220 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
19230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
19240 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
19250 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
19260 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19280 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
19290 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
192a0 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192c0 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
192d0 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
192e0 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
192f0 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
19300 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
19310 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
19320 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
19330 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
19340 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
19350 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d  ble for TK_COLUM
19360 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  N expressions.  
19370 43 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20  Can be NULL.    
19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19390 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f       ** for a co
193a0 6c 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78  lumn of an index
193b0 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f   on an expressio
193c0 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
193d0 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46  ITE_OMIT_WINDOWF
193e0 55 4e 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57  UNC.  Window *pW
193f0 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  in;          /* 
19400 57 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f  Window definitio
19410 6e 20 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e  n for window fun
19420 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  ctions */.#endif
19430 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
19440 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
19450 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
19460 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
19470 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
19480 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69  efine EP_FromJoi
19490 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f  n  0x000001 /* O
194a0 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f  riginates in ON/
194b0 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
194c0 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
194d0 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20  efine EP_Agg    
194e0 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43     0x000002 /* C
194f0 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
19500 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
19510 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
19520 6e 65 20 45 50 5f 48 61 73 46 75 6e 63 20 20 20  ne EP_HasFunc   
19530 30 78 30 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74  0x000004 /* Cont
19540 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
19550 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e   functions of an
19560 79 20 6b 69 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  y kind */.#defin
19570 65 20 45 50 5f 46 69 78 65 64 43 6f 6c 20 20 30  e EP_FixedCol  0
19580 78 30 30 30 30 30 38 20 2f 2a 20 54 4b 5f 43 6f  x000008 /* TK_Co
19590 6c 75 6d 6e 20 77 69 74 68 20 61 20 6b 6e 6f 77  lumn with a know
195a0 6e 20 66 69 78 65 64 20 76 61 6c 75 65 20 2a 2f  n fixed value */
195b0 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74  .#define EP_Dist
195c0 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f  inct  0x000010 /
195d0 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
195e0 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e  tion with DISTIN
195f0 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  CT keyword */.#d
19600 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65  efine EP_VarSele
19610 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70  ct 0x000020 /* p
19620 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c  Select is correl
19630 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61  ated, not consta
19640 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
19650 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30  _DblQuoted 0x000
19660 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77  040 /* token.z w
19670 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e  as originally in
19680 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e   "..." */.#defin
19690 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30  e EP_InfixFunc 0
196a0 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20  x000080 /* True 
196b0 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e  for an infix fun
196c0 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f  ction: LIKE, GLO
196d0 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e  B, etc */.#defin
196e0 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30  e EP_Collate   0
196f0 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20  x000100 /* Tree 
19700 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f  contains a TK_CO
19710 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a  LLATE operator *
19720 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e  /.#define EP_Gen
19730 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20  eric   0x000200 
19740 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54  /* Ignore COLLAT
19750 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e  E or affinity on
19760 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64   this tree */.#d
19770 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75  efine EP_IntValu
19780 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49  e  0x000400 /* I
19790 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e  nteger value con
197a0 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c  tained in u.iVal
197b0 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
197c0 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30  _xIsSelect 0x000
197d0 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74  800 /* x.pSelect
197e0 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72   is valid (other
197f0 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29  wise x.pList is)
19800 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
19810 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30  kip      0x00100
19820 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53  0 /* COLLATE, AS
19830 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f  , or UNLIKELY */
19840 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75  .#define EP_Redu
19850 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f  ced   0x002000 /
19860 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
19870 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62  PR_REDUCEDSIZE b
19880 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
19890 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c  fine EP_TokenOnl
198a0 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78  y 0x004000 /* Ex
198b0 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54  pr struct EXPR_T
198c0 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74  OKENONLYSIZE byt
198d0 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
198e0 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20  ne EP_Static    
198f0 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64  0x008000 /* Held
19900 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f   in memory not o
19910 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c  btained from mal
19920 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  loc() */.#define
19930 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78   EP_MemToken  0x
19940 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74  010000 /* Need t
19950 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  o sqlite3DbFree(
19960 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f  ) Expr.zToken */
19970 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65  .#define EP_NoRe
19980 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f  duce  0x020000 /
19990 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50  * Cannot EXPRDUP
199a0 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70  _REDUCE this Exp
199b0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
199c0 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30  Unlikely  0x0400
199d0 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29  00 /* unlikely()
199e0 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29   or likelihood()
199f0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
19a00 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e  fine EP_ConstFun
19a10 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20  c 0x080000 /* A 
19a20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
19a30 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47  TANT or _SLOCHNG
19a40 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
19a50 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c  fine EP_CanBeNul
19a60 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61  l 0x100000 /* Ca
19a70 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74  n be null despit
19a80 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  e NOT NULL const
19a90 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
19aa0 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78   EP_Subquery  0x
19ab0 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63  200000 /* Tree c
19ac0 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c  ontains a TK_SEL
19ad0 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ECT operator */.
19ae0 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73  #define EP_Alias
19af0 20 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a       0x400000 /*
19b00 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   Is an alias for
19b10 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f   a result set co
19b20 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
19b30 45 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78 38  EP_Leaf      0x8
19b40 30 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c  00000 /* Expr.pL
19b50 65 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75  eft, .pRight, .u
19b60 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c  .pSelect all NUL
19b70 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  L */../*.** The 
19b80 45 50 5f 50 72 6f 70 61 67 61 74 65 20 6d 61 73  EP_Propagate mas
19b90 6b 20 69 73 20 61 20 73 65 74 20 6f 66 20 70 72  k is a set of pr
19ba0 6f 70 65 72 74 69 65 73 20 74 68 61 74 20 61 75  operties that au
19bb0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72 6f 70  tomatically prop
19bc0 61 67 61 74 65 0a 2a 2a 20 75 70 77 61 72 64 73  agate.** upwards
19bd0 20 69 6e 74 6f 20 70 61 72 65 6e 74 20 6e 6f 64   into parent nod
19be0 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  es..*/.#define E
19bf0 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f  P_Propagate (EP_
19c00 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75  Collate|EP_Subqu
19c10 65 72 79 7c 45 50 5f 48 61 73 46 75 6e 63 29 0a  ery|EP_HasFunc).
19c20 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
19c30 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
19c40 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
19c50 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
19c60 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
19c70 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
19c80 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
19c90 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
19ca0 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
19cb0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
19cc0 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50  sAllProperty(E,P
19cd0 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
19ce0 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
19cf0 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
19d00 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
19d10 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
19d20 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
19d30 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
19d40 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
19d50 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41  * The ExprSetVVA
19d60 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f  Property() macro
19d70 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72   is used for Ver
19d80 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
19d90 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63  ation,.** and Ac
19da0 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79  creditation only
19db0 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65  .  It works like
19dc0 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
19dd0 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a  () during VVA.**
19de0 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69   processes but i
19df0 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65  s a no-op for de
19e00 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  livery..*/.#ifde
19e10 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
19e20 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
19e30 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  VAProperty(E,P) 
19e40 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
19e50 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
19e60 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
19e70 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ty(E,P).#endif..
19e80 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
19e90 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
19ea0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
19eb0 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d  quired by a norm
19ec0 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63  al Expr.** struc
19ed0 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
19ee0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
19ef0 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
19f00 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20  n Expr.flags.** 
19f10 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75  and an Expr stru
19f20 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54  ct with the EP_T
19f30 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65  okenOnly flag se
19f40 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  t..*/.#define EX
19f50 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20  PR_FULLSIZE     
19f60 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70        sizeof(Exp
19f70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r)           /* 
19f80 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65  Full size */.#de
19f90 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45  fine EXPR_REDUCE
19fa0 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66  DSIZE        off
19fb0 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c  setof(Expr,iTabl
19fc0 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65  e)  /* Common fe
19fd0 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e  atures */.#defin
19fe0 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  e EXPR_TOKENONLY
19ff0 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74  SIZE      offset
1a000 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20  of(Expr,pLeft)  
1a010 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72   /* Fewer featur
1a020 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  es */../*.** Fla
1a030 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  gs passed to the
1a040 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
1a050 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20  ) function. See 
1a060 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
1a070 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  nt.** above sqli
1a080 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
1a090 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
1a0a0 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
1a0b0 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
1a0c0 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
1a0d0 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
1a0e0 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
1a0f0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
1a100 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
1a110 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
1a120 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
1a130 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
1a140 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
1a150 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
1a160 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
1a170 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
1a180 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
1a190 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
1a1a0 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
1a1b0 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
1a1c0 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
1a1d0 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
1a1e0 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
1a1f0 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
1a200 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
1a210 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
1a220 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
1a230 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
1a240 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
1a250 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
1a260 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
1a270 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
1a280 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
1a290 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
1a2a0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
1a2b0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
1a2c0 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
1a2d0 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
1a2e0 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
1a2f0 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
1a300 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
1a310 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
1a320 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
1a330 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
1a340 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
1a350 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
1a360 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
1a370 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
1a380 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
1a390 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
1a3a0 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
1a3b0 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
1a3c0 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
1a3d0 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
1a3e0 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
1a3f0 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
1a400 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
1a410 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
1a420 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
1a430 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
1a440 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
1a450 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
1a460 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
1a470 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a480 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
1a490 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
1a4a0 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
1a4b0 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20  t_item { /* For 
1a4c0 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
1a4d0 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  in the list */. 
1a4e0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
1a4f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1a500 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
1a510 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
1a520 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
1a530 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
1a540 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61  /* Token associa
1a550 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78  ted with this ex
1a560 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
1a570 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
1a580 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
1a590 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
1a5a0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
1a5b0 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20    u8 sortOrder; 
1a5c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66            /* 1 f
1a5d0 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72  or DESC or 0 for
1a5e0 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69   ASC */.    unsi
1a5f0 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20  gned done :1;   
1a600 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f      /* A flag to
1a610 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70   indicate when p
1a620 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e  rocessing is fin
1a630 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  ished */.    uns
1a640 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62  igned bSpanIsTab
1a650 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f   :1; /* zSpan ho
1a660 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c  lds DB.TABLE.COL
1a670 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  UMN */.    unsig
1a680 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b  ned reusable :1;
1a690 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65     /* Constant e
1a6a0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75  xpression is reu
1a6b0 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 73  sable */.    uns
1a6c0 69 67 6e 65 64 20 62 53 6f 72 74 65 72 52 65 66  igned bSorterRef
1a6d0 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20 65 76   :1; /* Defer ev
1a6e0 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c 20 61  aluation until a
1a6f0 66 74 65 72 20 73 6f 72 74 69 6e 67 20 2a 2f 0a  fter sorting */.
1a700 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
1a710 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
1a720 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43     u16 iOrderByC
1a730 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20  ol;      /* For 
1a740 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e  ORDER BY, column
1a750 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c   number in resul
1a760 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20  t set */.       
1a770 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20   u16 iAlias;    
1a780 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1a790 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61  into Parse.aAlia
1a7a0 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f  s[] for zName */
1a7b0 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20  .      } x;.    
1a7c0 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72    int iConstExpr
1a7d0 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67  Reg;      /* Reg
1a7e0 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45  ister in which E
1a7f0 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63  xpr value is cac
1a800 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a  hed */.    } u;.
1a810 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
1a820 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1a830 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63 68 20  e slot for each 
1a840 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
1a850 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
1a860 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1a870 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1a880 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d  e can hold a sim
1a890 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e  ple list of iden
1a8a0 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68  tifiers,.** such
1a8b0 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c   as the list "a,
1a8c0 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c  b,c" in the foll
1a8d0 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73  owing statements
1a8e0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53  :.**.**      INS
1a8f0 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
1a900 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a  ) VALUES ...;.**
1a910 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44        CREATE IND
1a920 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c  EX idx ON t(a,b,
1a930 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  c);.**      CREA
1a940 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20  TE TRIGGER trig 
1a950 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e  BEFORE UPDATE ON
1a960 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a   t(a,b,c) ...;.*
1a970 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e  *.** The IdList.
1a980 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75  a.idx field is u
1a990 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c  sed when the IdL
1a9a0 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  ist represents t
1a9b0 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f  he list of.** co
1a9c0 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72  lumn names after
1a9d0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e   a table name in
1a9e0 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
1a9f0 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74  ment.  In the st
1aa00 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20  atement.**.**   
1aa10 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
1aa20 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a  a,b,c) ....**.**
1aa30 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b   If "a" is the k
1aa40 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61  -th column of ta
1aa50 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64  ble "t", then Id
1aa60 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b  List.a[0].idx==k
1aa70 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69  ..*/.struct IdLi
1aa80 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64  st {.  struct Id
1aa90 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
1aaa0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1aab0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
1aac0 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20   identifier */. 
1aad0 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20     int idx;     
1aae0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
1aaf0 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c   some Table.aCol
1ab00 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e  [] of a column n
1ab10 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  amed zName */.  
1ab20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b  } *a;.  int nId;
1ab30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ab40 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  er of identifier
1ab50 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
1ab60 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
1ab70 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1ab80 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65  re describes the
1ab90 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
1aba0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1abb0 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c  nt..** Each tabl
1abc0 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e  e or subquery in
1abd0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1abe0 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65   is a separate e
1abf0 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65  lement of.** the
1ac00 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72   SrcList.a[] arr
1ac10 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74  ay..**.** With t
1ac20 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d  he addition of m
1ac30 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
1ac40 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f   support, the fo
1ac50 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1ac60 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65  e.** can also be
1ac70 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62   used to describ
1ac80 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  e a particular t
1ac90 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65  able such as the
1aca0 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69   table that.** i
1acb0 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e  s modified by an
1acc0 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c   INSERT, DELETE,
1acd0 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
1ace0 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61  ment.  In standa
1acf0 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20  rd SQL,.** such 
1ad00 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20  a table must be 
1ad10 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49  a simple name: I
1ad20 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74  D.  But in SQLit
1ad30 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e  e, the table can
1ad40 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74  .** now be ident
1ad50 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62  ified by a datab
1ad60 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c  ase name, a dot,
1ad70 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
1ad80 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a  name: ID.ID..**.
1ad90 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20  ** The jointype 
1ada0 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69  starts out showi
1adb0 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65  ng the join type
1adc0 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72   between the cur
1add0 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e  rent table.** an
1ade0 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65  d the next table
1adf0 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54   on the list.  T
1ae00 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73  he parser builds
1ae10 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77   the list this w
1ae20 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74  ay..** But sqlit
1ae30 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f  e3SrcListShiftJo
1ae40 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73  inType() later s
1ae50 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79  hifts the jointy
1ae60 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68  pes so that each
1ae70 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70  .** jointype exp
1ae80 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20  resses the join 
1ae90 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c  between the tabl
1aea0 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
1aeb0 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  us table..**.** 
1aec0 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66  In the colUsed f
1aed0 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f  ield, the high-o
1aee0 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33  rder bit (bit 63
1aef0 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  ) is set if the 
1af00 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e  table.** contain
1af10 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63  s more than 63 c
1af20 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36  olumns and the 6
1af30 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f  4-th or later co
1af40 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  lumn is used..*/
1af50 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20  .struct SrcList 
1af60 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20  {.  int nSrc;   
1af70 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1af80 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  f tables or subq
1af90 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52  ueries in the FR
1afa0 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  OM clause */.  u
1afb0 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  32 nAlloc;      
1afc0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
1afd0 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69  ries allocated i
1afe0 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20  n a[] below */. 
1aff0 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
1b000 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d  item {.    Schem
1b010 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20  a *pSchema;  /* 
1b020 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20  Schema to which 
1b030 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78  this item is fix
1b040 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
1b050 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e  zDatabase;  /* N
1b060 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
1b070 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62  holding this tab
1b080 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
1b090 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
1b0a0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1b0b0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41   */.    char *zA
1b0c0 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65  lias;     /* The
1b0d0 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22   "B" part of a "
1b0e0 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20  A AS B" phrase. 
1b0f0 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41   zName is the "A
1b100 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  " */.    Table *
1b110 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e  pTab;      /* An
1b120 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65   SQL table corre
1b130 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d  sponding to zNam
1b140 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  e */.    Select 
1b150 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20  *pSelect;  /* A 
1b160 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1b170 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f   used in place o
1b180 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a  f a table name *
1b190 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69  /.    int addrFi
1b1a0 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65  llSub;  /* Addre
1b1b0 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65  ss of subroutine
1b1c0 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73   to manifest a s
1b1d0 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69  ubquery */.    i
1b1e0 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20  nt regReturn;   
1b1f0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1b200 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72  ding return addr
1b210 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53  ess of addrFillS
1b220 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ub */.    int re
1b230 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52  gResult;    /* R
1b240 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
1b250 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f   results of a co
1b260 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20  -routine */.    
1b270 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75  struct {.      u
1b280 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20  8 jointype;     
1b290 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e   /* Type of join
1b2a0 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 74 61   between this ta
1b2b0 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
1b2c0 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ious */.      un
1b2d0 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65  signed notIndexe
1b2e0 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  d :1;    /* True
1b2f0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e   if there is a N
1b300 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
1b310 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
1b320 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42 79 20  ned isIndexedBy 
1b330 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  :1;   /* True if
1b340 20 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44   there is an IND
1b350 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a  EXED BY clause *
1b360 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1b370 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20   isTabFunc :1;  
1b380 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61     /* True if ta
1b390 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74  ble-valued-funct
1b3a0 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20  ion syntax */.  
1b3b0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43      unsigned isC
1b3c0 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f  orrelated :1;  /
1b3d0 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75  * True if sub-qu
1b3e0 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ery is correlate
1b3f0 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  d */.      unsig
1b400 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65  ned viaCoroutine
1b410 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65   :1;  /* Impleme
1b420 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75  nted as a co-rou
1b430 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  tine */.      un
1b440 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69  signed isRecursi
1b450 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ve :1;   /* True
1b460 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72   for recursive r
1b470 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48  eference in WITH
1b480 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 20 20   */.    } fg;.  
1b490 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20    int iCursor;  
1b4a0 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
1b4b0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  cursor number us
1b4c0 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69  ed to access thi
1b4d0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45  s table */.    E
1b4e0 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20  xpr *pOn;       
1b4f0 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73   /* The ON claus
1b500 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
1b510 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e     IdList *pUsin
1b520 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e  g;   /* The USIN
1b530 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
1b540 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73  in */.    Bitmas
1b550 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42  k colUsed;  /* B
1b560 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20  it N (1<<N) set 
1b570 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70  if column N of p
1b580 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20  Tab is used */. 
1b590 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20     union {.     
1b5a0 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42   char *zIndexedB
1b5b0 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66  y;    /* Identif
1b5c0 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45  ier from "INDEXE
1b5d0 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63  D BY <zIndex>" c
1b5e0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45  lause */.      E
1b5f0 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72  xprList *pFuncAr
1b600 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73  g;  /* Arguments
1b610 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   to table-valued
1b620 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20  -function */.   
1b630 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78   } u1;.    Index
1b640 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20   *pIBIndex;  /* 
1b650 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
1b660 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1b670 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a   u1.zIndexedBy *
1b680 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  /.  } a[1];     
1b690 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
1b6a0 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64  ntry for each id
1b6b0 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20  entifier on the 
1b6c0 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
1b6d0 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75  * Permitted valu
1b6e0 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73  es of the SrcLis
1b6f0 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65  t.a.jointype fie
1b700 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  ld.*/.#define JT
1b710 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30  _INNER     0x000
1b720 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64  1    /* Any kind
1b730 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f   of inner or cro
1b740 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  ss join */.#defi
1b750 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20  ne JT_CROSS     
1b760 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70  0x0002    /* Exp
1b770 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65  licit use of the
1b780 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a   CROSS keyword *
1b790 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54  /.#define JT_NAT
1b7a0 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20  URAL   0x0004   
1b7b0 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22   /* True for a "
1b7c0 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f  natural" join */
1b7d0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54  .#define JT_LEFT
1b7e0 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20        0x0008    
1b7f0 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f  /* Left outer jo
1b800 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1b810 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31  _RIGHT     0x001
1b820 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75  0    /* Right ou
1b830 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
1b840 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20  ine JT_OUTER    
1b850 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68   0x0020    /* Th
1b860 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72  e "OUTER" keywor
1b870 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  d is present */.
1b880 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52  #define JT_ERROR
1b890 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f       0x0040    /
1b8a0 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73  * unknown or uns
1b8b0 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79  upported join ty
1b8c0 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c  pe */.../*.** Fl
1b8d0 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20  ags appropriate 
1b8e0 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61  for the wctrlFla
1b8f0 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  gs parameter of 
1b900 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
1b910 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57  n().** and the W
1b920 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c  hereInfo.wctrlFl
1b930 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a  ags member..**.*
1b940 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1b950 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
1b960 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
1b970 20 20 20 20 57 48 45 52 45 5f 55 53 45 5f 4c 49      WHERE_USE_LI
1b980 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69 78 65 64  MIT  == SF_Fixed
1b990 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65  Limit.*/.#define
1b9a0 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e   WHERE_ORDERBY_N
1b9b0 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f  ORMAL   0x0000 /
1b9c0 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69  * No-op */.#defi
1b9d0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1b9e0 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31  _MIN      0x0001
1b9f0 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
1ba00 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28  cessing for min(
1ba10 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
1ba20 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1ba30 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20  MAX      0x0002 
1ba40 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
1ba50 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29  essing for max()
1ba60 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1ba70 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44   WHERE_ONEPASS_D
1ba80 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f  ESIRED  0x0004 /
1ba90 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65  * Want to do one
1baa0 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c  -pass UPDATE/DEL
1bab0 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ETE */.#define W
1bac0 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c  HERE_ONEPASS_MUL
1bad0 54 49 52 4f 57 20 30 78 30 30 30 38 20 2f 2a 20  TIROW 0x0008 /* 
1bae0 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69  ONEPASS is ok wi
1baf0 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  th multiple rows
1bb00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1bb10 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
1bb20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20     0x0010 /* Ok 
1bb30 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
1bb40 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
1bb50 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1bb60 4f 52 5f 53 55 42 43 4c 41 55 53 45 20 20 20 20  OR_SUBCLAUSE    
1bb70 20 30 78 30 30 32 30 20 2f 2a 20 50 72 6f 63 65   0x0020 /* Proce
1bb80 73 73 69 6e 67 20 61 20 73 75 62 2d 57 48 45 52  ssing a sub-WHER
1bb90 45 20 61 73 20 70 61 72 74 20 6f 66 0a 20 20 20  E as part of.   
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbc0 20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74     ** the OR opt
1bbd0 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64  imization  */.#d
1bbe0 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55  efine WHERE_GROU
1bbf0 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30  PBY          0x0
1bc00 30 34 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20  040 /* pOrderBy 
1bc10 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55  is really a GROU
1bc20 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
1bc30 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59  WHERE_DISTINCTBY
1bc40 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a         0x0080 /*
1bc50 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61   pOrderby is rea
1bc60 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63  lly a DISTINCT c
1bc70 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1bc80 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54   WHERE_WANT_DIST
1bc90 49 4e 43 54 20 20 20 20 30 78 30 31 30 30 20 2f  INCT    0x0100 /
1bca0 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65  * All output nee
1bcb0 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63  ds to be distinc
1bcc0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
1bcd0 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20  RE_SORTBYGROUP  
1bce0 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 53 75      0x0200 /* Su
1bcf0 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65  pport sqlite3Whe
1bd00 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a  reIsSorted() */.
1bd10 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45  #define WHERE_SE
1bd20 45 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30  EK_TABLE       0
1bd30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20  x0400 /* Do not 
1bd40 64 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d  defer seeks on m
1bd50 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ain table */.#de
1bd60 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1bd70 42 59 5f 4c 49 4d 49 54 20 20 20 20 30 78 30 38  BY_LIMIT    0x08
1bd80 30 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49  00 /* ORDERBY+LI
1bd90 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72  MIT on the inner
1bda0 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65   loop */.#define
1bdb0 20 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51   WHERE_SEEK_UNIQ
1bdc0 5f 54 41 42 4c 45 20 20 30 78 31 30 30 30 20 2f  _TABLE  0x1000 /
1bdd0 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73  * Do not defer s
1bde0 65 65 6b 73 20 69 66 20 75 6e 69 71 75 65 20 2a  eeks if unique *
1bdf0 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1be00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
1be10 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63   0x2000    not c
1be20 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
1be30 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55  .#define WHERE_U
1be40 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20  SE_LIMIT        
1be50 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68  0x4000 /* Use th
1be60 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20  e LIMIT in cost 
1be70 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20  estimates */.   
1be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be90 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30       /*     0x80
1bea0 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e  00    not curren
1beb0 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20  tly used */../* 
1bec0 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
1bed0 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
1bee0 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
1bef0 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  t().*/.#define W
1bf00 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f  HERE_DISTINCT_NO
1bf10 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49  OP      0  /* DI
1bf20 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e  STINCT keyword n
1bf30 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ot used */.#defi
1bf40 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1bf50 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f  T_UNIQUE    1  /
1bf60 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20  * No duplicates 
1bf70 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1bf80 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45  _DISTINCT_ORDERE
1bf90 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75  D   2  /* All du
1bfa0 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a  plicates are adj
1bfb0 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  acent */.#define
1bfc0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1bfd0 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20  UNORDERED 3  /* 
1bfe0 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73  Duplicates are s
1bff0 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  cattered */../*.
1c000 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
1c010 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
1c020 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
1c030 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
1c040 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
1c050 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
1c060 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
1c070 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
1c080 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
1c090 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
1c0a0 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
1c0b0 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
1c0c0 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
1c0d0 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
1c0e0 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
1c0f0 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
1c100 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1c110 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
1c120 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
1c130 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
1c140 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
1c150 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
1c160 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
1c170 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
1c180 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
1c190 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
1c1a0 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
1c1b0 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
1c1c0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
1c1d0 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
1c1e0 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
1c1f0 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
1c200 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74  -most.** context
1c210 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72   is searched fir
1c220 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68  st.  If no match
1c230 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
1c240 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e  ext outer.** con
1c250 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e  text is checked.
1c260 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74    If there is st
1c270 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68  ill no match, th
1c280 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a  e next context.*
1c290 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54  * is checked.  T
1c2a0 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74  his process cont
1c2b0 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68  inues until eith
1c2c0 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  er a match is fo
1c2d0 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f  und.** or all co
1c2e0 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b  ntexts are check
1c2f0 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20  .  When a match 
1c300 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52  is found, the nR
1c310 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20  ef member of.** 
1c320 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74  the context cont
1c330 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68  aining the match
1c340 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
1c350 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71  .**.** Each subq
1c360 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20  uery gets a new 
1c370 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68  NameContext.  Th
1c380 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f  e pNext field po
1c390 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e  ints to the.** N
1c3a0 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68  ameContext in th
1c3b0 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20  e parent query. 
1c3c0 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73   Thus the proces
1c3d0 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68  s of scanning th
1c3e0 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
1c3f0 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   list correspond
1c400 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74  s to searching t
1c410 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76  hrough successiv
1c420 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62  ely outer.** sub
1c430 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20  queries looking 
1c440 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a  for a match..*/.
1c450 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
1c460 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  xt {.  Parse *pP
1c470 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  arse;       /* T
1c480 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53  he parser */.  S
1c490 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
1c4a0 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  ;   /* One or mo
1c4b0 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74  re tables used t
1c4c0 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20  o resolve names 
1c4d0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
1c4e0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
1c4f0 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  t;    /* Optiona
1c500 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74  l list of result
1c510 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  -set columns */.
1c520 20 20 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67      AggInfo *pAg
1c530 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f  gInfo;   /* Info
1c540 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67  rmation about ag
1c550 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73  gregates at this
1c560 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 55 70   level */.    Up
1c570 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20 20  sert *pUpsert;  
1c580 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43     /* ON CONFLIC
1c590 54 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61  T clause informa
1c5a0 74 69 6f 6e 20 66 72 6f 6d 20 61 6e 20 75 70 73  tion from an ups
1c5b0 65 72 74 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a  ert */.  } uNC;.
1c5c0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
1c5d0 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
1c5e0 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
1c5f0 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
1c600 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
1c610 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
1c620 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
1c630 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
1c640 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
1c650 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1c660 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c670 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
1c680 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
1c690 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
1c6a0 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20    u16 ncFlags;  
1c6b0 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
1c6c0 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
1c6d0 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
1c6e0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 57 69  */.  Select *pWi
1c6f0 6e 53 65 6c 65 63 74 3b 20 20 2f 2a 20 53 45 4c  nSelect;  /* SEL
1c700 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 66 6f  ECT statement fo
1c710 72 20 61 6e 79 20 77 69 6e 64 6f 77 20 66 75 6e  r any window fun
1c720 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ctions */.};../*
1c730 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
1c740 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43  es for the NameC
1c750 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20  ontext, ncFlags 
1c760 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  field..**.** Val
1c770 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
1c780 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20  all checked via 
1c790 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
1c7a0 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d   NC_HasAgg    ==
1c7b0 20 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20   SF_HasAgg.**   
1c7c0 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d   NC_MinMaxAgg ==
1c7d0 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d   SF_MinMaxAgg ==
1c7e0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
1c7f0 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e  MAX.**.*/.#defin
1c800 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
1c810 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67  x0001  /* Aggreg
1c820 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
1c830 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
1c840 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72  /.#define NC_Par
1c850 74 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f  tIdx   0x0002  /
1c860 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1c870 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e  ing a partial in
1c880 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65  dex WHERE */.#de
1c890 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20  fine NC_IsCheck 
1c8a0 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75    0x0004  /* Tru
1c8b0 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e  e if resolving n
1c8c0 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20  ames in a CHECK 
1c8d0 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
1c8e0 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75  efine NC_InAggFu
1c8f0 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72  nc 0x0008  /* Tr
1c900 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20  ue if analyzing 
1c910 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20  arguments to an 
1c920 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  agg func */.#def
1c930 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20  ine NC_HasAgg   
1c940 20 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20   0x0010  /* One 
1c950 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
1c960 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  e functions seen
1c970 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1c980 64 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20  dxExpr   0x0020 
1c990 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1c9a0 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66  lving columns of
1c9b0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
1c9c0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53  .#define NC_VarS
1c9d0 65 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a  elect 0x0040  /*
1c9e0 20 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75   A correlated su
1c9f0 62 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20  bquery has been 
1ca00 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1ca10 4e 43 5f 55 45 4c 69 73 74 20 20 20 20 30 78 30  NC_UEList    0x0
1ca20 30 38 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  080  /* True if 
1ca30 75 4e 43 2e 70 45 4c 69 73 74 20 69 73 20 75 73  uNC.pEList is us
1ca40 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1ca50 5f 55 41 67 67 49 6e 66 6f 20 20 30 78 30 31 30  _UAggInfo  0x010
1ca60 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e  0  /* True if uN
1ca70 43 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 75 73  C.pAggInfo is us
1ca80 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1ca90 5f 55 55 70 73 65 72 74 20 20 20 30 78 30 32 30  _UUpsert   0x020
1caa0 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e  0  /* True if uN
1cab0 43 2e 70 55 70 73 65 72 74 20 69 73 20 75 73 65  C.pUpsert is use
1cac0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1cad0 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30  MinMaxAgg 0x1000
1cae0 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67    /* min/max agg
1caf0 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53  regates seen.  S
1cb00 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f  ee note above */
1cb10 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70  .#define NC_Comp
1cb20 6c 65 78 20 20 20 30 78 32 30 30 30 20 20 2f 2a  lex   0x2000  /*
1cb30 20 54 72 75 65 20 69 66 20 61 20 66 75 6e 63 74   True if a funct
1cb40 69 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20  ion or subquery 
1cb50 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1cb60 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20 20 30 78 34  NC_AllowWin  0x4
1cb70 30 30 30 20 20 2f 2a 20 57 69 6e 64 6f 77 20 66  000  /* Window f
1cb80 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c  unctions are all
1cb90 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 0a 2f 2a  owed here */../*
1cba0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1cbb0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1cbc0 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
1cbd0 73 20 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43 4f  s a single ON CO
1cbe0 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73 65  NFLICT.** clause
1cbf0 20 69 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a 2a   in an upsert..*
1cc00 2a 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74  *.** The pUpsert
1cc10 54 61 72 67 65 74 20 66 69 65 6c 64 20 69 73 20  Target field is 
1cc20 6f 6e 6c 79 20 73 65 74 20 69 66 20 74 68 65 20  only set if the 
1cc30 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1cc40 73 65 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20 63  se includes.** c
1cc50 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63  onflict-target c
1cc60 6c 61 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e 20  lause.  (In "ON 
1cc70 43 4f 4e 46 4c 49 43 54 28 61 2c 62 29 22 20 74  CONFLICT(a,b)" t
1cc80 68 65 20 22 28 61 2c 62 29 22 20 69 73 20 74 68  he "(a,b)" is th
1cc90 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61  e.** conflict-ta
1cca0 72 67 65 74 20 63 6c 61 75 73 65 2e 29 20 20 54  rget clause.)  T
1ccb0 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65 74  he pUpsertTarget
1ccc0 57 68 65 72 65 20 69 73 20 74 68 65 20 6f 70 74  Where is the opt
1ccd0 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20 63  ional.** WHERE c
1cce0 6c 61 75 73 65 20 75 73 65 64 20 74 6f 20 69 64  lause used to id
1ccf0 65 6e 74 69 66 79 20 70 61 72 74 69 61 6c 20 75  entify partial u
1cd00 6e 69 71 75 65 20 69 6e 64 65 78 65 73 2e 0a 2a  nique indexes..*
1cd10 2a 0a 2a 2a 20 70 55 70 73 65 72 74 53 65 74 20  *.** pUpsertSet 
1cd20 69 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63  is the list of c
1cd30 6f 6c 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d 73  olumn=expr terms
1cd40 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
1cd50 74 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68  tatement. .** Th
1cd60 65 20 70 55 70 73 65 72 74 53 65 74 20 66 69 65  e pUpsertSet fie
1cd70 6c 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 61  ld is NULL for a
1cd80 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f 20   ON CONFLICT DO 
1cd90 4e 4f 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a 2a  NOTHING.  The.**
1cda0 20 70 55 70 73 65 72 74 57 68 65 72 65 20 69 73   pUpsertWhere is
1cdb0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
1cdc0 65 20 66 6f 72 20 74 68 65 20 55 50 44 41 54 45  e for the UPDATE
1cdd0 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66 20   and is NULL if 
1cde0 74 68 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61  the.** WHERE cla
1cdf0 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a  use is omitted..
1ce00 2a 2f 0a 73 74 72 75 63 74 20 55 70 73 65 72 74  */.struct Upsert
1ce10 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
1ce20 55 70 73 65 72 74 54 61 72 67 65 74 3b 20 20 2f  UpsertTarget;  /
1ce30 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63 72  * Optional descr
1ce40 69 70 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69  iption of confli
1ce50 63 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  cting index */. 
1ce60 20 45 78 70 72 20 2a 70 55 70 73 65 72 74 54 61   Expr *pUpsertTa
1ce70 72 67 65 74 57 68 65 72 65 3b 20 2f 2a 20 57 48  rgetWhere; /* WH
1ce80 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70  ERE clause for p
1ce90 61 72 74 69 61 6c 20 69 6e 64 65 78 20 74 61 72  artial index tar
1cea0 67 65 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  gets */.  ExprLi
1ceb0 73 74 20 2a 70 55 70 73 65 72 74 53 65 74 3b 20  st *pUpsertSet; 
1cec0 20 20 20 20 2f 2a 20 54 68 65 20 53 45 54 20 63      /* The SET c
1ced0 6c 61 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f 4e  lause from an ON
1cee0 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45   CONFLICT UPDATE
1cef0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73   */.  Expr *pUps
1cf00 65 72 74 57 68 65 72 65 3b 20 20 20 20 20 20 20  ertWhere;       
1cf10 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
1cf20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  for the ON CONFL
1cf30 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20  ICT UPDATE */.  
1cf40 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 61 62  /* The fields ab
1cf50 6f 76 65 20 63 6f 6d 70 72 69 73 65 20 74 68 65  ove comprise the
1cf60 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20   parse tree for 
1cf70 74 68 65 20 75 70 73 65 72 74 20 63 6c 61 75 73  the upsert claus
1cf80 65 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 65 6c  e..  ** The fiel
1cf90 64 73 20 62 65 6c 6f 77 20 61 72 65 20 75 73 65  ds below are use
1cfa0 64 20 74 6f 20 74 72 61 6e 73 66 65 72 20 69 6e  d to transfer in
1cfb0 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74  formation from t
1cfc0 68 65 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20 70  he INSERT.  ** p
1cfd0 72 6f 63 65 73 73 69 6e 67 20 64 6f 77 6e 20 69  rocessing down i
1cfe0 6e 74 6f 20 74 68 65 20 55 50 44 41 54 45 20 70  nto the UPDATE p
1cff0 72 6f 63 65 73 73 69 6e 67 20 77 68 69 6c 65 20  rocessing while 
1d000 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 64 65 2e  generating code.
1d010 0a 20 20 2a 2a 20 55 70 73 65 72 74 20 6f 77 6e  .  ** Upsert own
1d020 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  s the memory all
1d030 6f 63 61 74 65 64 20 61 62 6f 76 65 2c 20 62 75  ocated above, bu
1d040 74 20 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72 79  t not the memory
1d050 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64   below. */.  Ind
1d060 65 78 20 2a 70 55 70 73 65 72 74 49 64 78 3b 20  ex *pUpsertIdx; 
1d070 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74 72         /* Constr
1d080 61 69 6e 74 20 74 68 61 74 20 70 55 70 73 65 72  aint that pUpser
1d090 74 54 61 72 67 65 74 20 69 64 65 6e 74 69 66 69  tTarget identifi
1d0a0 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  es */.  SrcList 
1d0b0 2a 70 55 70 73 65 72 74 53 72 63 3b 20 20 20 20  *pUpsertSrc;    
1d0c0 20 20 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62 65    /* Table to be
1d0d0 20 75 70 64 61 74 65 64 20 2a 2f 0a 20 20 69 6e   updated */.  in
1d0e0 74 20 72 65 67 44 61 74 61 3b 20 20 20 20 20 20  t regData;      
1d0f0 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
1d100 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1d110 67 20 61 72 72 61 79 20 6f 66 20 56 41 4c 55 45  g array of VALUE
1d120 53 20 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74 61  S */.  int iData
1d130 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
1d140 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1d150 20 64 61 74 61 20 63 75 72 73 6f 72 20 2a 2f 0a   data cursor */.
1d160 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20    int iIdxCur;  
1d170 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1d180 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73  ndex of the firs
1d190 74 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a  t index cursor *
1d1a0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
1d1b0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1d1c0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1d1d0 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20  re contains all 
1d1e0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e  information.** n
1d1f0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
1d200 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e  e code for a sin
1d210 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  gle SELECT state
1d220 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ment..**.** See 
1d230 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
1d240 6e 74 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75 74  nt on the comput
1d250 65 4c 69 6d 69 74 52 65 67 69 73 74 65 72 73 28  eLimitRegisters(
1d260 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 61 0a  ) routine for a.
1d270 2a 2a 20 64 65 74 61 69 6c 65 64 20 64 65 73 63  ** detailed desc
1d280 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d  ription of the m
1d290 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 69 4c  eaning of the iL
1d2a0 69 6d 69 74 20 61 6e 64 20 69 4f 66 66 73 65 74  imit and iOffset
1d2b0 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 61   fields..**.** a
1d2c0 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e  ddrOpenEphm[] en
1d2d0 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68  tries contain th
1d2e0 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  e address of OP_
1d2f0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
1d300 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20  codes..** These 
1d310 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62  addresses must b
1d320 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74  e stored so that
1d330 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20   we can go back 
1d340 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74  and fill in.** t
1d350 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e  he P4_KEYINFO an
1d360 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20  d P2 parameters 
1d370 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20  later.  Neither 
1d380 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a  the KeyInfo nor.
1d390 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
1d3a0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63   columns in P2 c
1d3b0 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61  an be computed a
1d3c0 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a  t the same time.
1d3d0 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65  ** as the OP_Ope
1d3e0 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f  nEphm instructio
1d3f0 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75  n is coded becau
1d400 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68  se not.** enough
1d410 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
1d420 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  ut the compound 
1d430 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61  query is known a
1d440 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a  t that point..**
1d450 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
1d460 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d   addrOpenTran[0]
1d470 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e   and [1] contain
1d480 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
1d490 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65  ences.** for the
1d4a0 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68   result set.  Th
1d4b0 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
1d4c0 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f  drOpenEphm[2] co
1d4d0 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1d4e0 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f  .** sequences fo
1d4f0 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
1d500 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
1d510 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72   Select {.  Expr
1d520 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
1d530 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73     /* The fields
1d540 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a   of the result *
1d550 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
1d560 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1d570 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54  e of: TK_UNION T
1d580 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45  K_ALL TK_INTERSE
1d590 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a  CT TK_EXCEPT */.
1d5a0 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63 74    LogEst nSelect
1d5b0 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
1d5c0 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mated number of 
1d5d0 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20  result rows */. 
1d5e0 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20 20   u32 selFlags;  
1d5f0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
1d600 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a  us SF_* values *
1d610 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20  /.  int iLimit, 
1d620 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65  iOffset;   /* Me
1d630 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68  mory registers h
1d640 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f  olding LIMIT & O
1d650 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a  FFSET counters *
1d660 2f 0a 20 20 75 33 32 20 73 65 6c 49 64 3b 20 20  /.  u32 selId;  
1d670 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 6e             /* Un
1d680 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72 20  ique identifier 
1d690 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20  number for this 
1d6a0 53 45 4c 45 43 54 20 2a 2f 0a 20 20 69 6e 74 20  SELECT */.  int 
1d6b0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
1d6c0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
1d6d0 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
1d6e0 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1d6f0 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  t */.  SrcList *
1d700 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
1d710 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
1d720 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1d730 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
1d740 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1d750 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1d760 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
1d770 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
1d780 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
1d790 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
1d7a0 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
1d7b0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
1d7c0 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
1d7d0 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
1d7e0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
1d7f0 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
1d800 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
1d810 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
1d820 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
1d830 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
1d840 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1d850 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
1d860 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
1d870 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70  ompound */.  Exp
1d880 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
1d890 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
1d8a0 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
1d8b0 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
1d8c0 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1d8d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54            /* WIT
1d8e0 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65  H clause attache
1d8f0 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1d900 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23 69  . Or NULL. */.#i
1d910 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1d920 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 57  T_WINDOWFUNC.  W
1d930 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20  indow *pWin;    
1d940 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
1d950 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
1d960 73 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70  s */.  Window *p
1d970 57 69 6e 44 65 66 6e 3b 20 20 20 20 20 20 2f 2a  WinDefn;      /*
1d980 20 4c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 77   List of named w
1d990 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e  indow definition
1d9a0 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  s */.#endif.};..
1d9b0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
1d9c0 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
1d9d0 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
1d9e0 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
1d9f0 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
1da00 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61   Flag"..**.** Va
1da10 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1da20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61  (all checked via
1da30 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20   assert()).**   
1da40 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20    SF_HasAgg     
1da50 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20  == NC_HasAgg.** 
1da60 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67      SF_MinMaxAgg
1da70 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67    == NC_MinMaxAg
1da80 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  g     == SQLITE_
1da90 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20  FUNC_MINMAX.**  
1daa0 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74     SF_FixedLimit
1dab0 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49   == WHERE_USE_LI
1dac0 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT.*/.#define S
1dad0 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
1dae0 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74   0x00001  /* Out
1daf0 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
1db00 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
1db10 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20  e SF_All        
1db20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20      0x00002  /* 
1db30 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c  Includes the ALL
1db40 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1db50 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20  ine SF_Resolved 
1db60 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f        0x00004  /
1db70 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61  * Identifiers ha
1db80 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
1db90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1dba0 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78  ggregate      0x
1dbb0 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69  00008  /* Contai
1dbc0 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73  ns agg functions
1dbd0 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a   or a GROUP BY *
1dbe0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1dbf0 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30  Agg         0x00
1dc00 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  010  /* Contains
1dc10 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1dc20 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
1dc30 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
1dc40 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73    0x00020  /* Us
1dc50 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
1dc60 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
1dc70 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
1dc80 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30  ed       0x00040
1dc90 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
1dca0 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
1dcb0 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
1dcc0 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
1dcd0 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20  nfo    0x00080  
1dce0 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
1dcf0 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
1dd00 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
1dd10 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20  e SF_Compound   
1dd20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20      0x00100  /* 
1dd30 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75  Part of a compou
1dd40 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66  nd query */.#def
1dd50 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20  ine SF_Values   
1dd60 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f        0x00200  /
1dd70 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72  * Synthesized fr
1dd80 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  om VALUES clause
1dd90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1dda0 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78  ultiValue     0x
1ddb0 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65  00400  /* Single
1ddc0 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74   VALUES term wit
1ddd0 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1dde0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65  */.#define SF_Ne
1ddf0 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30  stedFrom     0x0
1de00 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0800  /* Part of
1de10 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
1de20 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1de30 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61  #define SF_MinMa
1de40 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30  xAgg      0x0100
1de50 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  0  /* Aggregate 
1de60 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29  containing min()
1de70 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65   or max() */.#de
1de80 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76  fine SF_Recursiv
1de90 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20  e      0x02000  
1dea0 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65  /* The recursive
1deb0 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72   part of a recur
1dec0 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66  sive CTE */.#def
1ded0 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69  ine SF_FixedLimi
1dee0 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f  t     0x04000  /
1def0 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74  * nSelectRow set
1df00 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c   by a constant L
1df10 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT */.#define 
1df20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
1df30 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65    0x08000  /* Ne
1df40 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
1df50 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1df60 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1df70 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20  SF_Converted    
1df80 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79    0x10000  /* By
1df90 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1dfa0 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1dfb0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1dfc0 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20  _IncludeHidden  
1dfd0 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c  0x20000  /* Incl
1dfe0 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ude hidden colum
1dff0 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a  ns in output */.
1e000 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c  #define SF_Compl
1e010 65 78 52 65 73 75 6c 74 20 20 30 78 34 30 30 30  exResult  0x4000
1e020 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 6e  0  /* Result con
1e030 74 61 69 6e 73 20 73 75 62 71 75 65 72 79 20 6f  tains subquery o
1e040 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f  r function */../
1e050 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73  *.** The results
1e060 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e   of a SELECT can
1e070 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20   be distributed 
1e080 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
1e090 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62   as defined.** b
1e0a0 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1e0b0 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20  lowing macros.  
1e0c0 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78  The "SRT" prefix
1e0d0 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52   means "SELECT R
1e0e0 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a  esult.** Type"..
1e0f0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e  **.**     SRT_Un
1e100 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20  ion       Store 
1e110 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79  results as a key
1e120 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1e130 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20  index.**        
1e140 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65               ide
1e150 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74  ntified by pDest
1e160 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
1e170 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20       SRT_Except 
1e180 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75       Remove resu
1e190 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d  lts from the tem
1e1a0 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65  porary index pDe
1e1b0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1e1c0 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74  **     SRT_Exist
1e1d0 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31  s      Store a 1
1e1e0 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
1e1f0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69  pDest->iSDParm i
1e200 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  f the result.** 
1e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e220 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65      set is not e
1e230 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mpty..**.**     
1e240 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
1e250 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74  Throw the result
1e260 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73  s away.  This is
1e270 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a   used by SELECT.
1e280 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e290 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
1e2a0 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
1e2b0 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72  s whose only pur
1e2c0 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20  pose is.**      
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e2e0 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20  he side-effects 
1e2f0 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  of functions..**
1e300 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61  .** All of the a
1e310 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f  bove are free to
1e320 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52   ignore their OR
1e330 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54  DER BY clause. T
1e340 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c  hose that.** fol
1e350 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74  low must honor t
1e360 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1e370 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
1e380 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65  T_Output      Ge
1e390 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20  nerate a row of 
1e3a0 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68  output (using th
1e3b0 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a  e OP_ResultRow.*
1e3c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e3d0 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f        opcode) fo
1e3e0 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  r each row in th
1e3f0 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a  e result set..**
1e400 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20  .**     SRT_Mem 
1e410 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c          Only val
1e420 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  id if the result
1e430 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   is a single col
1e440 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  umn..**         
1e450 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72              Stor
1e460 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75  e the first colu
1e470 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  mn of the first 
1e480 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20  result row.**   
1e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4a0 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44    in register pD
1e4b0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65  est->iSDParm the
1e4c0 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65  n abandon the re
1e4d0 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  st.**           
1e4e0 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
1e4f0 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65   query.  This de
1e500 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65  stination implie
1e510 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a  s "LIMIT 1"..**.
1e520 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20  **     SRT_Set  
1e530 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c         The resul
1e540 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67  t must be a sing
1e550 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72  le column.  Stor
1e560 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20  e each.**       
1e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1e580 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74  w of result as t
1e590 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20  he key in table 
1e5a0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1e5b0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e5c0 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65         Apply the
1e5d0 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d   affinity pDest-
1e5e0 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20  >affSdst before 
1e5f0 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20  storing.**      
1e600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e610 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f  esults.  Used to
1e620 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28   implement "IN (
1e630 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a  SELECT ...)"..**
1e640 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65  .**     SRT_Ephe
1e650 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61  mTab    Create a
1e660 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1e670 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1e680 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20   and store.**   
1e690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6a0 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65    the result the
1e6b0 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69  re. The cursor i
1e6c0 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65  s left open afte
1e6d0 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  r.**            
1e6e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69           returni
1e6f0 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b  ng.  This is lik
1e700 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65  e SRT_Table exce
1e710 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20  pt that.**      
1e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e730 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1e740 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65  uses OP_OpenEphe
1e750 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a  meral to create.
1e760 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e770 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65         the table
1e780 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20   first..**.**   
1e790 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20    SRT_Coroutine 
1e7a0 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d    Generate a co-
1e7b0 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74  routine that ret
1e7c0 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f  urns a new row o
1e7d0 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
1e7e0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
1e7f0 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73   each time it is
1e800 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65   invoked.  The e
1e810 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20  ntry point.**   
1e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e830 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74    of the co-rout
1e840 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ine is stored in
1e850 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1e860 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20  >iSDParm.**     
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e880 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72  and the result r
1e890 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ow is stored in 
1e8a0 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67  pDest->nDest reg
1e8b0 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20  isters.**       
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1e8d0 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73  arting with pDes
1e8e0 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20  t->iSdst..**.** 
1e8f0 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20      SRT_Table   
1e900 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1e910 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  s in temporary t
1e920 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1e930 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f  arm..**     SRT_
1e940 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73  Fifo        This
1e950 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68   is like SRT_Eph
1e960 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61  emTab except tha
1e970 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20  t the table.**  
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e990 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f     is assumed to
1e9a0 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e   already be open
1e9b0 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a  .  SRT_Fifo has.
1e9c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e9d0 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74         the addit
1e9e0 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f  ional property o
1e9f0 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20  f being able to 
1ea00 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20  ignore.**       
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1ea20 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1ea30 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
1ea40 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f  _DistFifo    Sto
1ea50 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20  re results in a 
1ea60 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1ea70 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1ea80 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ea90 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20         But also 
1eaa0 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  use temporary ta
1eab0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1eac0 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20  rm+1 as.**      
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1eae0 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70   record of all p
1eaf0 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64  rior results and
1eb00 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c   ignore any dupl
1eb10 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  icate.**        
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
1eb30 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20  s.  Name means: 
1eb40 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22   "Distinct Fifo"
1eb50 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1eb60 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72  Queue       Stor
1eb70 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
1eb80 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
1eb90 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c  t->iSDParm (real
1eba0 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ly.**           
1ebb0 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64            an ind
1ebc0 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73  ex).  Append a s
1ebd0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73  equence number s
1ebe0 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69  o that all entri
1ebf0 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  es.**           
1ec00 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69            are di
1ec10 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  stinct..**.**   
1ec20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20    SRT_DistQueue 
1ec30 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1ec40 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1ec50 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1ec60 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20   only if.**     
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec80 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20  the same record 
1ec90 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73  has never been s
1eca0 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54  tored before.  T
1ecb0 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  he.**           
1ecc0 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20            index 
1ecd0 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  at pDest->iSDPar
1ece0 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69  m+1 hold all pri
1ecf0 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64  or stores..*/.#d
1ed00 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20  efine SRT_Union 
1ed10 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f         1  /* Sto
1ed20 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79  re result as key
1ed30 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
1ed40 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63  .#define SRT_Exc
1ed50 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20  ept       2  /* 
1ed60 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72  Remove result fr
1ed70 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78  om a UNION index
1ed80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1ed90 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20  Exists       3  
1eda0 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68  /* Store 1 if th
1edb0 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20  e result is not 
1edc0 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
1edd0 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
1ede0 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73    4  /* Do not s
1edf0 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ave the results 
1ee00 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66  anywhere */.#def
1ee10 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20  ine SRT_Fifo    
1ee20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65       5  /* Store
1ee30 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1ee40 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1ee50 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  c rowid */.#defi
1ee60 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20  ne SRT_DistFifo 
1ee70 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53      6  /* Like S
1ee80 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69  RT_Fifo, but uni
1ee90 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
1eea0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1eeb0 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20  Queue        7  
1eec0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1eed0 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23  in an queue */.#
1eee0 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51  define SRT_DistQ
1eef0 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69  ueue    8  /* Li
1ef00 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75  ke SRT_Queue, bu
1ef10 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1ef20 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65   only */../* The
1ef30 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1ef40 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20   is ignored for 
1ef50 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  all of the above
1ef60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f   */.#define Igno
1ef70 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20  rableOrderby(X) 
1ef80 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54  ((X->eDest)<=SRT
1ef90 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65  _DistQueue)..#de
1efa0 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20  fine SRT_Output 
1efb0 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70        9  /* Outp
1efc0 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72  ut each row of r
1efd0 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
1efe0 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
1eff0 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   10  /* Store re
1f000 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79  sult in a memory
1f010 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65   cell */.#define
1f020 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
1f030 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   11  /* Store re
1f040 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e  sults as keys in
1f050 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1f060 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61  fine SRT_EphemTa
1f070 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61  b    12  /* Crea
1f080 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62  te transient tab
1f090 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20   and store like 
1f0a0 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65  SRT_Table */.#de
1f0b0 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69  fine SRT_Corouti
1f0c0 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65  ne   13  /* Gene
1f0d0 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f  rate a single ro
1f0e0 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
1f0f0 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
1f100 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74         14  /* St
1f110 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1f120 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1f130 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f  atic rowid */../
1f140 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1f150 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
1f160 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20  describes where 
1f170 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65  to put of the re
1f180 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45  sults of.** a SE
1f190 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1f1a0 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
1f1b0 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73  Dest {.  u8 eDes
1f1c0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
1f1d0 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20   How to dispose 
1f1e0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20  of the results. 
1f1f0 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f   On of SRT_* abo
1f200 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44  ve. */.  int iSD
1f210 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  Parm;         /*
1f220 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65   A parameter use
1f230 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64  d by the eDest d
1f240 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a  isposal method *
1f250 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20  /.  int iSdst;  
1f260 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65           /* Base
1f270 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20   register where 
1f280 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74  results are writ
1f290 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64  ten */.  int nSd
1f2a0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
1f2b0 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
1f2c0 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  ters allocated *
1f2d0 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53 64  /.  char *zAffSd
1f2e0 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69  st;      /* Affi
1f2f0 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65  nity used when e
1f300 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f  Dest==SRT_Set */
1f310 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
1f320 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63  derBy;  /* Key c
1f330 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51  olumns for SRT_Q
1f340 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73  ueue and SRT_Dis
1f350 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  tQueue */.};../*
1f360 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20  .** During code 
1f370 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74  generation of st
1f380 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f  atements that do
1f390 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55   inserts into AU
1f3a0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74  TOINCREMENT.** t
1f3b0 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f  ables, the follo
1f3c0 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  wing information
1f3d0 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
1f3e0 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f  the Table.u.auto
1f3f0 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72  Inc.p.** pointer
1f400 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63   of each autoinc
1f410 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20  rement table to 
1f420 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65  record some side
1f430 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
1f440 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65  t.** the code ge
1f450 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20  nerator needs.  
1f460 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20  We have to keep 
1f470 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e  per-table autoin
1f480 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72  crement.** infor
1f490 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69  mation in case i
1f4a0 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20  nserts are done 
1f4b0 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
1f4c0 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f    Triggers do no
1f4d0 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f  t.** normally co
1f4e0 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61  ordinate their a
1f4f0 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77  ctivities, but w
1f500 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f  e do need to coo
1f510 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c  rdinate the.** l
1f520 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e  oading and savin
1f530 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65  g of autoincreme
1f540 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  nt information..
1f550 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e  */.struct Autoin
1f560 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e  cInfo {.  Autoin
1f570 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20  cInfo *pNext;   
1f580 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f  /* Next info blo
1f590 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20  ck in a list of 
1f5a0 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61  them all */.  Ta
1f5b0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
1f5c0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69      /* Table thi
1f5d0 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66  s info block ref
1f5e0 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20  ers to */.  int 
1f5f0 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1f600 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71    /* Index in sq
1f610 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64  lite3.aDb[] of d
1f620 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
1f630 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65  pTab */.  int re
1f640 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20  gCtr;           
1f650 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1f660 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72  er holding the r
1f670 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  owid counter */.
1f680 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  };../*.** At lea
1f690 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
1f6a0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1f6b0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
1f6c0 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a  eated for each.*
1f6d0 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d  * trigger that m
1f6e0 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c  ay be fired whil
1f6f0 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53  e parsing an INS
1f700 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
1f710 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65  ELETE.** stateme
1f720 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a  nt. All such obj
1f730 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ects are stored 
1f740 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  in the linked li
1f750 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20  st headed at.** 
1f760 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
1f770 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e  g and deleted on
1f780 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  ce statement com
1f790 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65  pilation has bee
1f7a0 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a  n.** completed..
1f7b0 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62  **.** A Vdbe sub
1f7c0 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d  -program that im
1f7d0 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64  plements the bod
1f7e0 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73  y and WHEN claus
1f7f0 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20  e of trigger.** 
1f800 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67  TriggerPrg.pTrig
1f810 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20  ger, assuming a 
1f820 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  default ON CONFL
1f830 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a  ICT clause of.**
1f840 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f   TriggerPrg.orco
1f850 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  nf, is stored in
1f860 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
1f870 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c  pProgram variabl
1f880 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e  e..** The Parse.
1f890 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
1f8a0 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20   never contains 
1f8b0 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68  two entries with
1f8c0 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c   the same.** val
1f8d0 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72  ues for both pTr
1f8e0 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66  igger and orconf
1f8f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67  ..**.** The Trig
1f900 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
1f910 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  0] variable is s
1f920 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20  et to a mask of 
1f930 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  old.* columns.**
1f940 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65   accessed (or se
1f950 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67  t to 0 for trigg
1f960 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72  ers fired as a r
1f970 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a  esult of INSERT.
1f980 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
1f990 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
1f9a0 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1f9b0 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
1f9c0 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
1f9d0 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1f9e0 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
1f9f0 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
1fa00 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
1fa10 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1fa20 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
1fa30 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
1fa40 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
1fa50 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1fa60 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
1fa70 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50   Next entry in P
1fa80 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1fa90 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72   list */.  SubPr
1faa0 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
1fab0 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d     /* Program im
1fac0 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67  plementing pTrig
1fad0 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20  ger/orconf */.  
1fae0 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
1faf0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1fb00 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1fb10 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61  olicy */.  u32 a
1fb20 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
1fb30 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
1fb40 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
1fb50 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
1fb60 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
1fb70 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
1fb80 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
1fb90 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
1fba0 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
1fbb0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
1fbc0 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
1fbd0 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
1fbe0 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f  yDbMask[(SQLITE_
1fbf0 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f  MAX_ATTACHED+9)/
1fc00 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  8];.# define DbM
1fc10 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1fc20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c  (((M)[(I)/8]&(1<
1fc30 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23  <((I)&7)))!=0).#
1fc40 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1fc50 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65  ro(M)      memse
1fc60 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d  t((M),0,sizeof(M
1fc70 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1fc80 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1fc90 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28  M)[(I)/8]|=(1<<(
1fca0 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65  (I)&7)).# define
1fcb0 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1fcc0 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73  )   sqlite3DbMas
1fcd0 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65  kAllZero(M).# de
1fce0 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
1fcf0 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33  ro(M)   (sqlite3
1fd00 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1fd10 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70  ==0).#else.  typ
1fd20 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
1fd30 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66  t yDbMask;.# def
1fd40 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1fd50 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28  ,I)    (((M)&(((
1fd60 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1fd70 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1fd80 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1fd90 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65    (M)=0.# define
1fda0 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1fdb0 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d      (M)|=(((yDbM
1fdc0 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64  ask)1)<<(I)).# d
1fdd0 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1fde0 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a  ero(M)   (M)==0.
1fdf0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1fe00 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21  onZero(M)   (M)!
1fe10 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  =0.#endif../*.**
1fe20 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
1fe30 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
1fe40 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1fe50 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
1fe60 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
1fe70 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
1fe80 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
1fe90 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
1fea0 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
1feb0 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
1fec0 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
1fed0 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
1fee0 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
1fef0 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
1ff00 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
1ff10 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
1ff20 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
1ff30 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
1ff40 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
1ff50 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
1ff60 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
1ff70 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
1ff80 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
1ff90 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
1ffa0 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
1ffb0 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
1ffc0 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
1ffd0 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
1ffe0 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
1fff0 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
20000 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
20010 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
20020 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72  -cache.** featur
20030 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
20040 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
20050 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
20060 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
20070 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
20080 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
20090 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
200a0 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
200b0 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
200c0 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
200d0 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
200e0 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
200f0 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
20100 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
20110 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
20120 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
20130 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
20140 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
20150 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
20160 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
20170 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
20180 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
20190 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
201a0 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
201b0 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
201c0 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
201d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
201e0 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
201f0 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
20200 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
20210 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
20220 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
20230 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
20240 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
20250 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
20260 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
20270 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
20280 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
20290 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
202a0 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
202b0 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
202c0 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
202d0 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
202e0 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
202f0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
20300 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
20310 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
20320 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
20330 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
20340 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
20350 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
20360 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
20370 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
20380 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
20390 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
203a0 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
203b0 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
203c0 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
203d0 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
203e0 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
203f0 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
20400 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
20410 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
20420 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
20430 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
20440 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
20450 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f  .  u8 disableLoo
20460 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65  kaside; /* Numbe
20470 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61  r of times looka
20480 73 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69  side has been di
20490 73 61 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20  sabled */.  int 
204a0 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
204b0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
204c0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
204d0 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
204e0 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
204f0 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
20500 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
20510 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
20520 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
20530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20540 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
20550 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
20560 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
20570 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
20580 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
20590 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
205a0 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
205b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
205c0 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
205d0 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
205e0 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20    int nOpAlloc; 
205f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20600 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61   of slots alloca
20610 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70  ted for Vdbe.aOp
20620 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70  [] */.  int szOp
20630 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20  Alloc;       /* 
20640 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  Bytes of memory 
20650 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
20660 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
20670 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62  /.  int iSelfTab
20680 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c  ;        /* Tabl
20690 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
206a0 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78  h an index on ex
206b0 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 0a  pr, or negative.
206c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206d0 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
206e0 20 62 61 73 65 20 72 65 67 69 73 74 65 72 20 64   base register d
206f0 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73  uring check-cons
20700 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20  traint eval */. 
20710 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20   int nLabel;    
20720 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20730 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a  of labels used *
20740 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b  /.  int *aLabel;
20750 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
20760 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61  e to hold the la
20770 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  bels */.  ExprLi
20780 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f  st *pConstExpr;/
20790 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
207a0 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65  ssions */.  Toke
207b0 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
207c0 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
207d0 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
207e0 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
207f0 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  d */.  yDbMask w
20800 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
20810 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
20820 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
20830 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
20840 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
20850 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
20860 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
20870 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
20880 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
20890 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
208a0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
208b0 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
208c0 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
208d0 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
208e0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
208f0 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
20900 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
20910 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
20920 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
20930 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
20940 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
20950 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
20960 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  ram */.  int nSe
20970 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  lect;         /*
20980 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43   Number of SELEC
20990 54 20 73 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72  T stmts. Counter
209a0 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 49   for Select.selI
209b0 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
209c0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
209d0 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
209e0 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
209f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
20a00 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
20a10 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
20a20 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
20a30 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
20a40 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
20a50 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
20a60 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
20a70 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
20a80 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
20a90 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
20aa0 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73  unters */.  Pars
20ab0 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
20ac0 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
20ad0 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
20ae0 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
20af0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
20b00 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
20b10 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
20b20 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
20b30 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
20b40 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
20b50 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
20b60 42 74 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Btree opcode on 
20b70 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
20b80 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70    u32 nQueryLoop
20b90 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75  ;      /* Est nu
20ba0 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
20bb0 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31  ns of a query (1
20bc0 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20  0*log2(N)) */.  
20bd0 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20  u32 oldmask;    
20be0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
20bf0 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  old.* columns re
20c00 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33  ferenced */.  u3
20c10 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20  2 newmask;      
20c20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65     /* Mask of ne
20c30 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  w.* columns refe
20c40 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65  renced */.  u8 e
20c50 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20  TriggerOp;      
20c60 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54   /* TK_UPDATE, T
20c70 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44  K_INSERT or TK_D
20c80 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f  ELETE */.  u8 eO
20c90 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
20ca0 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
20cb0 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f  NFLICT policy fo
20cc0 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20  r trigger steps 
20cd0 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54  */.  u8 disableT
20ce0 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75  riggers;  /* Tru
20cf0 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69  e to disable tri
20d00 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a  ggers */..  /***
20d10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d50 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65  *******.  ** Fie
20d60 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62  lds above must b
20d70 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
20d80 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c   zero.  The fiel
20d90 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a  ds that follow,.
20da0 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65    ** down to the
20db0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
20dc0 65 20 72 65 63 75 72 73 69 76 65 20 73 65 63 74  e recursive sect
20dd0 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64  ion, do not need
20de0 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74   to be.  ** init
20df0 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20  ialized as they 
20e00 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f  will be set befo
20e10 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  re being used.  
20e20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a  The boundary is.
20e30 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20    ** determined 
20e40 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  by offsetof(Pars
20e50 65 2c 61 54 65 6d 70 52 65 67 29 2e 0a 20 20 2a  e,aTempReg)..  *
20e60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e  *********/..  in
20eb0 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
20ec0 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67        /* Holding
20ed0 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72   area for tempor
20ee0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f  ary registers */
20ef0 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
20f00 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f  ken;       /* To
20f10 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
20f20 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
20f30 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a  ct name */..  /*
20f40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f80 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
20f90 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
20fa0 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
20fb0 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
20fc0 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
20fd0 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
20fe0 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
20ff0 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
21000 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
21010 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
21020 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
21030 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f  of(Parse,sLastTo
21040 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73  ken) so the sLas
21050 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73  tToken field mus
21060 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69  t be the.  ** fi
21070 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65  rst field in the
21080 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
21090 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
210a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
210b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
210c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
210d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
210e0 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b    Token sLastTok
210f0 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  en;       /* The
21100 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
21110 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56  ed */.  ynVar nV
21120 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
21130 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
21140 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
21150 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
21160 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53  far */.  u8 iPkS
21170 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
21180 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53     /* ASC or DES
21190 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  C for INTEGER PR
211a0 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75  IMARY KEY */.  u
211b0 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
211c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
211d0 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
211e0 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
211f0 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
21200 66 20 21 28 64 65 66 69 6e 65 64 28 53 51 4c 49  f !(defined(SQLI
21210 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21220 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e 65 64  ABLE) && defined
21230 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  (SQLITE_OMIT_ALT
21240 45 52 54 41 42 4c 45 29 29 0a 20 20 75 38 20 65  ERTABLE)).  u8 e
21250 50 61 72 73 65 4d 6f 64 65 3b 20 20 20 20 20 20  ParseMode;      
21260 20 20 20 20 20 20 2f 2a 20 50 41 52 53 45 5f 4d        /* PARSE_M
21270 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74  ODE_XXX constant
21280 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
21290 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
212a0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
212b0 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
212c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
212d0 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
212e0 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
212f0 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69  endif.  int nHei
21300 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
21310 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
21320 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
21330 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
21340 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
21350 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
21360 0a 20 20 69 6e 74 20 61 64 64 72 45 78 70 6c 61  .  int addrExpla
21370 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  in;          /* 
21380 41 64 64 72 65 73 73 20 6f 66 20 63 75 72 72 65  Address of curre
21390 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70  nt OP_Explain op
213a0 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
213b0 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20   VList *pVList; 
213c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
213d0 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61  pping between va
213e0 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64  riable names and
213f0 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64   numbers */.  Vd
21400 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
21410 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
21420 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
21430 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
21440 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ()) */.  const c
21450 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20  har *zTail;     
21460 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
21470 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  xt past the last
21480 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65   semicolon parse
21490 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  d */.  Table *pN
214a0 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  ewTable;        
214b0 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
214c0 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
214d0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
214e0 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 77 49 6e  .  Index *pNewIn
214f0 64 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dex;         /* 
21500 41 6e 20 69 6e 64 65 78 20 62 65 69 6e 67 20 63  An index being c
21510 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
21520 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
21530 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69  Trigger *pNewTri
21540 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69  gger;     /* Tri
21550 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74  gger under const
21560 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45  ruct by a CREATE
21570 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f   TRIGGER */.  co
21580 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
21590 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36  ontext; /* The 6
215a0 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  th parameter to 
215b0 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61  db->xAuth callba
215c0 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  cks */.#ifndef S
215d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
215e0 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
215f0 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
21600 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
21610 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
21620 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
21630 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
21640 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
21650 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
21660 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
21670 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
21680 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
21690 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
216a0 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
216b0 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
216c0 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
216d0 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
216e0 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
216f0 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
21700 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
21710 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
21720 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21730 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61  Current WITH cla
21740 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
21750 20 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46    With *pWithToF
21760 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46  ree;        /* F
21770 72 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62  ree this WITH ob
21780 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20  ject at the end 
21790 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a  of the parse */.
217a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
217b0 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
217c0 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 2a 70 52   RenameToken *pR
217d0 65 6e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 54 6f  ename;     /* To
217e0 6b 65 6e 73 20 73 75 62 6a 65 63 74 20 74 6f 20  kens subject to 
217f0 72 65 6e 61 6d 69 6e 67 20 62 79 20 41 4c 54 45  renaming by ALTE
21800 52 20 54 41 42 4c 45 20 2a 2f 0a 23 65 6e 64 69  R TABLE */.#endi
21810 66 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 50 41  f.};..#define PA
21820 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 20  RSE_MODE_NORMAL 
21830 20 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65         0.#define
21840 20 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c   PARSE_MODE_DECL
21850 41 52 45 5f 56 54 41 42 20 20 31 0a 23 64 65 66  ARE_VTAB  1.#def
21860 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52  ine PARSE_MODE_R
21870 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 20 32 0a 23  ENAME_COLUMN 2.#
21880 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44  define PARSE_MOD
21890 45 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45 20 20  E_RENAME_TABLE  
218a0 33 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61  3../*.** Sizes a
218b0 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76  nd pointers of v
218c0 61 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20  arious parts of 
218d0 74 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74  the Parse object
218e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  ..*/.#define PAR
218f0 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74  SE_HDR_SZ offset
21900 6f 66 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65  of(Parse,aTempRe
21910 67 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20  g) /* Recursive 
21920 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63  part w/o aColCac
21930 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  he*/.#define PAR
21940 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66  SE_RECURSE_SZ of
21950 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
21960 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52  stToken)    /* R
21970 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
21980 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
21990 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50  AIL_SZ (sizeof(P
219a0 61 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55  arse)-PARSE_RECU
219b0 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72  RSE_SZ) /* Non-r
219c0 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
219d0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
219e0 41 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29  AIL(X) (((char*)
219f0 28 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52  (X))+PARSE_RECUR
21a00 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74  SE_SZ)  /* Point
21a10 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f  er to tail */../
21a20 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
21a30 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
21a40 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f  side an sqlite3_
21a50 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63  declare_vtab() c
21a60 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  all..*/.#ifdef S
21a70 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21a80 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e  ALTABLE.  #defin
21a90 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
21aa0 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  B 0.#else.  #def
21ab0 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
21ac0 54 41 42 20 28 70 50 61 72 73 65 2d 3e 65 50 61  TAB (pParse->ePa
21ad0 72 73 65 4d 6f 64 65 3d 3d 50 41 52 53 45 5f 4d  rseMode==PARSE_M
21ae0 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42  ODE_DECLARE_VTAB
21af0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ).#endif..#if de
21b00 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
21b10 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20  T_ALTERTABLE).  
21b20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d  #define IN_RENAM
21b30 45 5f 4f 42 4a 45 43 54 20 30 0a 23 65 6c 73 65  E_OBJECT 0.#else
21b40 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45  .  #define IN_RE
21b50 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 28 70 50 61  NAME_OBJECT (pPa
21b60 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3e  rse->eParseMode>
21b70 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41  =PARSE_MODE_RENA
21b80 4d 45 5f 43 4f 4c 55 4d 4e 29 0a 23 65 6e 64 69  ME_COLUMN).#endi
21b90 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
21ba0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21bb0 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69  ALTABLE) && defi
21bc0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
21bd0 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23 64  ALTERTABLE).  #d
21be0 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c  efine IN_SPECIAL
21bf0 5f 50 41 52 53 45 20 30 0a 23 65 6c 73 65 0a 20  _PARSE 0.#else. 
21c00 20 23 64 65 66 69 6e 65 20 49 4e 5f 53 50 45 43   #define IN_SPEC
21c10 49 41 4c 5f 50 41 52 53 45 20 28 70 50 61 72 73  IAL_PARSE (pPars
21c20 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 21 3d 50  e->eParseMode!=P
21c30 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c  ARSE_MODE_NORMAL
21c40 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
21c50 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
21c60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
21c70 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65  ucture can be de
21c80 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63  clared on a stac
21c90 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  k and used.** to
21ca0 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e   save the Parse.
21cb0 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c  zAuthContext val
21cc0 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ue so that it ca
21cd0 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61  n be restored la
21ce0 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ter..*/.struct A
21cf0 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63  uthContext {.  c
21d00 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
21d10 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75  Context;   /* Pu
21d20 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41  t saved Parse.zA
21d30 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20  uthContext here 
21d40 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
21d50 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
21d60 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74   /* The Parse st
21d70 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f  ructure */.};../
21d80 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c  *.** Bitfield fl
21d90 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65  ags for P5 value
21da0 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f   in various opco
21db0 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  des..**.** Value
21dc0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
21dd0 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
21de0 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c  t()):.**    OPFL
21df0 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
21e00 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  == SQLITE_FUNC_L
21e10 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c  ENGTH.**    OPFL
21e20 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
21e30 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  == SQLITE_FUNC_T
21e40 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c  YPEOF.**    OPFL
21e50 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
21e60 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  == BTREE_BULKLOA
21e70 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  D.**    OPFLAG_S
21e80 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42  EEKEQ       == B
21e90 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20  TREE_SEEK_EQ.** 
21ea0 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c     OPFLAG_FORDEL
21eb0 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
21ec0 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20  FORDELETE.**    
21ed0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
21ee0 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56  ION == BTREE_SAV
21ef0 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20  EPOSITION.**    
21f00 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
21f10 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58      == BTREE_AUX
21f20 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e  DELETE.*/.#defin
21f30 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
21f40 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
21f50 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74  * OP_Insert: Set
21f60 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
21f70 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20  Change */.      
21f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21fa0 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50  * Also used in P
21fb0 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50  2 (not P5) of OP
21fc0 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69  _Delete */.#defi
21fd0 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20  ne OPFLAG_EPHEM 
21fe0 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
21ff0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70  /* OP_Column: Ep
22000 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69  hemeral output i
22010 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  s ok */.#define 
22020 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
22030 20 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20       0x20    /* 
22040 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
22050 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
22060 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
22070 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
22080 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
22090 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
220a0 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
220b0 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
220c0 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
220d0 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
220e0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
220f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22100 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
22110 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
22120 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
22130 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
22140 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22150 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20  AG_ISNOOP       
22160 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44   0x40    /* OP_D
22170 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75  elete does pre-u
22180 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20  pdate-hook only 
22190 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
221a0 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
221b0 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
221c0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
221d0 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
221e0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
221f0 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
22200 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
22210 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
22220 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
22230 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
22240 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
22250 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
22260 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
22270 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
22280 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
22290 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
222a0 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f   OP_Open** curso
222b0 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f  r uses EQ seek o
222c0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nly */.#define O
222d0 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20  PFLAG_FORDELETE 
222e0 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f      0x08    /* O
222f0 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73  P_Open should us
22300 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  e BTREE_FORDELET
22310 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
22320 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
22330 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20    0x10    /* P2 
22340 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
22350 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
22360 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
22370 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
22380 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
22390 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
223a0 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
223b0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53  #define OPFLAG_S
223c0 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30  AVEPOSITION  0x0
223d0 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  2    /* OP_Delet
223e0 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63  e/Insert: save c
223f0 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65  ursor pos */.#de
22400 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44  fine OPFLAG_AUXD
22410 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20 20  ELETE     0x04  
22420 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20    /* OP_Delete: 
22430 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54  index in a DELET
22440 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  E op */.#define 
22450 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41  OPFLAG_NOCHNG_MA
22460 47 49 43 20 20 30 78 36 64 20 20 20 20 2f 2a 20  GIC  0x6d    /* 
22470 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 73  OP_MakeRecord: s
22480 65 72 69 61 6c 74 79 70 65 20 31 30 20 69 73 20  erialtype 10 is 
22490 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  ok */../*. * Eac
224a0 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
224b0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
224c0 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
224d0 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
224e0 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
224f0 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f  rigger.. *. * Po
22500 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
22510 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
22520 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
22530 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
22540 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
22550 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
22560 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
22570 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
22580 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20  esents the. *   
22590 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
225a0 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
225b0 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
225c0 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
225d0 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
225e0 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
225f0 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
22600 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
22610 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
22620 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
22630 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
22640 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
22650 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
22660 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
22670 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
22680 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
22690 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
226a0 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
226b0 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
226c0 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
226d0 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
226e0 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
226f0 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
22700 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
22710 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
22720 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
22730 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
22740 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
22750 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
22760 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
22770 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
22780 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
22790 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
227a0 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
227b0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
227c0 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
227d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
227e0 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
227f0 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
22800 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
22810 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
22820 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
22830 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
22840 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
22850 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
22860 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
22870 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
22880 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
22890 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
228a0 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
228b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
228c0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
228d0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
228e0 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
228f0 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
22900 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
22910 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
22920 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
22930 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
22940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22950 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
22960 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
22970 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
22980 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
22990 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
229a0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
229b0 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
229c0 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
229d0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
229e0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
229f0 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
22a00 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
22a10 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
22a20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
22a30 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
22a40 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
22a50 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
22a60 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
22a70 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
22a80 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
22a90 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
22aa0 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
22ab0 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
22ac0 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
22ad0 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
22ae0 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
22af0 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ich..**.** If th
22b00 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
22b10 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
22b20 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
22b30 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
22b40 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
22b50 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
22b60 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
22b70 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
22b80 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
22b90 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
22ba0 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
22bb0 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
22bc0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
22bd0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
22be0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
22bf0 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
22c00 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
22c10 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
22c20 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
22c30 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20   *. * Instances 
22c40 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
22c50 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64  rStep are stored
22c60 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e   in a singly lin
22c70 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64  ked list (linked
22c80 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70  . * using the "p
22c90 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65  Next" member) re
22ca0 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
22cb0 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
22cc0 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73  er of the. * ass
22cd0 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
22ce0 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
22cf0 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
22d00 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
22d10 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
22d20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
22d30 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
22d40 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70  m.. *. * The "op
22d50 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
22d60 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
22d70 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
22d80 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
22d90 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
22da0 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
22db0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
22dc0 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
22dd0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
22de0 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  he. * value of "
22df0 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
22e00 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
22e10 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
22e20 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
22e30 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
22e40 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
22e50 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
22e60 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
22e70 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
22e80 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
22e90 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
22ea0 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
22eb0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
22ec0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
22ed0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
22ee0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
22ef0 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
22f00 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
22f10 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
22f20 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
22f30 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
22f40 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
22f50 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
22f60 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
22f70 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
22f80 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
22f90 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
22fa0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
22fb0 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
22fc0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
22fd0 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
22fe0 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
22ff0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
23000 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
23010 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
23020 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
23030 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
23040 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
23050 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
23060 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a   TK_DELETE). * z
23070 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
23080 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
23090 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
230a0 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
230b0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
230c0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
230d0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
230e0 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
230f0 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
23100 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
23110 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ULL.. *. * (op =
23120 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
23130 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
23140 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
23150 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
23160 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  e.. * pWhere    
23170 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
23180 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
23190 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
231a0 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
231b0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
231c0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
231d0 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
231e0 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
231f0 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
23200 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
23210 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
23220 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
23230 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
23240 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
23250 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
23260 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
23270 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
23280 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20  .. *. */.struct 
23290 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
232a0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
232b0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
232c0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
232d0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
232e0 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
232f0 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
23300 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
23310 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
23320 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
23330 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
23340 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
23350 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
23360 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
23370 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
23380 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48   statement or RH
23390 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
233a0 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
233b0 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20   char *zTarget; 
233c0 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
233d0 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
233e0 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
233f0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
23400 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
23410 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
23420 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
23430 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
23440 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
23450 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
23460 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  e for UPDATE */.
23470 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
23480 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
23490 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
234a0 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a 70  T */.  Upsert *p
234b0 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 55  Upsert;     /* U
234c0 70 73 65 72 74 20 63 6c 61 75 73 65 73 20 6f 6e  psert clauses on
234d0 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20   an INSERT */.  
234e0 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
234f0 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
23500 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68 69   SQL text of thi
23510 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54  s command */.  T
23520 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
23530 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
23540 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
23550 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
23560 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
23570 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
23580 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
23590 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
235a0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
235b0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
235c0 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
235d0 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  mation used by t
235e0 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a  he sqliteFix....
235f0 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74  ** routines as t
23600 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72  hey walk the par
23610 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20  se tree to make 
23620 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e  database referen
23630 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e  ces.** explicit.
23640 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
23650 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
23660 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
23670 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
23680 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
23690 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
236a0 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
236b0 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
236c0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
236d0 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
236e0 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
236f0 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56  hema */.  int bV
23700 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a  arOnly;       /*
23710 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61   Check for varia
23720 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ble references o
23730 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nly */.  const c
23740 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
23750 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
23760 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
23770 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
23780 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
23790 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
237a0 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
237b0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
237c0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
237d0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
237e0 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
237f0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
23800 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
23810 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
23820 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
23830 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
23840 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
23850 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
23860 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
23870 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
23880 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
23890 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
238a0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
238b0 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72 20 7b  ct sqlite3_str {
238c0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
238d0 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
238e0 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
238f0 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
23900 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
23910 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
23920 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
23930 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
23940 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c  r */.  u32  nAll
23950 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  oc;         /* A
23960 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61  mount of space a
23970 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78  llocated in zTex
23980 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c  t */.  u32  mxAl
23990 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  loc;        /* M
239a0 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61  aximum allowed a
239b0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f  llocation.  0 fo
239c0 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67  r no malloc usag
239d0 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61  e */.  u32  nCha
239e0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
239f0 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
23a00 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
23a10 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20  u8   accError;  
23a20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
23a30 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45 5f 54  OMEM or SQLITE_T
23a40 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20  OOBIG */.  u8   
23a50 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20  printfFlags;    
23a60 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  /* SQLITE_PRINTF
23a70 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a   flags below */.
23a80 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  };.#define SQLIT
23a90 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
23aa0 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65 72  L 0x01  /* Inter
23ab0 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e  nal-use-only con
23ac0 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64 20  verters allowed 
23ad0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
23ae0 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
23af0 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20 66    0x02  /* SQL f
23b00 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
23b10 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f  s to VXPrintf */
23b20 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
23b30 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20  PRINTF_MALLOCED 
23b40 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0x04  /* True if
23b50 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63 61   xText is alloca
23b60 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64  ted space */..#d
23b70 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64  efine isMalloced
23b80 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69 6e  (X)  (((X)->prin
23b90 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45  tfFlags & SQLITE
23ba0 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
23bb0 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20  )!=0).../*.** A 
23bc0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
23bd0 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
23be0 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65  d to communicate
23bf0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
23c00 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74  from sqlite3Init
23c10 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68   and OP_ParseSch
23c20 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c  ema into the sql
23c30 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
23c40 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
23c50 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  uct {.  sqlite3 
23c60 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
23c70 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e  he database bein
23c80 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
23c90 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
23ca0 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20  sg;    /* Error 
23cb0 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68  message stored h
23cc0 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  ere */.  int iDb
23cd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
23ce0 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62  0 for main datab
23cf0 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50  ase.  1 for TEMP
23d00 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48  , 2.. for ATTACH
23d10 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ed */.  int rc; 
23d20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
23d30 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65  esult code store
23d40 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 33 32 20  d here */.  u32 
23d50 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20 20 20 20  mInitFlags;     
23d60 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  /* Flags control
23d70 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73 61  ling error messa
23d80 67 65 73 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ges */.} InitDat
23d90 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  a;../*.** Allowe
23da0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 6d 49 6e  d values for mIn
23db0 69 74 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  itFlags.*/.#defi
23dc0 6e 65 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65  ne INITFLAG_Alte
23dd0 72 54 61 62 6c 65 20 20 20 30 78 30 30 30 31 20  rTable   0x0001 
23de0 20 2f 2a 20 54 68 69 73 20 69 73 20 61 20 72 65   /* This is a re
23df0 70 61 72 73 65 20 61 66 74 65 72 20 41 4c 54 45  parse after ALTE
23e00 52 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a  R TABLE */../*.*
23e10 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * Structure cont
23e20 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f  aining global co
23e30 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61  nfiguration data
23e40 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
23e50 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  library..**.** T
23e60 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c  his structure al
23e70 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  so contains some
23e80 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   state informati
23e90 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71  on..*/.struct Sq
23ea0 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20  lite3Config {.  
23eb0 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20  int bMemstat;   
23ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ed0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
23ee0 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75  ble memory statu
23ef0 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65  s */.  int bCore
23f00 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
23f10 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23f20 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20   to enable core 
23f30 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
23f40 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  t bFullMutex;   
23f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f60 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
23f70 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20  e full mutexing 
23f80 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72  */.  int bOpenUr
23f90 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
23fa0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
23fb0 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65  o interpret file
23fc0 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f  names as URIs */
23fd0 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20  .  int bUseCis; 
23fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ff0 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65       /* Use cove
24000 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72  ring indices for
24010 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20   full-scans */. 
24020 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f   int bSmallMallo
24030 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
24040 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67     /* Avoid larg
24050 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
24060 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ions if true */.
24070 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
24080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24090 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
240a0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
240b0 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
240c0 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
240d0 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
240e0 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
240f0 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
24100 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
24110 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24120 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
24130 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
24140 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
24150 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
24160 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
24170 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
24180 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20   count */.  int 
24190 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20  nStmtSpill;     
241a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
241b0 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70   Stmt-journal sp
241c0 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65  ill-to-disk thre
241d0 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74  shold */.  sqlit
241e0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d  e3_mem_methods m
241f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
24200 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79  Low-level memory
24210 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65   allocation inte
24220 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
24230 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
24240 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20   mutex;      /* 
24250 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20  Low-level mutex 
24260 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
24270 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
24280 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20  thods2 pcache2; 
24290 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61   /* Low-level pa
242a0 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61  ge-cache interfa
242b0 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48  ce */.  void *pH
242c0 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
242d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61            /* Hea
242e0 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20  p storage space 
242f0 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20  */.  int nHeap; 
24300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24310 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
24320 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69  f pHeap[] */.  i
24330 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b  nt mnReq, mxReq;
24340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24350 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20   /* Min and max 
24360 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69  heap requests si
24370 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zes */.  sqlite3
24380 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20  _int64 szMmap;  
24390 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d             /* mm
243a0 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f  ap() space per o
243b0 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71  pen file */.  sq
243c0 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d  lite3_int64 mxMm
243d0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
243e0 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65  /* Maximum value
243f0 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20   for szMmap */. 
24400 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24420 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
24430 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
24440 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24460 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
24470 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
24480 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
24490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
244b0 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
244c0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
244d0 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
244e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
244f0 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
24500 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
24510 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
24520 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
24530 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
24540 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
24550 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
24560 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20   u32 szPma;     
24570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24580 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f     /* Maximum So
24590 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f  rter PMA size */
245a0 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
245b0 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
245c0 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
245d0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
245e0 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
245f0 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
24600 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
24610 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
24620 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24630 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24640 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
24650 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
24660 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
24670 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
24680 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24690 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
246a0 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
246b0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
246c0 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
246d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
246e0 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
246f0 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
24700 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
24710 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
24720 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
24730 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
24740 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
24750 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24770 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
24780 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
24790 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ized */.  int nR
247a0 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
247b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
247c0 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
247d0 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
247e0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
247f0 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
24800 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
24810 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
24820 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76  tialize() */.  v
24830 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
24840 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
24850 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
24860 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
24870 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
24880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24890 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
248a0 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
248b0 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
248c0 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
248d0 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
248e0 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
248f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
24900 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
24910 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23  logArg;.#endif.#
24920 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42  ifdef SQLITE_VDB
24930 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20  E_COVERAGE.  /* 
24940 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
24950 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e  llback (if not N
24960 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ULL) is invoked 
24970 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72  on every VDBE br
24980 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74  anch.  ** operat
24990 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61  ion.  Set the ca
249a0 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c  llback using SQL
249b0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
249c0 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f  E_COVERAGE..  */
249d0 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42  .  void (*xVdbeB
249e0 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73  ranch)(void*,uns
249f0 69 67 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c 75  igned iSrcLine,u
24a00 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b  8 eThis,u8 eMx);
24a10 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f    /* Callback */
24a20 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72  .  void *pVdbeBr
24a30 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20  anchArg;        
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24a60 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  1st argument */.
24a70 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
24a80 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
24a90 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61  .  int (*xTestCa
24aa0 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20  llback)(int);   
24ab0 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20       /* Invoked 
24ac0 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  by sqlite3FaultS
24ad0 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  im() */.#endif. 
24ae0 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
24af0 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
24b00 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
24b10 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
24b20 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f  alls */.  int iO
24b30 6e 63 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c  nceResetThreshol
24b40 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  d;          /* W
24b50 68 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f  hen to reset OP_
24b60 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f  Once counters */
24b70 0a 20 20 75 33 32 20 73 7a 53 6f 72 74 65 72 52  .  u32 szSorterR
24b80 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ef;             
24b90 20 20 20 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65       /* Min size
24ba0 20 69 6e 20 62 79 74 65 73 20 74 6f 20 75 73 65   in bytes to use
24bb0 20 73 6f 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a   sorter-refs */.
24bc0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  };../*.** This m
24bd0 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
24be0 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20  ide of assert() 
24bf0 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e  statements to in
24c00 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74  dicate that.** t
24c10 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c  he assert is onl
24c20 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c  y valid on a wel
24c30 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
24c40 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a  e.  Instead of:.
24c50 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
24c60 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65  ( X );.**.** One
24c70 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20   writes:.**.**  
24c80 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20     assert( X || 
24c90 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a  CORRUPT_DB );.**
24ca0 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69  .** CORRUPT_DB i
24cb0 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f  s true during no
24cc0 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rmal operation. 
24cd0 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73   CORRUPT_DB does
24ce0 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a   not indicate.**
24cf0 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
24d00 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79  se is definitely
24d10 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74   corrupt, only t
24d20 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20  hat it might be 
24d30 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20  corrupt..** For 
24d40 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c  most test cases,
24d50 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73   CORRUPT_DB is s
24d60 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e  et to false usin
24d70 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73  g a special.** s
24d80 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
24d90 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61  rol().  This ena
24da0 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74  bles assert() st
24db0 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76  atements to prov
24dc0 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74  e.** things that
24dd0 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65   are always true
24de0 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64   for well-formed
24df0 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
24e00 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44  define CORRUPT_D
24e10 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69  B  (sqlite3Confi
24e20 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d  g.neverCorrupt==
24e30 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  0)../*.** Contex
24e40 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
24e50 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
24e60 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
24e70 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
24e80 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
24e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ea0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
24eb0 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
24ec0 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72  */.  int (*xExpr
24ed0 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
24ee0 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f  *, Expr*);     /
24ef0 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65  * Callback for e
24f00 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
24f10 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  int (*xSelectCal
24f20 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53  lback)(Walker*,S
24f30 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c  elect*);  /* Cal
24f40 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
24f50 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  s */.  void (*xS
24f60 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28  electCallback2)(
24f70 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
24f80 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62  ;/* Second callb
24f90 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
24fa0 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
24fb0 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24fd0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
24fe0 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65  ueries */.  u8 e
24ff0 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c        /* A small
25020 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65   processing code
25030 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
25040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25060 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
25070 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
25080 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
25090 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
250a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
250b0 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
250c0 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  .    int n;     
250d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
250f0 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  * A counter */. 
25100 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20     int iCur;    
25110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25120 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25130 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  A cursor number 
25140 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
25150 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
25160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25170 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20   /* FROM clause 
25180 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72  */.    struct Sr
25190 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e  cCount *pSrcCoun
251a0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
251b0 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c   /* Counting col
251c0 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a  umn references *
251d0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75  /.    struct CCu
251e0 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74  rHint *pCCurHint
251f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25200 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43  /* Used by codeC
25210 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20  ursorHint() */. 
25220 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20     int *aiCol;  
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25240 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25250 61 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20  array of column 
25260 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73  indexes */.    s
25270 74 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a  truct IdxCover *
25280 70 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20  pIdxCover;      
25290 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63           /* Chec
252a0 6b 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65  k for index cove
252b0 72 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  rage */.    stru
252c0 63 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20  ct IdxExprTrans 
252d0 2a 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20  *pIdxTrans;     
252e0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74        /* Convert
252f0 20 69 64 78 65 64 20 65 78 70 72 20 74 6f 20 63   idxed expr to c
25300 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70  olumn */.    Exp
25310 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
25320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25330 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20         /* GROUP 
25340 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  BY clause */.   
25350 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
25360 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25370 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 41             /* HA
25380 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c  VING to WHERE cl
25390 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 20 20  ause ctx */.    
253a0 73 74 72 75 63 74 20 57 69 6e 64 6f 77 52 65 77  struct WindowRew
253b0 72 69 74 65 20 2a 70 52 65 77 72 69 74 65 3b 20  rite *pRewrite; 
253c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69 6e            /* Win
253d0 64 6f 77 20 72 65 77 72 69 74 65 20 63 6f 6e 74  dow rewrite cont
253e0 65 78 74 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ext */.    struc
253f0 74 20 57 68 65 72 65 43 6f 6e 73 74 20 2a 70 43  t WhereConst *pC
25400 6f 6e 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  onst;           
25410 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
25420 61 75 73 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a  ause constants *
25430 2f 0a 20 20 20 20 73 74 72 75 63 74 20 52 65 6e  /.    struct Ren
25440 61 6d 65 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b  ameCtx *pRename;
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25460 2f 2a 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e  /* RENAME COLUMN
25470 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20   context */.  } 
25480 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
25490 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
254a0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
254b0 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
254c0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
254d0 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
254e0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
254f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
25500 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
25510 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
25520 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
25530 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
25540 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
25550 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
25560 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
25570 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
25580 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57  e3ExprWalkNoop(W
25590 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
255a0 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
255b0 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72  tWalkNoop(Walker
255c0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
255d0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
255e0 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20  lkFail(Walker*, 
255f0 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66  Select*);.#ifdef
25600 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f   SQLITE_DEBUG.vo
25610 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
25620 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b  WalkAssert2(Walk
25630 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23  er*, Select*);.#
25640 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
25650 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
25660 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
25670 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
25680 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
25690 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
256a0 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
256b0 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
256c0 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
256d0 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
256e0 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
256f0 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
25700 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
25710 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
25720 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
25730 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
25740 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
25750 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
25760 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
25770 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
25780 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ure represents a
25790 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d   set of one or m
257a0 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d  ore CTEs.** (com
257b0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
257c0 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62  sions) created b
257d0 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20  y a single WITH 
257e0 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
257f0 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e  t With {.  int n
25800 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cte;            
25810 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
25820 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20  mber of CTEs in 
25830 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  the WITH clause 
25840 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65  */.  With *pOute
25850 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
25860 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69       /* Containi
25870 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  ng WITH clause, 
25880 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72  or NULL */.  str
25890 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20  uct Cte {       
258a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
258b0 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20  For each CTE in 
258c0 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  the WITH clause.
258d0 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ... */.    char 
258e0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
258f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
25900 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  me of this CTE *
25910 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
25920 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  pCols;          
25930 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
25940 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e   explicit column
25950 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20   names, or NULL 
25960 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
25970 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
25980 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
25990 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73  finition of this
259a0 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73   CTE */.    cons
259b0 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b  t char *zCteErr;
259c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
259d0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72  rror message for
259e0 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65   circular refere
259f0 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  nces */.  } a[1]
25a00 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  ;.};..#ifdef SQL
25a10 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
25a20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
25a30 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65  he TreeView obje
25a40 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70  ct is used for p
25a50 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74  rinting the cont
25a60 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73  ent of.** data s
25a70 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c  tructures on sql
25a80 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
25a90 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c  ) using a tree-l
25aa0 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72  ike view..*/.str
25ab0 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20  uct TreeView {. 
25ac0 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
25ad0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
25ae0 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74  h level of the t
25af0 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f  ree we are on */
25b00 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30  .  u8  bLine[100
25b10 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  ];         /* Dr
25b20 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63  aw vertical in c
25b30 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65  olumn i if bLine
25b40 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d  [i] is true */.}
25b50 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
25b60 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a  TE_DEBUG */../*.
25b70 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69  ** This object i
25b80 73 20 75 73 65 64 20 69 6e 20 76 61 72 69 6f 69  s used in varioi
25b90 75 73 20 77 61 79 73 2c 20 61 6c 6c 20 72 65 6c  us ways, all rel
25ba0 61 74 65 64 20 74 6f 20 77 69 6e 64 6f 77 20 66  ated to window f
25bb0 75 6e 63 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20  unctions.**.**  
25bc0 20 28 31 29 20 41 20 73 69 6e 67 6c 65 20 69 6e   (1) A single in
25bd0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
25be0 74 72 75 63 74 75 72 65 20 69 73 20 61 74 74 61  tructure is atta
25bf0 63 68 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20  ched to the.**  
25c00 20 20 20 20 20 74 68 65 20 45 78 70 72 2e 70 57       the Expr.pW
25c10 69 6e 20 66 69 65 6c 64 20 66 6f 72 20 65 61 63  in field for eac
25c20 68 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  h window functio
25c30 6e 20 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69  n in an expressi
25c40 6f 6e 20 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20  on tree..**     
25c50 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f    This object ho
25c60 6c 64 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74  lds the informat
25c70 69 6f 6e 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ion contained in
25c80 20 74 68 65 20 4f 56 45 52 20 63 6c 61 75 73 65   the OVER clause
25c90 2c 0a 2a 2a 20 20 20 20 20 20 20 70 6c 75 73 20  ,.**       plus 
25ca0 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64  additional field
25cb0 73 20 75 73 65 64 20 64 75 72 69 6e 67 20 63 6f  s used during co
25cc0 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a  de generation..*
25cd0 2a 0a 2a 2a 20 20 20 28 32 29 20 41 6c 6c 20 77  *.**   (2) All w
25ce0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
25cf0 69 6e 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  in a single SELE
25d00 43 54 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64  CT form a linked
25d10 2d 6c 69 73 74 0a 2a 2a 20 20 20 20 20 20 20 61  -list.**       a
25d20 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63  ttached to Selec
25d30 74 2e 70 57 69 6e 2e 20 20 54 68 65 20 57 69 6e  t.pWin.  The Win
25d40 64 6f 77 2e 70 46 75 6e 63 20 61 6e 64 20 57 69  dow.pFunc and Wi
25d50 6e 64 6f 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20  ndow.pExpr.**   
25d60 20 20 20 20 66 69 65 6c 64 73 20 70 6f 69 6e 74      fields point
25d70 20 62 61 63 6b 20 74 6f 20 74 68 65 20 65 78 70   back to the exp
25d80 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
25d90 74 68 65 20 77 69 6e 64 6f 77 20 66 75 6e 63 74  the window funct
25da0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29  ion..**.**   (3)
25db0 20 54 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68   The terms of th
25dc0 65 20 57 49 4e 44 4f 57 20 63 6c 61 75 73 65 20  e WINDOW clause 
25dd0 6f 66 20 61 20 53 45 4c 45 43 54 20 61 72 65 20  of a SELECT are 
25de0 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 74 68 69  instances of thi
25df0 73 0a 2a 2a 20 20 20 20 20 20 20 6f 62 6a 65 63  s.**       objec
25e00 74 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  t on a linked li
25e10 73 74 20 61 74 74 61 63 68 65 64 20 74 6f 20 53  st attached to S
25e20 65 6c 65 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a  elect.pWinDefn..
25e30 2a 2a 0a 2a 2a 20 54 68 65 20 75 73 65 73 20 28  **.** The uses (
25e40 31 29 20 61 6e 64 20 28 32 29 20 61 72 65 20 72  1) and (2) are r
25e50 65 61 6c 6c 79 20 74 68 65 20 73 61 6d 65 20 57  eally the same W
25e60 69 6e 64 6f 77 20 6f 62 6a 65 63 74 20 74 68 61  indow object tha
25e70 74 20 6a 75 73 74 20 68 61 70 70 65 6e 73 0a 2a  t just happens.*
25e80 2a 20 74 6f 20 62 65 20 61 63 63 65 73 73 69 62  * to be accessib
25e90 6c 65 20 69 6e 20 74 77 6f 20 64 69 66 66 65 72  le in two differ
25ea0 65 6e 74 20 77 61 79 73 2e 20 20 55 73 65 20 28  ent ways.  Use (
25eb0 33 29 20 69 73 20 61 72 65 20 73 65 70 61 72 61  3) is are separa
25ec0 74 65 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73  te objects..*/.s
25ed0 74 72 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20  truct Window {. 
25ee0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
25ef0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
25f00 20 6f 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20   of window (may 
25f10 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78  be NULL) */.  Ex
25f20 70 72 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69  prList *pPartiti
25f30 6f 6e 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49  on;   /* PARTITI
25f40 4f 4e 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ON BY clause */.
25f50 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
25f60 65 72 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44  erBy;     /* ORD
25f70 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
25f80 20 20 75 38 20 65 54 79 70 65 3b 20 20 20 20 20    u8 eType;     
25f90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
25fa0 52 41 4e 47 45 20 6f 72 20 54 4b 5f 52 4f 57 53  RANGE or TK_ROWS
25fb0 20 2a 2f 0a 20 20 75 38 20 65 53 74 61 72 74 3b   */.  u8 eStart;
25fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25fd0 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52   UNBOUNDED, CURR
25fe0 45 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f  ENT, PRECEDING o
25ff0 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20  r FOLLOWING */. 
26000 20 75 38 20 65 45 6e 64 3b 20 20 20 20 20 20 20   u8 eEnd;       
26010 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f           /* UNBO
26020 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20  UNDED, CURRENT, 
26030 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c  PRECEDING or FOL
26040 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 45 78 70 72  LOWING */.  Expr
26050 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
26060 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
26070 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52  n for "<expr> PR
26080 45 43 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78  ECEDING" */.  Ex
26090 70 72 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  pr *pEnd;       
260a0 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
260b0 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20  ion for "<expr> 
260c0 46 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20  FOLLOWING" */.  
260d0 57 69 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e  Window *pNextWin
260e0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  ;       /* Next 
260f0 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20  window function 
26100 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69  belonging to thi
26110 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78  s SELECT */.  Ex
26120 70 72 20 2a 70 46 69 6c 74 65 72 3b 20 20 20 20  pr *pFilter;    
26130 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 49 4c        /* The FIL
26140 54 45 52 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  TER expression *
26150 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75  /.  FuncDef *pFu
26160 6e 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  nc;         /* T
26170 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
26180 20 69 6e 74 20 69 45 70 68 43 73 72 3b 20 20 20   int iEphCsr;   
26190 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74           /* Part
261a0 69 74 69 6f 6e 20 62 75 66 66 65 72 20 6f 72 20  ition buffer or 
261b0 50 65 65 72 20 62 75 66 66 65 72 20 2a 2f 0a 20  Peer buffer */. 
261c0 20 69 6e 74 20 72 65 67 41 63 63 75 6d 3b 0a 20   int regAccum;. 
261d0 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 0a   int regResult;.
261e0 20 20 69 6e 74 20 63 73 72 41 70 70 3b 20 20 20    int csrApp;   
261f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e            /* Fun
26200 63 74 69 6f 6e 20 63 75 72 73 6f 72 20 28 75 73  ction cursor (us
26210 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a  ed by min/max) *
26220 2f 0a 20 20 69 6e 74 20 72 65 67 41 70 70 3b 20  /.  int regApp; 
26230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
26240 75 6e 63 74 69 6f 6e 20 72 65 67 69 73 74 65 72  unction register
26250 20 28 61 6c 73 6f 20 75 73 65 64 20 62 79 20 6d   (also used by m
26260 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74  in/max) */.  int
26270 20 72 65 67 50 61 72 74 3b 20 20 20 20 20 20 20   regPart;       
26280 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 69 6e       /* First in
26290 20 61 20 73 65 74 20 6f 66 20 72 65 67 69 73 74   a set of regist
262a0 65 72 73 20 68 6f 6c 64 69 6e 67 20 50 41 52 54  ers holding PART
262b0 49 54 49 4f 4e 20 42 59 0a 20 20 20 20 20 20 20  ITION BY.       
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262d0 20 20 20 2a 2a 20 61 6e 64 20 4f 52 44 45 52 20     ** and ORDER 
262e0 42 59 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  BY values for th
262f0 65 20 77 69 6e 64 6f 77 20 2a 2f 0a 20 20 45 78  e window */.  Ex
26300 70 72 20 2a 70 4f 77 6e 65 72 3b 20 20 20 20 20  pr *pOwner;     
26310 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
26320 69 6f 6e 20 6f 62 6a 65 63 74 20 74 68 69 73 20  ion object this 
26330 77 69 6e 64 6f 77 20 69 73 20 61 74 74 61 63 68  window is attach
26340 65 64 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e  ed to */.  int n
26350 42 75 66 66 65 72 43 6f 6c 3b 20 20 20 20 20 20  BufferCol;      
26360 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
26370 63 6f 6c 75 6d 6e 73 20 69 6e 20 62 75 66 66 65  columns in buffe
26380 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  r table */.  int
26390 20 69 41 72 67 43 6f 6c 3b 20 20 20 20 20 20 20   iArgCol;       
263a0 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 6f       /* Offset o
263b0 66 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  f first argument
263c0 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69   for this functi
263d0 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65  on */.};..#ifnde
263e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
263f0 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64 20 73 71  NDOWFUNC.void sq
26400 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74  lite3WindowDelet
26410 65 28 73 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64  e(sqlite3*, Wind
26420 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ow*);.void sqlit
26430 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65  e3WindowListDele
26440 74 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  te(sqlite3 *db, 
26450 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64  Window *p);.Wind
26460 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
26470 77 41 6c 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69  wAlloc(Parse*, i
26480 6e 74 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  nt, int, Expr*, 
26490 69 6e 74 20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  int , Expr*);.vo
264a0 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
264b0 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
264c0 78 70 72 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a  xpr*, Window*);.
264d0 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  int sqlite3Windo
264e0 77 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c  wCompare(Parse*,
264f0 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77   Window*, Window
26500 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26510 57 69 6e 64 6f 77 43 6f 64 65 49 6e 69 74 28 50  WindowCodeInit(P
26520 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  arse*, Window*);
26530 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
26540 64 6f 77 43 6f 64 65 53 74 65 70 28 50 61 72 73  dowCodeStep(Pars
26550 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 57 68 65  e*, Select*, Whe
26560 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e  reInfo*, int, in
26570 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  t);.int sqlite3W
26580 69 6e 64 6f 77 52 65 77 72 69 74 65 28 50 61 72  indowRewrite(Par
26590 73 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  se*, Select*);.i
265a0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 61 6e 64  nt sqlite3Expand
265b0 53 75 62 71 75 65 72 79 28 50 61 72 73 65 2a 2c  Subquery(Parse*,
265c0 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
265d0 69 74 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  item*);.void sql
265e0 69 74 65 33 57 69 6e 64 6f 77 55 70 64 61 74 65  ite3WindowUpdate
265f0 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a  (Parse*, Window*
26600 2c 20 57 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44  , Window*, FuncD
26610 65 66 2a 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71  ef*);.Window *sq
26620 6c 69 74 65 33 57 69 6e 64 6f 77 44 75 70 28 73  lite3WindowDup(s
26630 71 6c 69 74 65 33 20 2a 64 62 2c 20 45 78 70 72  qlite3 *db, Expr
26640 20 2a 70 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77   *pOwner, Window
26650 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71   *p);.Window *sq
26660 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69 73 74 44  lite3WindowListD
26670 75 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  up(sqlite3 *db, 
26680 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64  Window *p);.void
26690 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75   sqlite3WindowFu
266a0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 23  nctions(void);.#
266b0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
266c0 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74  lite3WindowDelet
266d0 65 28 61 2c 62 29 0a 23 20 64 65 66 69 6e 65 20  e(a,b).# define 
266e0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e  sqlite3WindowFun
266f0 63 74 69 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e  ctions().# defin
26700 65 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41  e sqlite3WindowA
26710 74 74 61 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e  ttach(a,b,c).#en
26720 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d  dif../*.** Assum
26730 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74  ing zIn points t
26740 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
26750 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72   of a UTF-8 char
26760 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63  acter,.** advanc
26770 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74  e zIn to point t
26780 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
26790 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46   of the next UTF
267a0 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f  -8 character..*/
267b0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
267c0 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b  SKIP_UTF8(zIn) {
267d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267e0 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20          \.  if( 
267f0 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30  (*(zIn++))>=0xc0
26800 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20   ){             
26810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26820 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a   \.    while( (*
26830 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38  zIn & 0xc0)==0x8
26840 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20  0 ){ zIn++; }   
26850 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20            \.  } 
26860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26890 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68     \.}../*.** Th
268a0 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20  e SQLITE_*_BKPT 
268b0 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74  macros are subst
268c0 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65  itutes for the e
268d0 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a  rror codes with.
268e0 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ** the same name
268f0 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65   but without the
26900 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20   _BKPT suffix.  
26910 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76  These macros inv
26920 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  oke.** routines 
26930 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20  that report the 
26940 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77  line-number on w
26950 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f  hich the error o
26960 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69  riginated.** usi
26970 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  ng sqlite3_log()
26980 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20  .  The routines 
26990 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63  also provide a c
269a0 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a  onvenient place.
269b0 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75  ** to set a debu
269c0 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e  gger breakpoint.
269d0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  .*/.int sqlite3R
269e0 65 70 6f 72 74 45 72 72 6f 72 28 69 6e 74 20 69  eportError(int i
269f0 45 72 72 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c  Err, int lineno,
26a00 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
26a10 70 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pe);.int sqlite3
26a20 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74  CorruptError(int
26a30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69  );.int sqlite3Mi
26a40 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a  suseError(int);.
26a50 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
26a60 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  penError(int);.#
26a70 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
26a80 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74  RRUPT_BKPT sqlit
26a90 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
26aa0 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
26ab0 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
26ac0 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73  KPT sqlite3Misus
26ad0 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  eError(__LINE__)
26ae0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
26af0 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71  CANTOPEN_BKPT sq
26b00 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
26b10 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66  or(__LINE__).#if
26b20 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
26b30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f  .  int sqlite3No
26b40 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
26b50 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72   int sqlite3Ioer
26b60 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29  rnomemError(int)
26b70 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  ;.  int sqlite3C
26b80 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28  orruptPgnoError(
26b90 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66  int,Pgno);.# def
26ba0 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
26bb0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d  _BKPT sqlite3Nom
26bc0 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
26bd0 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
26be0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b  E_IOERR_NOMEM_BK
26bf0 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e  PT sqlite3Ioerrn
26c00 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  omemError(__LINE
26c10 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  __).# define SQL
26c20 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f  ITE_CORRUPT_PGNO
26c30 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75  (P) sqlite3Corru
26c40 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49  ptPgnoError(__LI
26c50 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a  NE__,(P)).#else.
26c60 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
26c70 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54  NOMEM_BKPT SQLIT
26c80 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65  E_NOMEM.# define
26c90 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
26ca0 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
26cb0 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65  IOERR_NOMEM.# de
26cc0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
26cd0 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69  UPT_PGNO(P) sqli
26ce0 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
26cf0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66  __LINE__).#endif
26d00 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64  ../*.** FTS3 and
26d10 20 46 54 53 34 20 62 6f 74 68 20 72 65 71 75 69   FTS4 both requi
26d20 72 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  re virtual table
26d30 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20   support.*/.#if 
26d40 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
26d50 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
26d60 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
26d70 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75  _ENABLE_FTS3.# u
26d80 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
26d90 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a  LE_FTS4.#endif..
26da0 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
26db0 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
26dc0 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
26dd0 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
26de0 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
26df0 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
26e00 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
26e10 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
26e20 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  o call.** the SQ
26e30 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
26e40 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
26e50 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  as an alias for 
26e60 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
26e70 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
26e80 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
26e90 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
26ea0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
26eb0 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
26ec0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
26ed0 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  S3 1.#endif../*.
26ee0 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
26ef0 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
26f00 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
26f10 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
26f20 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
26f30 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
26f40 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
26f50 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
26f60 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
26f70 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
26f80 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
26f90 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
26fa0 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
26fb0 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
26fc0 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
26fd0 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
26fe0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
26ff0 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
27000 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
27010 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
27020 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
27030 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
27040 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
27050 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
27060 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
27070 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
27080 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
27090 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
270a0 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
270b0 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
270c0 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
270d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
270e0 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
270f0 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
27100 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
27110 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
27120 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
27130 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
27140 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
27150 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
27160 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
27170 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
27180 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
27190 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
271a0 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
271b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
271c0 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
271d0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
271e0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
271f0 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
27200 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
27210 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
27220 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
27230 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
27240 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
27250 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
27260 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
27270 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
27280 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
27290 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
272a0 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
272b0 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
272c0 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20  ed char)(x)]).# 
272d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
272e0 71 75 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69  quote(x)   (sqli
272f0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
27300 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
27310 30 78 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  0x80).#else.# de
27320 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
27330 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
27340 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
27350 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
27360 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
27370 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
27380 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
27390 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
273a0 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
273b0 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
273c0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
273d0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
273e0 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
273f0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
27400 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27410 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
27420 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
27430 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
27440 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
27450 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
27460 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27470 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
27480 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
27490 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
274a0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
274b0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75  fine sqlite3Isqu
274c0 6f 74 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27  ote(x)   ((x)=='
274d0 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28  "'||(x)=='\''||(
274e0 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60  x)=='['||(x)=='`
274f0 27 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  ').#endif.int sq
27500 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
27510 29 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e  );../*.** Intern
27520 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74  al function prot
27530 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71  otypes.*/.int sq
27540 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e  lite3StrICmp(con
27550 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
27560 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
27570 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
27580 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
27590 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65  qlite3ColumnType
275a0 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b  (Column*,char*);
275b0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
275c0 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33  StrNICmp sqlite3
275d0 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73  _strnicmp..int s
275e0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74  qlite3MallocInit
275f0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
27600 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f  ite3MallocEnd(vo
27610 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  id);.void *sqlit
27620 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76  e3Malloc(u64);.v
27630 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
27640 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69  ocZero(u64);.voi
27650 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
27660 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c  ocZero(sqlite3*,
27670 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
27680 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
27690 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
276a0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
276b0 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74  allocRawNN(sqlit
276c0 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  e3*, u64);.char 
276d0 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
276e0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
276f0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
27700 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
27710 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
27720 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  ar*, u64);.char 
27730 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75  *sqlite3DbSpanDu
27740 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
27750 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
27760 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  r*);.void *sqlit
27770 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
27780 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
27790 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
277a0 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
277b0 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
277c0 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
277d0 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
277e0 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
277f0 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
27800 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
27810 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
27820 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c  FreeNN(sqlite3*,
27830 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
27840 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
27850 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
27860 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
27870 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
27880 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
27890 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
278a0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
278b0 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
278c0 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
278d0 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66  fault(void);.#if
278e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
278f0 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
27900 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
27910 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
27920 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
27930 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  id));.#endif.int
27940 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
27950 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
27960 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
27970 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
27980 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
27990 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
279a0 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
279b0 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
279c0 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
279d0 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
279e0 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
279f0 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
27a00 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
27a10 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
27a20 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
27a30 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
27a40 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
27a50 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
27a60 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
27a70 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
27a80 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
27a90 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
27aa0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
27ab0 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
27ac0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
27ad0 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
27ae0 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
27af0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
27b00 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
27b10 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
27b20 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
27b30 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
27b40 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64  e(D,P).#else.# d
27b50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
27b60 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
27b70 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
27b80 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
27b90 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
27ba0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
27bb0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
27bc0 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
27bd0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
27be0 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
27bf0 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
27c00 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f  #endif../* Do no
27c10 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d  t allow both MEM
27c20 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33  SYS5 and MEMSYS3
27c30 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74   to be defined t
27c40 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65  ogether.  If the
27c50 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c  y.** are, disabl
27c60 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66  e MEMSYS3.*/.#if
27c70 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
27c80 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20  E_MEMSYS5.const 
27c90 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
27ca0 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
27cb0 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b  etMemsys5(void);
27cc0 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  .#undef SQLITE_E
27cd0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65  NABLE_MEMSYS3.#e
27ce0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
27cf0 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
27d00 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
27d10 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
27d20 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
27d30 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
27d40 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
27d50 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71  _MUTEX_OMIT.  sq
27d60 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
27d70 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
27d80 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76  e3DefaultMutex(v
27d90 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
27da0 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
27db0 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70  nst *sqlite3Noop
27dc0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
27dd0 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
27de0 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28  lite3MutexAlloc(
27df0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
27e00 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69  te3MutexInit(voi
27e10 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  d);.  int sqlite
27e20 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b  3MutexEnd(void);
27e30 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
27e40 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
27e50 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69  X_OMIT) && !defi
27e60 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
27e70 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71  _NOOP).  void sq
27e80 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69  lite3MemoryBarri
27e90 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  er(void);.#else.
27ea0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27eb0 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a  MemoryBarrier().
27ec0 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f  #endif..sqlite3_
27ed0 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61  int64 sqlite3Sta
27ee0 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76  tusValue(int);.v
27ef0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
27f00 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  sUp(int, int);.v
27f10 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
27f20 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b  sDown(int, int);
27f30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
27f40 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74  tusHighwater(int
27f50 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
27f60 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64  te3LookasideUsed
27f70 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b  (sqlite3*,int*);
27f80 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d  ../* Access to m
27f90 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73  utexes used by s
27fa0 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20  qlite3_status() 
27fb0 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  */.sqlite3_mutex
27fc0 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31   *sqlite3Pcache1
27fd0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c  Mutex(void);.sql
27fe0 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
27ff0 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76  te3MallocMutex(v
28000 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e  oid);..#if defin
28010 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
28020 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43  _MULTITHREADED_C
28030 48 45 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e  HECKS) && !defin
28040 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
28050 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74  OMIT).void sqlit
28060 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e  e3MutexWarnOnCon
28070 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f  tention(sqlite3_
28080 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23  mutex*);.#else.#
28090 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
280a0 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e  utexWarnOnConten
280b0 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a  tion(x).#endif..
280c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
280d0 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
280e0 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
280f0 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
28100 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
28110 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
28120 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
28130 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
28140 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
28150 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
28160 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
28170 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
28180 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
28190 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
281a0 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
281b0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
281c0 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
281d0 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
281e0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
281f0 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
28200 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
28210 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
28220 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
28230 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
28240 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
28250 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
28260 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
28270 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
28280 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72  lues */.};..char
28290 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66   *sqlite3MPrintf
282a0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
282b0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
282c0 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e  r *sqlite3VMPrin
282d0 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
282e0 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
282f0 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
28300 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
28310 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
28320 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20  AVE_OS_TRACE).  
28330 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
28340 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
28350 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
28360 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
28370 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
28380 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
28390 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
283a0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
283b0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
283c0 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73  _DEBUG).  void s
283d0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
283e0 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  pr(TreeView*, co
283f0 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  nst Expr*, u8);.
28400 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
28410 65 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69  eeViewBareExprLi
28420 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
28430 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  nst ExprList*, c
28440 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
28450 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
28460 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65  iewExprList(Tree
28470 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
28480 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73  rList*, u8, cons
28490 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
284a0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
284b0 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a  Select(TreeView*
284c0 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c  , const Select*,
284d0 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
284e0 69 74 65 33 54 72 65 65 56 69 65 77 57 69 74 68  ite3TreeViewWith
284f0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
28500 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 69  t With*, u8);.#i
28510 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
28520 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 76  T_WINDOWFUNC.  v
28530 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
28540 69 65 77 57 69 6e 64 6f 77 28 54 72 65 65 56 69  iewWindow(TreeVi
28550 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f  ew*, const Windo
28560 77 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  w*, u8);.  void 
28570 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57  sqlite3TreeViewW
28580 69 6e 46 75 6e 63 28 54 72 65 65 56 69 65 77 2a  inFunc(TreeView*
28590 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c  , const Window*,
285a0 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 23 65 6e   u8);.#endif.#en
285b0 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74  dif...void sqlit
285c0 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
285d0 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63   **, sqlite3*, c
285e0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
285f0 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
28600 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
28610 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
28620 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  d sqlite3Dequote
28630 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  (char*);.void sq
28640 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54  lite3TokenInit(T
28650 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e  oken*,char*);.in
28660 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
28670 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
28680 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
28690 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
286a0 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
286b0 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
286c0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
286d0 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
286e0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
286f0 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
28700 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
28710 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
28720 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
28730 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
28740 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
28750 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
28760 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
28770 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
28780 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65  .void sqlite3Cle
28790 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50  arTempRegCache(P
287a0 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53  arse*);.#ifdef S
287b0 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
287c0 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e  sqlite3NoTempsIn
287d0 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
287e0 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78  ,int);.#endif.Ex
287f0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
28800 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
28810 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69  t,const Token*,i
28820 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
28830 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c  e3Expr(sqlite3*,
28840 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
28850 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28860 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73  prAttachSubtrees
28870 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
28880 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
28890 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72  pr *sqlite3PExpr
288a0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78  (Parse*, int, Ex
288b0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
288c0 64 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64  d sqlite3PExprAd
288d0 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  dSelect(Parse*, 
288e0 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  Expr*, Select*);
288f0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
28900 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45  prAnd(sqlite3*,E
28910 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
28920 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
28930 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45  unction(Parse*,E
28940 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
28950 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28960 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61  ite3ExprAssignVa
28970 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20  rNumber(Parse*, 
28980 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  Expr*, u32);.voi
28990 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c  d sqlite3ExprDel
289a0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
289b0 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  pr*);.ExprList *
289c0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41  sqlite3ExprListA
289d0 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70  ppend(Parse*,Exp
289e0 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45  rList*,Expr*);.E
289f0 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
28a00 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56 65  ExprListAppendVe
28a10 63 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70 72  ctor(Parse*,Expr
28a20 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78  List*,IdList*,Ex
28a30 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
28a40 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72  e3ExprListSetSor
28a50 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a  tOrder(ExprList*
28a60 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
28a70 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61  te3ExprListSetNa
28a80 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  me(Parse*,ExprLi
28a90 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  st*,Token*,int);
28aa0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28ab0 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72  rListSetSpan(Par
28ac0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 63 6f  se*,ExprList*,co
28ad0 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
28ae0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
28af0 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65  ite3ExprListDele
28b00 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
28b10 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c  rList*);.u32 sql
28b20 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67  ite3ExprListFlag
28b30 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  s(const ExprList
28b40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
28b50 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68  nit(sqlite3*, ch
28b60 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
28b70 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
28b80 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  oid*, int, char*
28b90 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
28ba0 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28 73  sqlite3InitOne(s
28bb0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 68  qlite3*, int, ch
28bc0 61 72 2a 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  ar**, u32);.void
28bd0 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
28be0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
28bf0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
28c00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28c10 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
28c20 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65  E.Module *sqlite
28c30 33 50 72 61 67 6d 61 56 74 61 62 52 65 67 69 73  3PragmaVtabRegis
28c40 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ter(sqlite3*,con
28c50 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b  st char *zName);
28c60 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
28c70 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
28c80 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
28c90 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
28ca0 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
28cb0 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69  chema(sqlite3*,i
28cc0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28cd0 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73  3CollapseDatabas
28ce0 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29  eArray(sqlite3*)
28cf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
28d00 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e  mmitInternalChan
28d10 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ges(sqlite3*);.v
28d20 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
28d30 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c  eColumnNames(sql
28d40 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69  ite3*,Table*);.i
28d50 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  nt sqlite3Column
28d60 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61  sFromExprList(Pa
28d70 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  rse*,ExprList*,i
28d80 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76  16*,Column**);.v
28d90 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
28da0 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e  tAddColumnTypeAn
28db0 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65  dCollation(Parse
28dc0 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a  *,Table*,Select*
28dd0 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
28de0 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65  3ResultSetOfSele
28df0 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74  ct(Parse*,Select
28e00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28e10 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28  OpenMasterTable(
28e20 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49  Parse *, int);.I
28e30 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69  ndex *sqlite3Pri
28e40 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62  maryKeyIndex(Tab
28e50 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65  le*);.i16 sqlite
28e60 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49  3ColumnOfIndex(I
28e70 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69  ndex*, i16);.voi
28e80 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61  d sqlite3StartTa
28e90 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
28ea0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
28eb0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53  ,int,int);.#if S
28ec0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
28ed0 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f  DEN_COLUMNS.  vo
28ee0 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
28ef0 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61  PropertiesFromNa
28f00 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d  me(Table*, Colum
28f10 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  n*);.#else.# def
28f20 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  ine sqlite3Colum
28f30 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e  nPropertiesFromN
28f40 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f  ame(T,C) /* no-o
28f50 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64  p */.#endif.void
28f60 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
28f70 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  n(Parse*,Token*,
28f80 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
28f90 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28  lite3AddNotNull(
28fa0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
28fb0 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69  id sqlite3AddPri
28fc0 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20  maryKey(Parse*, 
28fd0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
28fe0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
28ff0 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43  sqlite3AddCheckC
29000 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
29010 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
29020 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74  qlite3AddDefault
29030 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70  Value(Parse*,Exp
29040 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
29050 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
29060 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c  d sqlite3AddColl
29070 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20  ateType(Parse*, 
29080 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
29090 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61  lite3EndTable(Pa
290a0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
290b0 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a  n*,u8,Select*);.
290c0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
290d0 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Uri(const char*,
290e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69  const char*,unsi
290f0 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20  gned int*,.     
29100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
29110 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61  qlite3_vfs**,cha
29120 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74  r**,char **);.Bt
29130 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61  ree *sqlite3DbNa
29140 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65  meToBtree(sqlite
29150 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
29160 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
29170 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66  UNTESTABLE.# def
29180 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
29190 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b  Sim(X) SQLITE_OK
291a0 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c  .#else.  int sql
291b0 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74  ite3FaultSim(int
291c0 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65  );.#endif..Bitve
291d0 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
291e0 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
291f0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
29200 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
29210 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
29220 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42  vecTestNotNull(B
29230 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
29240 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
29250 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
29260 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
29270 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
29280 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
29290 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
292a0 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
292b0 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
292c0 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
292d0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
292e0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e  TE_UNTESTABLE.in
292f0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
29300 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
29310 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f  nt*);.#endif..Ro
29320 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
29330 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
29340 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29350 6f 77 53 65 74 44 65 6c 65 74 65 28 76 6f 69 64  owSetDelete(void
29360 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29370 52 6f 77 53 65 74 43 6c 65 61 72 28 76 6f 69 64  RowSetClear(void
29380 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29390 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77  RowSetInsert(Row
293a0 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20  Set*, i64);.int 
293b0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
293c0 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69  t(RowSet*, int i
293d0 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
293e0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
293f0 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
29400 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
29410 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
29420 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
29430 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
29440 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74  ,Select*,int,int
29450 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
29460 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
29470 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53  W) || !defined(S
29480 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
29490 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73  ALTABLE).  int s
294a0 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
294b0 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  umnNames(Parse*,
294c0 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
294d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
294e0 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
294f0 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a  s(A,B) 0.#endif.
29500 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
29510 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e  ATTACHED>30.  in
29520 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41  t sqlite3DbMaskA
29530 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b  llZero(yDbMask);
29540 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
29550 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61  ite3DropTable(Pa
29560 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
29570 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
29580 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54  sqlite3CodeDropT
29590 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62  able(Parse*, Tab
295a0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
295b0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
295c0 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
295d0 2c 20 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20  , Table*);.void 
295e0 73 71 6c 69 74 65 33 46 72 65 65 49 6e 64 65 78  sqlite3FreeIndex
295f0 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
29600 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
29610 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
29620 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c  EMENT.  void sql
29630 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
29640 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50  tBegin(Parse *pP
29650 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71  arse);.  void sq
29660 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
29670 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61  ntEnd(Parse *pPa
29680 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  rse);.#else.# de
29690 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
296a0 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58  incrementBegin(X
296b0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
296c0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
296d0 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69  nd(X).#endif.voi
296e0 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28  d sqlite3Insert(
296f0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
29700 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
29710 74 2a 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a  t*, int, Upsert*
29720 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
29730 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
29740 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
29750 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
29760 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
29770 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
29780 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a   IdList*, Token*
29790 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64  );.int sqlite3Id
297a0 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74  ListIndex(IdList
297b0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
297c0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
297d0 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73  SrcListEnlarge(s
297e0 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
297f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72  *, int, int);.Sr
29800 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
29810 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  cListAppend(sqli
29820 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
29830 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
29840 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
29850 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
29860 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
29870 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
29880 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
29890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
298b0 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
298c0 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
298d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
298e0 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
298f0 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
29900 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
29910 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46   sqlite3SrcListF
29920 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20  uncArgs(Parse*, 
29930 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
29940 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
29950 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
29960 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
29970 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
29980 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
29990 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
299a0 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
299b0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
299c0 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
299d0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
299e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
299f0 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
29a00 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
29a10 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
29a20 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
29a30 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
29a40 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
29a50 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
29a60 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
29a70 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73  ,char**);.void s
29a80 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65  qlite3CreateInde
29a90 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  x(Parse*,Token*,
29aa0 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c  Token*,SrcList*,
29ab0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f  ExprList*,int,To
29ac0 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
29ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ae0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  Expr*, int, int,
29af0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
29b00 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
29b10 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
29b20 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
29b30 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
29b40 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
29b50 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
29b60 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
29b70 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
29b80 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
29b90 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
29ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bb0 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
29bc0 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f  *,u32,Expr*);.vo
29bd0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
29be0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
29bf0 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65   Select*);.Table
29c00 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
29c10 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53  Lookup(Parse*, S
29c20 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
29c30 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28  lite3IsReadOnly(
29c40 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
29c50 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29c60 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73  e3OpenTable(Pars
29c70 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e  e*, int iCur, in
29c80 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69  t iDb, Table*, i
29c90 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  nt);.#if defined
29ca0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  (SQLITE_ENABLE_U
29cb0 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
29cc0 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
29cd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
29ce0 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69  UERY).Expr *sqli
29cf0 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61  te3LimitWhere(Pa
29d00 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
29d10 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
29d20 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
29d30 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
29d40 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
29d50 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
29d60 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
29d70 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
29d80 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
29d90 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
29da0 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45  ist*,Expr*,int,E
29db0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a  xprList*,Expr*,.
29dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29dd0 20 20 20 55 70 73 65 72 74 2a 29 3b 0a 57 68 65     Upsert*);.Whe
29de0 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
29df0 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
29e00 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
29e10 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
29e20 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
29e30 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
29e40 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
29e50 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57 68  LogEst sqlite3Wh
29e60 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
29e70 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
29e80 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
29e90 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
29ea0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
29eb0 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
29ec0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
29ed0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72  t sqlite3WhereOr
29ee0 64 65 72 42 79 4c 69 6d 69 74 4f 70 74 4c 61 62  derByLimitOptLab
29ef0 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
29f00 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
29f10 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e  IsSorted(WhereIn
29f20 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
29f30 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61  3WhereContinueLa
29f40 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
29f50 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
29f60 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72  eBreakLabel(Wher
29f70 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
29f80 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61  ite3WhereOkOnePa
29f90 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  ss(WhereInfo*, i
29fa0 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e  nt*);.#define ON
29fb0 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30  EPASS_OFF      0
29fc0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f          /* Use o
29fd0 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c  f ONEPASS not al
29fe0 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  lowed */.#define
29ff0 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20   ONEPASS_SINGLE 
2a000 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e    1        /* ON
2a010 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20  EPASS valid for 
2a020 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64  a single row upd
2a030 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ate */.#define O
2a040 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20  NEPASS_MULTI    
2a050 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50  2        /* ONEP
2a060 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72  ASS is valid for
2a070 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
2a080 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
2a090 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43  prCodeLoadIndexC
2a0a0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e  olumn(Parse*, In
2a0b0 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
2a0c0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a0d0 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
2a0e0 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  mn(Parse*, Table
2a0f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2a100 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
2a110 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
2a120 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65  lumnOfTable(Vdbe
2a130 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2a140 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2a150 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d  sqlite3ExprCodeM
2a160 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
2a170 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2a180 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2a190 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2a1a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a1b0 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50  e3ExprCodeCopy(P
2a1c0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a1d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a1e0 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62  ExprCodeFactorab
2a1f0 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  le(Parse*, Expr*
2a200 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2a210 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
2a220 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
2a230 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2a240 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50  e3ExprCodeTemp(P
2a250 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a260 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2a270 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50  ExprCodeTarget(P
2a280 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a290 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a2a0 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65  ExprCodeAndCache
2a2b0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2a2c0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a2d0 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73  3ExprCodeExprLis
2a2e0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  t(Parse*, ExprLi
2a2f0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  st*, int, int, u
2a300 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  8);.#define SQLI
2a310 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20  TE_ECEL_DUP     
2a320 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20   0x01  /* Deep, 
2a330 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69  not shallow copi
2a340 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
2a350 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52  LITE_ECEL_FACTOR
2a360 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74     0x02  /* Fact
2a370 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20  or out constant 
2a380 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  terms */.#define
2a390 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46   SQLITE_ECEL_REF
2a3a0 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55        0x04  /* U
2a3b0 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e  se ExprList.u.x.
2a3c0 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23  iOrderByCol */.#
2a3d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
2a3e0 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38  EL_OMITREF  0x08
2a3f0 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70    /* Omit if Exp
2a400 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72  rList.u.x.iOrder
2a410 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71  ByCol */.void sq
2a420 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
2a430 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2a440 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2a450 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
2a460 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
2a470 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2a480 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
2a490 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45  lseDup(Parse*, E
2a4a0 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
2a4b0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46  .Table *sqlite3F
2a4c0 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33  indTable(sqlite3
2a4d0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
2a4e0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
2a4f0 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57  fine LOCATE_VIEW
2a500 20 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65      0x01.#define
2a510 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20   LOCATE_NOERR   
2a520 30 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69  0x02.Table *sqli
2a530 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50  te3LocateTable(P
2a540 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c  arse*,u32 flags,
2a550 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2a560 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
2a570 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
2a580 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c  ableItem(Parse*,
2a590 75 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74  u32 flags,struct
2a5a0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
2a5b0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
2a5c0 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65  FindIndex(sqlite
2a5d0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
2a5e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2a5f0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
2a600 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73  AndDeleteTable(s
2a610 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
2a620 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2a630 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2a640 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74  eleteIndex(sqlit
2a650 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
2a660 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2a670 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c  e3Vacuum(Parse*,
2a680 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2a690 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
2a6a0 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  ar**, sqlite3*, 
2a6b0 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
2a6c0 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
2a6d0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
2a6e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2a6f0 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73 65  xprCompare(Parse
2a700 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  *,Expr*, Expr*, 
2a710 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a720 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69 70  3ExprCompareSkip
2a730 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
2a740 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a750 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28  ExprListCompare(
2a760 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c  ExprList*, ExprL
2a770 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
2a780 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69  sqlite3ExprImpli
2a790 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45 78  esExpr(Parse*,Ex
2a7a0 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
2a7b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a7c0 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52  rImpliesNonNullR
2a7d0 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76  ow(Expr*,int);.v
2a7e0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
2a7f0 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73  nalyzeAggregates
2a800 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2a810 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2a820 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
2a830 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78  gList(NameContex
2a840 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  t*,ExprList*);.i
2a850 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2a860 76 65 72 65 64 42 79 49 6e 64 65 78 28 45 78 70  veredByIndex(Exp
2a870 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 49 6e  r*, int iCur, In
2a880 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20  dex *pIdx);.int 
2a890 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55  sqlite3FunctionU
2a8a0 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a  sesThisSrc(Expr*
2a8b0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62  , SrcList*);.Vdb
2a8c0 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62  e *sqlite3GetVdb
2a8d0 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64  e(Parse*);.#ifnd
2a8e0 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
2a8f0 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  ABLE.void sqlite
2a900 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
2a910 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2a920 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
2a930 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  te(void);.#endif
2a940 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
2a950 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
2a960 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2a970 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
2a980 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
2a990 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2a9a0 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
2a9b0 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
2a9c0 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
2a9d0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2a9e0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
2a9f0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
2aa00 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61 63  qlite3EndTransac
2aa10 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29  tion(Parse*,int)
2aa20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61  ;.void sqlite3Sa
2aa30 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20  vepoint(Parse*, 
2aa40 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  int, Token*);.vo
2aa50 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53  id sqlite3CloseS
2aa60 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65  avepoints(sqlite
2aa70 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  3 *);.void sqlit
2aa80 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43  e3LeaveMutexAndC
2aa90 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74  loseZombie(sqlit
2aaa0 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
2aab0 33 45 78 70 72 49 64 54 6f 54 72 75 65 46 61 6c  3ExprIdToTrueFal
2aac0 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  se(Expr*);.int s
2aad0 71 6c 69 74 65 33 45 78 70 72 54 72 75 74 68 56  qlite3ExprTruthV
2aae0 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  alue(const Expr*
2aaf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2ab00 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
2ab10 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2ab20 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
2ab30 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
2ab40 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
2ab50 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
2ab60 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e  n(Expr*, u8);.in
2ab70 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
2ab80 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70 42 79  onstantOrGroupBy
2ab90 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2aba0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2abb0 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62  sqlite3ExprIsTab
2abc0 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  leConstant(Expr*
2abd0 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  ,int);.#ifdef SQ
2abe0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
2abf0 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c  OR_HINTS.int sql
2ac00 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73  ite3ExprContains
2ac10 53 75 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b  Subquery(Expr*);
2ac20 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2ac30 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72  te3ExprIsInteger
2ac40 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69  (Expr*, int*);.i
2ac50 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  nt sqlite3ExprCa
2ac60 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78  nBeNull(const Ex
2ac70 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2ac80 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69  3ExprNeedsNoAffi
2ac90 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74  nityChange(const
2aca0 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69   Expr*, char);.i
2acb0 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  nt sqlite3IsRowi
2acc0 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  d(const char*);.
2acd0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
2ace0 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20  rateRowDelete(. 
2acf0 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a     Parse*,Table*
2ad00 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e  ,Trigger*,int,in
2ad10 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c  t,int,i16,u8,u8,
2ad20 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  u8,int);.void sq
2ad30 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
2ad40 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73  IndexDelete(Pars
2ad50 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2ad60 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2ad70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e  ;.int sqlite3Gen
2ad80 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61  erateIndexKey(Pa
2ad90 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
2ada0 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  t, int, int, int
2adb0 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76  *,Index*,int);.v
2adc0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2add0 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50  vePartIdxLabel(P
2ade0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
2adf0 73 71 6c 69 74 65 33 45 78 70 72 52 65 66 65 72  sqlite3ExprRefer
2ae00 65 6e 63 65 73 55 70 64 61 74 65 64 43 6f 6c 75  encesUpdatedColu
2ae10 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c 69 6e  mn(Expr*,int*,in
2ae20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2ae30 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
2ae40 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
2ae50 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c  Table*,int*,int,
2ae60 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  int,int,int,.   
2ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae90 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a    u8,u8,int,int*
2aea0 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  ,int*,Upsert*);.
2aeb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2aec0 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20  ABLE_NULL_TRIM. 
2aed0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74   void sqlite3Set
2aee0 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62  MakeRecordP5(Vdb
2aef0 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
2af00 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2af10 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50  e3SetMakeRecordP
2af20 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  5(A,B).#endif.vo
2af30 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
2af40 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
2af50 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
2af60 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69  t,int,int*,int,i
2af70 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  nt,int);.int sql
2af80 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
2af90 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
2afa0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c  Table*, int, u8,
2afb0 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c   int, u8*, int*,
2afc0 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   int*);.void sql
2afd0 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
2afe0 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  eration(Parse*, 
2aff0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2b000 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74  sqlite3MultiWrit
2b010 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
2b020 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28  sqlite3MayAbort(
2b030 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2b040 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61  lite3HaltConstra
2b050 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
2b060 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c   int, char*, i8,
2b070 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2b080 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69  e3UniqueConstrai
2b090 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
2b0a0 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
2b0b0 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72  lite3RowidConstr
2b0c0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
2b0d0 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20  , Table*);.Expr 
2b0e0 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28  *sqlite3ExprDup(
2b0f0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
2b100 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  nt);.ExprList *s
2b110 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75  qlite3ExprListDu
2b120 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c  p(sqlite3*,ExprL
2b130 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69  ist*,int);.SrcLi
2b140 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
2b150 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  stDup(sqlite3*,S
2b160 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64  rcList*,int);.Id
2b170 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
2b180 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
2b190 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74  IdList*);.Select
2b1a0 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44   *sqlite3SelectD
2b1b0 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  up(sqlite3*,Sele
2b1c0 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ct*,int);.void s
2b1d0 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c  qlite3InsertBuil
2b1e0 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66  tinFuncs(FuncDef
2b1f0 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20  *,int);.FuncDef 
2b200 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63  *sqlite3FindFunc
2b210 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tion(sqlite3*,co
2b220 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38  nst char*,int,u8
2b230 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
2b240 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69  e3RegisterBuilti
2b250 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  nFunctions(void)
2b260 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2b270 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75  gisterDateTimeFu
2b280 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
2b290 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2b2a0 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e  terPerConnection
2b2b0 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
2b2c0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2b2d0 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
2b2e0 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ckOk(sqlite3*);.
2b2f0 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
2b300 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73  yCheckSickOrOk(s
2b310 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
2b320 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b  qlite3ChangeCook
2b330 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ie(Parse*, int);
2b340 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2b350 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
2b360 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2b370 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2b380 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ).void sqlite3Ma
2b390 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61  terializeView(Pa
2b3a0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
2b3b0 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45  pr*, ExprList*,E
2b3c0 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69  xpr*,int);.#endi
2b3d0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2b3e0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20  E_OMIT_TRIGGER. 
2b3f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
2b400 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  inTrigger(Parse*
2b410 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  , Token*,Token*,
2b420 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c  int,int,IdList*,
2b430 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  SrcList*,.      
2b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b450 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20       Expr*,int, 
2b460 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
2b470 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65  ite3FinishTrigge
2b480 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
2b490 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rStep*, Token*);
2b4a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2b4b0 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65  ropTrigger(Parse
2b4c0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
2b4d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2b4e0 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
2b4f0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a  Parse*, Trigger*
2b500 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
2b510 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
2b520 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
2b530 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  e*, int, ExprLis
2b540 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b  t*, int *pMask);
2b550 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
2b560 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50  te3TriggerList(P
2b570 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  arse *, Table *)
2b580 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2b590 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50  CodeRowTrigger(P
2b5a0 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a  arse*, Trigger *
2b5b0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
2b5c0 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a  , int, Table *,.
2b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5e0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
2b5f0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
2b600 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
2b610 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50  wTriggerDirect(P
2b620 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20  arse *, Trigger 
2b630 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
2b640 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
2b650 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69  id sqliteViewTri
2b660 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61  ggers(Parse*, Ta
2b670 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
2b680 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
2b690 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2b6a0 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71  teTriggerStep(sq
2b6b0 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53  lite3*, TriggerS
2b6c0 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  tep*);.  Trigger
2b6d0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
2b6e0 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73  ggerSelectStep(s
2b6f0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
2b700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b720 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2b730 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2b740 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
2b750 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2b760 49 6e 73 65 72 74 53 74 65 70 28 50 61 72 73 65  InsertStep(Parse
2b770 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
2b780 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7a0 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63             Selec
2b7b0 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20  t*,u8,Upsert*,. 
2b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7e0 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2b7f0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2b800 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
2b810 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
2b820 64 61 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c  dateStep(Parse*,
2b830 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
2b840 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20  , Expr*, u8,.   
2b850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b870 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2b880 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2b890 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
2b8a0 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
2b8b0 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f  teStep(Parse*,To
2b8c0 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20  ken*, Expr*,.   
2b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8f0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2b900 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2b910 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
2b920 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
2b930 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  e3*, Trigger*);.
2b940 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e    void sqlite3Un
2b950 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
2b960 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  gger(sqlite3*,in
2b970 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
2b980 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69    u32 sqlite3Tri
2b990 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73  ggerColmask(Pars
2b9a0 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72  e*,Trigger*,Expr
2b9b0 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61  List*,int,int,Ta
2b9c0 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66  ble*,int);.# def
2b9d0 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
2b9e0 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29  Toplevel(p) ((p)
2b9f0 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70  ->pToplevel ? (p
2ba00 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28  )->pToplevel : (
2ba10 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  p)).# define sql
2ba20 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70  ite3IsToplevel(p
2ba30 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
2ba40 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  l==0).#else.# de
2ba50 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
2ba60 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c  gersExist(B,C,D,
2ba70 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20  E,F) 0.# define 
2ba80 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
2ba90 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69  gger(A,B).# defi
2baa0 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  ne sqlite3DropTr
2bab0 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20  iggerPtr(A,B).# 
2bac0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e  define sqlite3Un
2bad0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
2bae0 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65  gger(A,B,C).# de
2baf0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
2bb00 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43  RowTrigger(A,B,C
2bb10 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20  ,D,E,F,G,H,I).# 
2bb20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2bb30 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
2bb40 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a  ct(A,B,C,D,E,F).
2bb50 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2bb60 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59  TriggerList(X, Y
2bb70 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
2bb80 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
2bb90 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20  l(p) p.# define 
2bba0 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65  sqlite3IsTopleve
2bbb0 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20  l(p) 1.# define 
2bbc0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
2bbd0 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c  lmask(A,B,C,D,E,
2bbe0 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  F,G) 0.#endif..i
2bbf0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
2bc00 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
2bc10 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2bc20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2bc30 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
2bc40 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2bc50 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
2bc60 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
2bc70 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
2bc80 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
2bc90 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
2bca0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
2bcb0 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
2bcc0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
2bcd0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68  Parse*,Expr*,Sch
2bce0 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a  ema*,SrcList*);.
2bcf0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
2bd00 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e  hCheck(Parse*,in
2bd10 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
2bd20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2bd30 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
2bd40 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
2bd50 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c  textPush(Parse*,
2bd60 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63   AuthContext*, c
2bd70 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
2bd80 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
2bd90 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f  ontextPop(AuthCo
2bda0 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73  ntext*);.  int s
2bdb0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f  qlite3AuthReadCo
2bdc0 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  l(Parse*, const 
2bdd0 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
2bde0 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  ar *, int);.#els
2bdf0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2be00 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63  e3AuthRead(a,b,c
2be10 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,d).# define sql
2be20 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c  ite3AuthCheck(a,
2be30 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49  b,c,d,e)    SQLI
2be40 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
2be50 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
2be60 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64  tPush(a,b,c).# d
2be70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
2be80 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20  hContextPop(a)  
2be90 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64  ((void)(a)).#end
2bea0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
2beb0 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
2bec0 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  pr*, Expr*, Expr
2bed0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2bee0 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Detach(Parse*, E
2bef0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2bf00 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78  te3FixInit(DbFix
2bf10 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74  er*, Parse*, int
2bf20 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2bf30 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  onst Token*);.in
2bf40 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c  t sqlite3FixSrcL
2bf50 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72  ist(DbFixer*, Sr
2bf60 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
2bf70 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62  ite3FixSelect(Db
2bf80 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  Fixer*, Select*)
2bf90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2bfa0 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45  Expr(DbFixer*, E
2bfb0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2bfc0 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62  e3FixExprList(Db
2bfd0 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  Fixer*, ExprList
2bfe0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2bff0 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62  ixTriggerStep(Db
2c000 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53  Fixer*, TriggerS
2c010 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tep*);.int sqlit
2c020 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
2c030 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69  r *z, double*, i
2c040 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
2c050 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
2c060 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29  st char *, int*)
2c070 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2c080 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  i(const char*);.
2c090 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c0a0 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71  MIT_UTF16.int sq
2c0b0 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65  lite3Utf16ByteLe
2c0c0 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44  n(const void *pD
2c0d0 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b  ata, int nChar);
2c0e0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2c0f0 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
2c100 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
2c110 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
2c120 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
2c130 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
2c140 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
2c150 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
2c160 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
2c170 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
2c180 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2c190 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2c1a0 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
2c1b0 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
2c1c0 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
2c1d0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
2c1e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
2c1f0 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20  _SCANSTATUS) || 
2c200 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
2c210 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
2c220 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c  3_OR_STAT4) || \
2c230 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
2c240 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49  ITE_EXPLAIN_ESTI
2c250 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20  MATED_ROWS).u64 
2c260 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
2c270 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64  nt(LogEst);.#end
2c280 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65  if.VList *sqlite
2c290 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65  3VListAdd(sqlite
2c2a0 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  3*,VList*,const 
2c2b0 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  char*,int,int);.
2c2c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2c2d0 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d  te3VListNumToNam
2c2e0 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69  e(VList*,int);.i
2c2f0 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  nt sqlite3VListN
2c300 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c  ameToNum(VList*,
2c310 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2c320 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
2c330 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
2c340 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
2c350 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
2c360 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
2c370 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
2c380 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
2c390 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
2c3a0 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
2c3b0 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
2c3c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
2c3d0 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
2c3e0 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
2c3f0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
2c400 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2c410 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
2c420 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
2c430 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
2c440 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
2c450 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2c460 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
2c470 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
2c480 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
2c490 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
2c4a0 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
2c4b0 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
2c4c0 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
2c4d0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
2c4e0 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
2c4f0 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
2c500 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
2c510 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
2c520 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
2c530 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
2c540 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
2c550 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
2c560 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
2c570 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
2c580 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
2c590 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
2c5a0 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
2c5b0 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
2c5c0 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
2c5d0 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
2c5e0 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
2c5f0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
2c600 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
2c610 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
2c620 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2c630 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
2c640 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
2c650 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
2c660 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
2c670 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c  xAffinityStr(sql
2c680 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  ite3*, Index*);.
2c690 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
2c6a0 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c  eAffinity(Vdbe*,
2c6b0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63   Table*, int);.c
2c6c0 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
2c6d0 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
2c6e0 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
2c6f0 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
2c700 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
2c710 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
2c720 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
2c730 63 68 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c  char sqlite3Tabl
2c740 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  eColumnAffinity(
2c750 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61  Table*,int);.cha
2c760 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66  r sqlite3ExprAff
2c770 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
2c780 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  r);.int sqlite3A
2c790 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
2c7a0 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38  *, i64*, int, u8
2c7b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
2c7c0 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73  cOrHexToI64(cons
2c7d0 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a  t char*, i64*);.
2c7e0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
2c7f0 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33  rWithMsg(sqlite3
2c800 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
2c810 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  ar*,...);.void s
2c820 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
2c830 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
2c840 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72  sqlite3SystemErr
2c850 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  or(sqlite3*,int)
2c860 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48  ;.void *sqlite3H
2c870 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33  exToBlob(sqlite3
2c880 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
2c890 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c  , int n);.u8 sql
2c8a0 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74  ite3HexToInt(int
2c8b0 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   h);.int sqlite3
2c8c0 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73  TwoPartName(Pars
2c8d0 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  e *, Token *, To
2c8e0 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29  ken *, Token **)
2c8f0 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ;..#if defined(S
2c900 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
2c910 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20  AME).const char 
2c920 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28  *sqlite3ErrName(
2c930 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
2c940 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2c950 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 69  LE_DESERIALIZE.i
2c960 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62 49  nt sqlite3MemdbI
2c970 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  nit(void);.#endi
2c980 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
2c990 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
2c9a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2c9b0 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
2c9c0 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
2c9d0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
2c9e0 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
2c9f0 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
2ca00 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
2ca10 74 65 33 49 73 42 69 6e 61 72 79 28 63 6f 6e 73  te3IsBinary(cons
2ca20 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c  t CollSeq*);.Col
2ca30 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63  lSeq *sqlite3Loc
2ca40 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  ateCollSeq(Parse
2ca50 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20   *pParse, const 
2ca60 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c  char*zName);.Col
2ca70 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70  lSeq *sqlite3Exp
2ca80 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  rCollSeq(Parse *
2ca90 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45  pParse, Expr *pE
2caa0 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  xpr);.CollSeq *s
2cab0 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c  qlite3ExprNNColl
2cac0 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
2cad0 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
2cae0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2caf0 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72  CollSeqMatch(Par
2cb00 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  se*,Expr*,Expr*)
2cb10 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2cb20 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b  xprAddCollateTok
2cb30 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  en(Parse *pParse
2cb40 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54  , Expr*, const T
2cb50 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70  oken*, int);.Exp
2cb60 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
2cb70 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50  dCollateString(P
2cb80 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73  arse*,Expr*,cons
2cb90 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a  t char*);.Expr *
2cba0 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43  sqlite3ExprSkipC
2cbb0 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69  ollate(Expr*);.i
2cbc0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43  nt sqlite3CheckC
2cbd0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
2cbe0 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20  CollSeq *);.int 
2cbf0 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65  sqlite3CheckObje
2cc00 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  ctName(Parse *, 
2cc10 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76  const char *);.v
2cc20 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53  oid sqlite3VdbeS
2cc30 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  etChanges(sqlite
2cc40 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  3 *, int);.int s
2cc50 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69  qlite3AddInt64(i
2cc60 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2cc70 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36  lite3SubInt64(i6
2cc80 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2cc90 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34  ite3MulInt64(i64
2cca0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
2ccb0 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29  te3AbsInt32(int)
2ccc0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2ccd0 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53  ENABLE_8_3_NAMES
2cce0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c  .void sqlite3Fil
2ccf0 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63  eSuffix3(const c
2cd00 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65  har*, char*);.#e
2cd10 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2cd20 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
2cd30 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73  X,Y).#endif.u8 s
2cd40 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
2cd50 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75  (const char *z,u
2cd60 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20  8);..const void 
2cd70 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78  *sqlite3ValueTex
2cd80 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t(sqlite3_value*
2cd90 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2cda0 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c  e3ValueBytes(sql
2cdb0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
2cdc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2cdd0 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65  lueSetStr(sqlite
2cde0 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63  3_value*, int, c
2cdf0 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a  onst void *,u8,.
2ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce10 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28          void(*)(
2ce20 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
2ce30 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c  lite3ValueSetNul
2ce40 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  l(sqlite3_value*
2ce50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2ce60 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
2ce70 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
2ce80 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
2ce90 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
2cea0 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   *);.#ifndef SQL
2ceb0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63  ITE_OMIT_UTF16.c
2cec0 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
2ced0 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
2cee0 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2cef0 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  , u8);.#endif.in
2cf00 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  t sqlite3ValueFr
2cf10 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  omExpr(sqlite3 *
2cf20 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38  , Expr *, u8, u8
2cf30 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
2cf40 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
2cf50 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2cf60 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ity(sqlite3_valu
2cf70 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69  e *, u8, u8);.#i
2cf80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
2cf90 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e  LGAMATION.extern
2cfa0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2cfb0 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f  char sqlite3Opco
2cfc0 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78  deProperty[];.ex
2cfd0 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20  tern const char 
2cfe0 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59  sqlite3StrBINARY
2cff0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2d000 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
2d010 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
2d020 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
2d030 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2d040 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
2d050 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2d060 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
2d070 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
2d080 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
2d090 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
2d0a0 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
2d0b0 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48  .extern FuncDefH
2d0c0 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74  ash sqlite3Built
2d0d0 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66  inFunctions;.#if
2d0e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2d0f0 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20  _WSD.extern int 
2d100 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
2d110 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  te;.#endif.#endi
2d120 66 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  f.#ifdef VDBE_PR
2d130 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71 6c  OFILE.extern sql
2d140 69 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c 69  ite3_uint64 sqli
2d150 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b 0a  te3NProfileCnt;.
2d160 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2d170 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
2d180 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2d190 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2d1a0 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50  sqlite3Reindex(P
2d1b0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2d1c0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2d1d0 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f  ite3AlterFunctio
2d1e0 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
2d1f0 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d  qlite3AlterRenam
2d200 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  eTable(Parse*, S
2d210 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  rcList*, Token*)
2d220 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2d230 74 65 72 52 65 6e 61 6d 65 43 6f 6c 75 6d 6e 28  terRenameColumn(
2d240 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2d250 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2d260 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
2d270 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
2d280 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
2d290 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
2d2a0 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
2d2b0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
2d2c0 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
2d2d0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
2d2e0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
2d2f0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e  lite3*, int);.in
2d300 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
2d310 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  select(Parse*, E
2d320 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  xpr *, int, int)
2d330 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2d340 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
2d350 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
2d360 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
2d370 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67  lite3SelectWrong
2d380 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61  NumTermsError(Pa
2d390 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c  rse *pParse, Sel
2d3a0 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c  ect *p);.int sql
2d3b0 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d  ite3MatchSpanNam
2d3c0 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  e(const char*, c
2d3d0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2d3e0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2d3f0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
2d400 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d  e3ResolveExprNam
2d410 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
2d420 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
2d430 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c  ite3ResolveExprL
2d440 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  istNames(NameCon
2d450 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  text*, ExprList*
2d460 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2d470 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65  esolveSelectName
2d480 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  s(Parse*, Select
2d490 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
2d4a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2d4b0 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e  solveSelfReferen
2d4c0 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ce(Parse*,Table*
2d4d0 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ,int,Expr*,ExprL
2d4e0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2d4f0 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72  e3ResolveOrderGr
2d500 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65  oupBy(Parse*, Se
2d510 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lect*, ExprList*
2d520 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2d530 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
2d540 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a  mnDefault(Vdbe *
2d550 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
2d560 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2d570 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64  e3AlterFinishAdd
2d580 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2d590 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
2d5a0 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e  qlite3AlterBegin
2d5b0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
2d5c0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 76  *, SrcList *);.v
2d5d0 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 6e 61  oid *sqlite3Rena
2d5e0 6d 65 54 6f 6b 65 6e 4d 61 70 28 50 61 72 73 65  meTokenMap(Parse
2d5f0 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f 6b 65 6e 2a  *, void*, Token*
2d600 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2d610 65 6e 61 6d 65 54 6f 6b 65 6e 52 65 6d 61 70 28  enameTokenRemap(
2d620 50 61 72 73 65 2a 2c 20 76 6f 69 64 20 2a 70 54  Parse*, void *pT
2d630 6f 2c 20 76 6f 69 64 20 2a 70 46 72 6f 6d 29 3b  o, void *pFrom);
2d640 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e  .void sqlite3Ren
2d650 61 6d 65 45 78 70 72 55 6e 6d 61 70 28 50 61 72  ameExprUnmap(Par
2d660 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
2d670 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 45  d sqlite3RenameE
2d680 78 70 72 6c 69 73 74 55 6e 6d 61 70 28 50 61 72  xprlistUnmap(Par
2d690 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  se*, ExprList*);
2d6a0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2d6b0 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73  3GetCollSeq(Pars
2d6c0 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20  e*, u8, CollSeq 
2d6d0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2d6e0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66  .char sqlite3Aff
2d6f0 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20  inityType(const 
2d700 63 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b  char*, Column*);
2d710 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2d720 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
2d730 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
2d740 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
2d750 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
2d760 61 6e 64 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33  andler*, sqlite3
2d770 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  _file*);.int sql
2d780 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
2d790 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
2d7a0 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
2d7b0 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
2d7c0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
2d7d0 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
2d7e0 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
2d7f0 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
2d800 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
2d810 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
2d820 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
2d830 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
2d840 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
2d850 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2d860 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
2d870 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
2d880 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
2d890 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2d8a0 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
2d8b0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2d8c0 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69  3SchemaClear(voi
2d8d0 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71  d *);.Schema *sq
2d8e0 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73  lite3SchemaGet(s
2d8f0 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20  qlite3 *, Btree 
2d900 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2d910 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
2d920 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
2d930 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71   *);.KeyInfo *sq
2d940 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f  lite3KeyInfoAllo
2d950 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69  c(sqlite3*,int,i
2d960 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2d970 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65  3KeyInfoUnref(Ke
2d980 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
2d990 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2d9a0 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  Ref(KeyInfo*);.K
2d9b0 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2d9c0 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61  eyInfoOfIndex(Pa
2d9d0 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b  rse*, Index*);.K
2d9e0 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2d9f0 65 79 49 6e 66 6f 46 72 6f 6d 45 78 70 72 4c 69  eyInfoFromExprLi
2da00 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  st(Parse*, ExprL
2da10 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
2da20 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2da30 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
2da40 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61  3KeyInfoIsWritea
2da50 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23  ble(KeyInfo*);.#
2da60 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2da70 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69  3CreateFunc(sqli
2da80 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
2da90 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76  r *, int, int, v
2daa0 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a  oid *,.  void (*
2dab0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2dac0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2dad0 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
2dae0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2daf0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2db00 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20  3_value **), .  
2db10 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2db20 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f  _context*),.  vo
2db30 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2db40 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64  ontext*),.  void
2db50 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2db60 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2db70 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20  3_value **), .  
2db80 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
2db90 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76  pDestructor.);.v
2dba0 6f 69 64 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44  oid sqlite3NoopD
2dbb0 65 73 74 72 75 63 74 6f 72 28 76 6f 69 64 2a 29  estructor(void*)
2dbc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2dbd0 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29  mFault(sqlite3*)
2dbe0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2dbf0 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29  mClear(sqlite3*)
2dc00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
2dc10 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
2dc20 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2dc30 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
2dc40 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
2dc50 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2dc60 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
2dc70 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  *, sqlite3*, cha
2dc80 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63  r*, int, int);.c
2dc90 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
2dca0 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
2dcb0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
2dcc0 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
2dcd0 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
2dce0 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
2dcf0 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
2dd00 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
2dd10 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
2dd20 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
2dd30 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
2dd40 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
2dd50 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2dd60 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
2dd70 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
2dd80 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
2dd90 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
2dda0 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
2ddb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2ddc0 43 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20  CheckIN(Parse*, 
2ddd0 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  Expr*);.#else.# 
2dde0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
2ddf0 70 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53  prCheckIN(x,y) S
2de00 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a  QLITE_OK.#endif.
2de10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2de20 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
2de30 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65  TAT4.void sqlite
2de40 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e  3AnalyzeFunction
2de50 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
2de60 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65  ite3Stat4ProbeSe
2de70 74 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73  tValue(.    Pars
2de80 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
2de90 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
2dea0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  ,int,int,int*);.
2deb0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2dec0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61  ValueFromExpr(Pa
2ded0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  rse*, Expr*, u8,
2dee0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
2def0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2df00 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e  tat4ProbeFree(Un
2df10 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a  packedRecord*);.
2df20 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2df30 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c  Column(sqlite3*,
2df40 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
2df50 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  t, int, sqlite3_
2df60 76 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73  value**);.char s
2df70 71 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d  qlite3IndexColum
2df80 6e 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  nAffinity(sqlite
2df90 33 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29  3*, Index*, int)
2dfa0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
2dfb0 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
2dfc0 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
2dfd0 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23  ated parser.*/.#
2dfe0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
2dff0 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69  ALGAMATION.  voi
2e000 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72  d *sqlite3Parser
2e010 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75  Alloc(void*(*)(u
2e020 36 34 29 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20  64), Parse*);.  
2e030 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2e040 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
2e050 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23  id(*)(void*));.#
2e060 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2e070 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20  e3Parser(void*, 
2e080 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74  int, Token);.int
2e090 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 61   sqlite3ParserFa
2e0a0 6c 6c 62 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66  llback(int);.#if
2e0b0 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
2e0c0 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73  ACKDEPTH.  int s
2e0d0 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63  qlite3ParserStac
2e0e0 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65  kPeak(void*);.#e
2e0f0 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
2e100 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73  e3AutoLoadExtens
2e110 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2e120 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2e130 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
2e140 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
2e150 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
2e160 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73  (sqlite3*);.#els
2e170 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2e180 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
2e190 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  s(X).#endif..#if
2e1a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e1b0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
2e1c0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
2e1d0 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69  eLock(Parse *, i
2e1e0 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e  nt, int, u8, con
2e1f0 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73  st char *);.#els
2e200 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2e210 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77  te3TableLock(v,w
2e220 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a  ,x,y,z).#endif..
2e230 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
2e240 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ST.  int sqlite3
2e250 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64  Utf8To8(unsigned
2e260 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
2e270 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2e280 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2e290 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2e2a0 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23  e3VtabClear(Y).#
2e2b0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2e2c0 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51  VtabSync(X,Y) SQ
2e2d0 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2e2e0 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  e sqlite3VtabRol
2e2f0 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69  lback(X).#  defi
2e300 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  ne sqlite3VtabCo
2e310 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e  mmit(X).#  defin
2e320 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
2e330 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66  ync(db) 0.#  def
2e340 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ine sqlite3VtabL
2e350 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
2e360 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2e370 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2e380 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2e390 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
2e3a0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
2e3b0 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
2e3c0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
2e3d0 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
2e3e0 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
2e3f0 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
2e400 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2e410 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
2e420 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
2e430 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2e440 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
2e450 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
2e460 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
2e470 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
2e480 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a  e3 *db, Vdbe*);.
2e490 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2e4a0 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
2e4b0 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
2e4c0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
2e4d0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
2e4e0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2e4f0 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
2e500 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2e510 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
2e520 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
2e530 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2e540 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
2e550 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2e560 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
2e570 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
2e580 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2e590 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2e5a0 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65  sg(Vdbe*, sqlite
2e5b0 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61  3_vtab*);.   VTa
2e5c0 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  ble *sqlite3GetV
2e5d0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
2e5e0 54 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75  Table*);.   Modu
2e5f0 6c 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43  le *sqlite3VtabC
2e600 72 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20  reateModule(.   
2e610 20 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20    sqlite3*,.    
2e620 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20   const char*,.  
2e630 20 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33     const sqlite3
2e640 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76  _module*,.     v
2e650 6f 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28  oid*,.     void(
2e660 2a 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a  *)(void*).   );.
2e670 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2e680 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
2e690 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30  ((db)->nVTrans>0
2e6a0 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e   && (db)->aVTran
2e6b0 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74  s==0).#endif.int
2e6c0 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
2e6d0 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50  ymousTableInit(P
2e6e0 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a  arse*,Module*);.
2e6f0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2e700 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c  EponymousTableCl
2e710 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64  ear(sqlite3*,Mod
2e720 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ule*);.void sqli
2e730 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61  te3VtabMakeWrita
2e740 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ble(Parse*,Table
2e750 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e760 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50  VtabBeginParse(P
2e770 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2e780 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69  oken*, Token*, i
2e790 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2e7a0 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65  3VtabFinishParse
2e7b0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
2e7c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2e7d0 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a  abArgInit(Parse*
2e7e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2e7f0 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72  tabArgExtend(Par
2e800 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  se*, Token*);.in
2e810 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2e820 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a  lCreate(sqlite3*
2e830 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2e840 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69  r *, char **);.i
2e850 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2e860 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a  llConnect(Parse*
2e870 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  , Table*);.int s
2e880 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
2e890 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20  stroy(sqlite3*, 
2e8a0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
2e8b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2e8c0 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33  tabBegin(sqlite3
2e8d0 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46   *, VTable *);.F
2e8e0 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56  uncDef *sqlite3V
2e8f0 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74  tabOverloadFunct
2e900 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75  ion(sqlite3 *,Fu
2e910 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67  ncDef*, int nArg
2e920 2c 20 45 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65  , Expr*);.sqlite
2e930 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
2e940 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73  tmtCurrentTime(s
2e950 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
2e960 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
2e970 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28  eParameterIndex(
2e980 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
2e990 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2e9a0 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
2e9b0 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74  dings(sqlite3_st
2e9c0 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74  mt *, sqlite3_st
2e9d0 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  mt *);.void sqli
2e9e0 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50  te3ParserReset(P
2e9f0 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
2ea00 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62  te3Reprepare(Vdb
2ea10 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2ea20 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65  3ExprListCheckLe
2ea30 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70  ngth(Parse*, Exp
2ea40 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
2ea50 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ar*);.CollSeq *s
2ea60 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70  qlite3BinaryComp
2ea70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  areCollSeq(Parse
2ea80 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
2ea90 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2eaa0 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e  TempInMemory(con
2eab0 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f  st sqlite3*);.co
2eac0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2ead0 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
2eae0 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  (int);.#ifndef S
2eaf0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
2eb00 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63   int sqlite3Chec
2eb10 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c  kpoint(sqlite3*,
2eb20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
2eb30 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71   int*);.  int sq
2eb40 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
2eb50 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ook(void*,sqlite
2eb60 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
2eb70 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  nt);.#endif.#ifn
2eb80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2eb90 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69  CTE.  With *sqli
2eba0 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65  te3WithAdd(Parse
2ebb0 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45  *,With*,Token*,E
2ebc0 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
2ebd0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2ebe0 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69  3WithDelete(sqli
2ebf0 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76  te3*,With*);.  v
2ec00 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50  oid sqlite3WithP
2ec10 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68  ush(Parse*, With
2ec20 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64  *, u8);.#else.#d
2ec30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
2ec40 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65  hPush(x,y,z).#de
2ec50 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
2ec60 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64  Delete(x,y).#end
2ec70 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2ec80 45 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20 20  E_OMIT_UPSERT.  
2ec90 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55  Upsert *sqlite3U
2eca0 70 73 65 72 74 4e 65 77 28 73 71 6c 69 74 65 33  psertNew(sqlite3
2ecb0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
2ecc0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
2ecd0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2ece0 65 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 73  e3UpsertDelete(s
2ecf0 71 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29  qlite3*,Upsert*)
2ed00 3b 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69  ;.  Upsert *sqli
2ed10 74 65 33 55 70 73 65 72 74 44 75 70 28 73 71 6c  te3UpsertDup(sql
2ed20 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  ite3*,Upsert*);.
2ed30 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 70 73    int sqlite3Ups
2ed40 65 72 74 41 6e 61 6c 79 7a 65 54 61 72 67 65 74  ertAnalyzeTarget
2ed50 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
2ed60 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69  ,Upsert*);.  voi
2ed70 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  d sqlite3UpsertD
2ed80 6f 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 55  oUpdate(Parse*,U
2ed90 70 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e  psert*,Table*,In
2eda0 64 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65  dex*,int);.#else
2edb0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2edc0 55 70 73 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c  UpsertNew(v,w,x,
2edd0 79 2c 7a 29 20 28 28 55 70 73 65 72 74 2a 29 30  y,z) ((Upsert*)0
2ede0 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
2edf0 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 78 2c  3UpsertDelete(x,
2ee00 79 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  y).#define sqlit
2ee10 65 33 55 70 73 65 72 74 44 75 70 28 78 2c 79 29  e3UpsertDup(x,y)
2ee20 20 20 20 20 20 20 20 28 28 55 70 73 65 72 74 2a         ((Upsert*
2ee30 29 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  )0).#endif.../* 
2ee40 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
2ee50 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
2ee60 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
2ee70 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
2ee80 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
2ee90 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
2eea0 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
2eeb0 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
2eec0 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
2eed0 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
2eee0 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
2eef0 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
2ef00 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
2ef10 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2ef20 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
2ef30 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
2ef40 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
2ef50 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
2ef60 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
2ef70 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
2ef80 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
2ef90 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69  lity is.** provi
2efa0 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
2efb0 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
2efc0 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
2efd0 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
2efe0 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
2eff0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2f000 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
2f010 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2f020 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
2f030 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2f040 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
2f050 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2f060 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
2f070 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
2f080 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2f090 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
2f0a0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2f0b0 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
2f0c0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
2f0d0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
2f0e0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
2f0f0 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
2f100 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2f110 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
2f120 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2f130 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
2f140 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
2f150 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
2f160 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
2f170 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2f180 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
2f190 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
2f1a0 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
2f1b0 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2f1c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2f1d0 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
2f1e0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2f1f0 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
2f200 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
2f210 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
2f220 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
2f230 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
2f240 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
2f250 73 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65  s(a)        0.#e
2f260 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2f270 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2f280 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
2f290 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
2f2a0 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
2f2b0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c    int sqlite3FkL
2f2c0 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  ocateIndex(Parse
2f2d0 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49  *,Table*,FKey*,I
2f2e0 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23  ndex**,int**);.#
2f2f0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2f300 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
2f310 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,b).  #define sq
2f320 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
2f330 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65  ex(a,b,c,d,e).#e
2f340 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
2f350 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
2f360 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
2f370 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
2f380 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
2f390 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2f3a0 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
2f3b0 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
2f3c0 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
2f3d0 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
2f3e0 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
2f3f0 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2f400 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
2f410 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
2f420 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
2f430 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
2f440 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
2f450 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
2f460 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20  E_UNTESTABLE.** 
2f470 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
2f480 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2f490 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76  E_UNTESTABLE.  v
2f4a0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2f4b0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
2f4c0 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
2f4d0 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
2f4e0 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
2f4f0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2f500 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
2f510 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
2f520 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
2f530 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f  lloc().#endif../
2f540 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  *.** Allowed ret
2f550 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
2f560 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
2f570 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ex().*/.#define 
2f580 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
2f590 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61        1   /* Sea
2f5a0 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66  rch the rowid of
2f5b0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64   the table */.#d
2f5c0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
2f5d0 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20  PH          2   
2f5e0 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68  /* Search an eph
2f5f0 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f  emeral b-tree */
2f600 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2f610 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33  X_INDEX_ASC    3
2f620 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2f630 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a  ndex ASCENDING *
2f640 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2f650 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20  EX_INDEX_DESC   
2f660 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  4   /* Existing 
2f670 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47  index DESCENDING
2f680 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2f690 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20  NDEX_NOOP       
2f6a0 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c    5   /* No tabl
2f6b0 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65  e available. Use
2f6c0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a   comparisons */.
2f6d0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c  /*.** Allowed fl
2f6e0 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20  ags for the 3rd 
2f6f0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
2f700 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2f710 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  )..*/.#define IN
2f720 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20  _INDEX_NOOP_OK  
2f730 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b     0x0001  /* OK
2f740 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e   to return IN_IN
2f750 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66  DEX_NOOP */.#def
2f760 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d  ine IN_INDEX_MEM
2f770 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20  BERSHIP  0x0002 
2f780 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2f790 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73  used for members
2f7a0 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66  hip test */.#def
2f7b0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f  ine IN_INDEX_LOO
2f7c0 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  P        0x0004 
2f7d0 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2f7e0 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a  used as a loop *
2f7f0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  /.int sqlite3Fin
2f800 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
2f810 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69  , Expr *, u32, i
2f820 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74  nt*, int*);..int
2f830 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f   sqlite3JournalO
2f840 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20  pen(sqlite3_vfs 
2f850 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2f860 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c   sqlite3_file *,
2f870 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
2f880 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
2f890 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
2f8a0 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
2f8b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
2f8c0 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c  MIC_WRITE) \. ||
2f8d0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2f8e0 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
2f8f0 4d 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74  MIC_WRITE).  int
2f900 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
2f910 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
2f920 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  le *);.#endif..i
2f930 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2f940 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69  lIsInMemory(sqli
2f950 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f  te3_file *p);.vo
2f960 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
2f970 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
2f980 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  _file *);..void 
2f990 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
2f9a0 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72  ightAndFlags(Par
2f9b0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2f9c0 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45   *p);.#if SQLITE
2f9d0 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
2f9e0 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53  0.  int sqlite3S
2f9f0 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
2fa00 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74  Select *);.  int
2fa10 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2fa20 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20  kHeight(Parse*, 
2fa30 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  int);.#else.  #d
2fa40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
2fa50 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29  ectExprHeight(x)
2fa60 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2fa70 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
2fa80 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ght(x,y).#endif.
2fa90 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34  .u32 sqlite3Get4
2faa0 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b  byte(const u8*);
2fab0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74  .void sqlite3Put
2fac0 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b  4byte(u8*, u32);
2fad0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2fae0 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
2faf0 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  TIFY.  void sqli
2fb00 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
2fb10 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20  cked(sqlite3 *, 
2fb20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f  sqlite3 *);.  vo
2fb30 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2fb40 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c  tionUnlocked(sql
2fb50 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69  ite3 *db);.  voi
2fb60 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2fb70 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65  ionClosed(sqlite
2fb80 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20  3 *db);.#else.  
2fb90 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2fba0 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
2fbb0 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
2fbc0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2fbd0 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23  nUnlocked(x).  #
2fbe0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2fbf0 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78  nnectionClosed(x
2fc00 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
2fc10 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2fc20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2fc30 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63  erTrace(FILE*, c
2fc40 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23  har *);.#endif.#
2fc50 69 66 20 64 65 66 69 6e 65 64 28 59 59 43 4f 56  if defined(YYCOV
2fc60 45 52 41 47 45 29 0a 20 20 69 6e 74 20 73 71 6c  ERAGE).  int sql
2fc70 69 74 65 33 50 61 72 73 65 72 43 6f 76 65 72 61  ite3ParserCovera
2fc80 67 65 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69  ge(FILE*);.#endi
2fc90 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
2fca0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
2fcb0 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
2fcc0 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
2fcd0 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
2fce0 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
2fcf0 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
2fd00 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
2fd10 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
2fd20 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
2fd30 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ges..*/.#ifdef S
2fd40 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
2fd50 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f  RACE.# define IO
2fd60 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71  TRACE(A)  if( sq
2fd70 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20  lite3IoTrace ){ 
2fd80 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41  sqlite3IoTrace A
2fd90 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ; }.  void sqlit
2fda0 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
2fdb0 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f  (Vdbe*);.SQLITE_
2fdc0 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52  API SQLITE_EXTER
2fdd0 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43  N void (SQLITE_C
2fde0 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54  DECL *sqlite3IoT
2fdf0 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72  race)(const char
2fe00 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20  *,...);.#else.# 
2fe10 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
2fe20 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2fe30 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
2fe40 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2fe50 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73  * These routines
2fe60 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66   are available f
2fe70 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65  or the mem2.c de
2fe80 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61  bugging memory a
2fe90 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79  llocator.** only
2fea0 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64  .  They are used
2feb0 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
2fec0 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73  different "types
2fed0 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61  " of memory.** a
2fee0 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70  llocations are p
2fef0 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20  roperly tracked 
2ff00 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a  by the system..*
2ff10 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2ff20 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65  ebugSetType() se
2ff30 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66  ts the "type" of
2ff40 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74   an allocation t
2ff50 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20  o one of.** the 
2ff60 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73  MEMTYPE_* macros
2ff70 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20   defined below. 
2ff80 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62   The type must b
2ff90 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68  e a bitmask with
2ffa0 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74  .** a single bit
2ffb0 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69   set..**.** sqli
2ffc0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2ffd0 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
2ffe0 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  e if any of the 
2fff0 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
30000 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
30010 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
30020 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
30030 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
30040 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73  gSetType()..** s
30050 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
30060 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e  sType() is inten
30070 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69  ded for use insi
30080 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  de assert() stat
30090 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71  ements..**.** sq
300a0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
300b0 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
300c0 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ue if none of th
300d0 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
300e0 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
300f0 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
30100 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
30110 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
30120 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
30130 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20  .** Perhaps the 
30140 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70  most important p
30150 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66  oint is the diff
30160 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d  erence between M
30170 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61  EMTYPE_HEAP.** a
30180 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  nd MEMTYPE_LOOKA
30190 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c  SIDE.  If an all
301a0 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59  ocation is MEMTY
301b0 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68  PE_LOOKASIDE, th
301c0 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d  at means.** it m
301d0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61  ight have been a
301e0 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b  llocated by look
301f0 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68  aside, except th
30200 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73  e allocation was
30210 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72  .** too large or
30220 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61   lookaside was a
30230 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74  lready full.  It
30240 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
30250 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20   verify.** that 
30260 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74  allocations that
30270 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
30280 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f   satisfied by lo
30290 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a  okaside are not.
302a0 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74  ** passed back t
302b0 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  o non-lookaside 
302c0 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
302d0 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61    Asserts such a
302e0 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65  s the.** example
302f0 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65   above are place
30300 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f  d on the non-loo
30310 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
30320 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79  utines to verify
30330 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61  .** this constra
30340 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  int..**.** All o
30350 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20  f this is no-op 
30360 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e  for a production
30370 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79   build.  It only
30380 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70   comes into.** p
30390 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c  lay when the SQL
303a0 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d  ITE_MEMDEBUG com
303b0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
303c0 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66   is used..*/.#if
303d0 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
303e0 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
303f0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
30400 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
30410 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
30420 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c  ugHasType(void*,
30430 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
30440 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
30450 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73  (void*,u8);.#els
30460 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
30470 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
30480 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70  e(X,Y)  /* no-op
30490 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   */.# define sql
304a0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
304b0 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65  ype(X,Y)  1.# de
304c0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
304d0 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20  ebugNoType(X,Y) 
304e0 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69    1.#endif.#defi
304f0 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20  ne MEMTYPE_HEAP 
30500 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47        0x01  /* G
30510 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f  eneral heap allo
30520 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
30530 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  ne MEMTYPE_LOOKA
30540 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48  SIDE  0x02  /* H
30550 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68  eap that might h
30560 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
30570 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  de */.#define ME
30580 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
30590 20 30 78 30 34 20 20 2f 2a 20 50 61 67 65 20 63   0x04  /* Page c
305a0 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
305b0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61   */../*.** Threa
305c0 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a  ding interface.*
305d0 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
305e0 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
305f0 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  0.int sqlite3Thr
30600 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65  eadCreate(SQLite
30610 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a  Thread**,void*(*
30620 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b  )(void*),void*);
30630 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
30640 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72  adJoin(SQLiteThr
30650 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23  ead*, void**);.#
30660 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
30670 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
30680 5f 44 42 50 41 47 45 5f 56 54 41 42 29 20 7c 7c  _DBPAGE_VTAB) ||
30690 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
306a0 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
306b0 33 44 62 70 61 67 65 52 65 67 69 73 74 65 72 28  3DbpageRegister(
306c0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
306d0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
306e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54  LITE_ENABLE_DBST
306f0 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69  AT_VTAB) || defi
30700 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
30710 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74  .int sqlite3Dbst
30720 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  atRegister(sqlit
30730 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e3*);.#endif..in
30740 74 20 73 71 6c 69 74 65 33 45 78 70 72 56 65 63  t sqlite3ExprVec
30750 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45  torSize(Expr *pE
30760 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
30770 33 45 78 70 72 49 73 56 65 63 74 6f 72 28 45 78  3ExprIsVector(Ex
30780 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
30790 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46   *sqlite3VectorF
307a0 69 65 6c 64 53 75 62 65 78 70 72 28 45 78 70 72  ieldSubexpr(Expr
307b0 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
307c0 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65 63  qlite3ExprForVec
307d0 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c  torField(Parse*,
307e0 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  Expr*,int);.void
307f0 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72   sqlite3VectorEr
30800 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45  rorMsg(Parse*, E
30810 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  xpr*);..#ifndef 
30820 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
30830 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a  ILEOPTION_DIAGS.
30840 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c  const char **sql
30850 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f  ite3CompileOptio
30860 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a  ns(int *pnOpt);.
30870 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f  #endif..#endif /
30880 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f  * SQLITEINT_H */
30890 0a                                               .