/ Hex Artifact Content
Login

Artifact b7eee7a14dc4cd8e8d073bd24d43c894880fd94ff39ad6e9ac87f88a85a7888d:


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 54 68 65 20 63 6f 6d 70 69 6c 65  *.** The compile
5710: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 53 51  -time options SQ
5720: 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52  LITE_MMAP_READWR
5730: 49 54 45 20 61 6e 64 20 0a 2a 2a 20 53 51 4c 49  ITE and .** SQLI
5740: 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f  TE_ENABLE_BATCH_
5750: 41 54 4f 4d 49 43 5f 57 52 49 54 45 20 61 72 65  ATOMIC_WRITE are
5760: 20 6e 6f 74 20 63 6f 6d 70 61 74 69 62 6c 65 20   not compatible 
5770: 77 69 74 68 20 6f 6e 65 20 61 6e 6f 74 68 65 72  with one another
5780: 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73 74 20 63 68  ..** You must ch
5790: 6f 6f 73 65 20 6f 6e 65 20 6f 72 20 74 68 65 20  oose one or the 
57a0: 6f 74 68 65 72 20 28 6f 72 20 6e 65 69 74 68 65  other (or neithe
57b0: 72 29 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e  r) but not both.
57c0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
57d0: 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44  SQLITE_MMAP_READ
57e0: 57 52 49 54 45 29 20 26 26 20 64 65 66 69 6e 65  WRITE) && define
57f0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
5800: 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49  BATCH_ATOMIC_WRI
5810: 54 45 29 0a 23 65 72 72 6f 72 20 43 61 6e 6e 6f  TE).#error Canno
5820: 74 20 75 73 65 20 62 6f 74 68 20 53 51 4c 49 54  t use both SQLIT
5830: 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45  E_MMAP_READWRITE
5840: 20 61 6e 64 20 53 51 4c 49 54 45 5f 45 4e 41 42   and SQLITE_ENAB
5850: 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f  LE_BATCH_ATOMIC_
5860: 57 52 49 54 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  WRITE.#endif../*
5870: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
5880: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
5890: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
58a0: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
58b0: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
58c0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
58d0: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
58e0: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
58f0: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
5900: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
5910: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
5920: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
5930: 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  cros to compute 
5940: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
5950: 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65  mum of two numbe
5960: 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4d  rs..*/.#ifndef M
5970: 49 4e 0a 23 20 64 65 66 69 6e 65 20 4d 49 4e 28  IN.# define MIN(
5980: 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41  A,B) ((A)<(B)?(A
5990: 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a 23 69  ):(B)).#endif.#i
59a0: 66 6e 64 65 66 20 4d 41 58 0a 23 20 64 65 66 69  fndef MAX.# defi
59b0: 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29  ne MAX(A,B) ((A)
59c0: 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65  >(B)?(A):(B)).#e
59d0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70  ndif../*.** Swap
59e0: 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20   two objects of 
59f0: 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64  type TYPE..*/.#d
5a00: 65 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c  efine SWAP(TYPE,
5a10: 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20  A,B) {TYPE t=A; 
5a20: 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a  A=B; B=t;}../*.*
5a30: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
5a40: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
5a50: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
5a60: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
5a70: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
5a80: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
5a90: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
5aa0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
5ab0: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
5ac0: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
5ad0: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
5ae0: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
5af0: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
5b00: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
5b10: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
5b20: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
5b30: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
5b40: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
5b50: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
5b60: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
5b70: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
5b80: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
5b90: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
5ba0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
5bb0: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
5bc0: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
5bd0: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
5be0: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
5bf0: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
5c00: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
5c10: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
5c20: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
5c30: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
5c40: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
5c50: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
5c60: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
5c70: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
5c80: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
5c90: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
5ca0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
5cb0: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
5cc0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
5cd0: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
5ce0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
5cf0: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
5d00: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
5d10: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
5d20: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
5d30: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
5d40: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
5d50: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
5d60: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d70: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
5d80: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
5d90: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
5da0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
5db0: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
5dc0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
5dd0: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
5de0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
5df0: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
5e00: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
5e10: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
5e20: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
5e30: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
5e40: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
5e50: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
5e60: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
5e70: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
5e80: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5e90: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
5ea0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
5eb0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
5ec0: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
5ed0: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
5ee0: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
5ef0: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
5f00: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
5f10: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
5f20: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
5f30: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
5f40: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5f50: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
5f60: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
5f70: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
5f80: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
5f90: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
5fa0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
5fb0: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
5fc0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
5fd0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
5fe0: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
5ff0: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
6000: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
6010: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
6020: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
6030: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
6040: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
6050: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
6060: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
6070: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
6080: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
6090: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
60a0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
60b0: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
60c0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
60d0: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
60e0: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
60f0: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
6100: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
6110: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
6120: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
6130: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
6140: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
6150: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
6160: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
6170: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
6180: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
6190: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
61a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
61b0: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
61c0: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
61d0: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
61e0: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
61f0: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
6200: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
6210: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
6220: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
6230: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
6240: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
6250: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
6260: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
6270: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
6280: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
6290: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
62a0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
62b0: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
62c0: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
62d0: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
62e0: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
62f0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
6300: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
6310: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
6320: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
6330: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
6340: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
6350: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
6360: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
6370: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
6380: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
6390: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
63a0: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
63b0: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
63c0: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
63d0: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
63e0: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
63f0: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
6400: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
6410: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
6420: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
6430: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
6440: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
6450: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
6460: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
6470: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
6480: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
6490: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
64a0: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
64b0: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
64c0: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
64d0: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
64e0: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
64f0: 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65  LogEst quantitie
6500: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
6510: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
6520: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
6530: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
6540: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
6550: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
6560: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
6570: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
6580: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
6590: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
65a0: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
65b0: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
65c0: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
65d0: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
65e0: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
65f0: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
6600: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
6610: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
6620: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
6630: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
6640: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
6650: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
6660: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
6670: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
6680: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
6690: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
66a0: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
66b0: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
66c0: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
66d0: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
66e0: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
66f0: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
6700: 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  ..** Examples:.*
6710: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
6720: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
6730: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
6740: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
6750: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
6760: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
6770: 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54 45  * Set the SQLITE
6780: 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74  _PTRSIZE macro t
6790: 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
67a0: 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74  bytes in a point
67b0: 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
67c0: 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69  LITE_PTRSIZE.# i
67d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45  f defined(__SIZE
67e0: 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20  OF_POINTER__).# 
67f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6800: 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46  PTRSIZE __SIZEOF
6810: 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69  _POINTER__.# eli
6820: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
6830: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6840: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
6850: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
6860: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65  |    \.       de
6870: 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20  fined(_M_ARM)   
6880: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d  || defined(__arm
6890: 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  __)    || define
68a0: 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66  d(__x86).#   def
68b0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  ine SQLITE_PTRSI
68c0: 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20  ZE 4.# else.#   
68d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
68e0: 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a  RSIZE 8.# endif.
68f0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 75  #endif../* The u
6900: 70 74 72 20 74 79 70 65 20 69 73 20 61 6e 20 75  ptr type is an u
6910: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
6920: 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
6930: 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72 0a 2a  hold a pointer.*
6940: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 48 41  /.#if defined(HA
6950: 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20 20 74  VE_STDINT_H).  t
6960: 79 70 65 64 65 66 20 75 69 6e 74 70 74 72 5f 74  ypedef uintptr_t
6970: 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53 51 4c   uptr;.#elif SQL
6980: 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34 0a 20  ITE_PTRSIZE==4. 
6990: 20 74 79 70 65 64 65 66 20 75 33 32 20 75 70 74   typedef u32 upt
69a0: 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  r;.#else.  typed
69b0: 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23 65 6e  ef u64 uptr;.#en
69c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  dif../*.** The S
69d0: 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53  QLITE_WITHIN(P,S
69e0: 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63 6b 73  ,E) macro checks
69f0: 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69 6e 74   to see if point
6a00: 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  er P points to.*
6a10: 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65 74 77  * something betw
6a20: 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69 76 65  een S (inclusive
6a30: 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75 73 69  ) and E (exclusi
6a40: 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ve)..**.** In ot
6a50: 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69 73 20  her words, S is 
6a60: 61 20 62 75 66 66 65 72 20 61 6e 64 20 45 20 69  a buffer and E i
6a70: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
6a80: 68 65 20 66 69 72 73 74 20 62 79 74 65 20 61 66  he first byte af
6a90: 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f  ter.** the end o
6aa0: 66 20 62 75 66 66 65 72 20 53 2e 20 20 54 68 69  f buffer S.  Thi
6ab0: 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e 73 20  s macro returns 
6ac0: 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e 74 73  true if P points
6ad0: 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a   to something.**
6ae0: 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
6af0: 6e 20 74 68 65 20 62 75 66 66 65 72 20 53 2e 0a  n the buffer S..
6b00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
6b10: 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20  E_WITHIN(P,S,E) 
6b20: 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28 75 70  (((uptr)(P)>=(up
6b30: 74 72 29 28 53 29 29 26 26 28 28 75 70 74 72 29  tr)(S))&&((uptr)
6b40: 28 50 29 3c 28 75 70 74 72 29 28 45 29 29 29 0a  (P)<(uptr)(E))).
6b50: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
6b60: 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  o determine whet
6b70: 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20  her the machine 
6b80: 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65  is big or little
6b90: 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20   endian,.** and 
6ba0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
6bb0: 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f  hat determinatio
6bc0: 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72  n is run-time or
6bd0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a   compile-time..*
6be0: 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65  *.** For best pe
6bf0: 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74  rformance, an at
6c00: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
6c10: 20 67 75 65 73 73 20 61 74 20 74 68 65 20 62 79   guess at the by
6c20: 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e  te-order.** usin
6c30: 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72  g C-preprocessor
6c40: 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61   macros.  If tha
6c50: 74 20 69 73 20 75 6e 73 75 63 63 65 73 73 66 75  t is unsuccessfu
6c60: 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51  l, or if.** -DSQ
6c70: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 30  LITE_BYTEORDER=0
6c80: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79   is set, then by
6c90: 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65  te-order is dete
6ca0: 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e  rmined.** at run
6cb0: 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65  -time..*/.#ifnde
6cc0: 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  f SQLITE_BYTEORD
6cd0: 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ER.# if defined(
6ce0: 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66  i386)     || def
6cf0: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20  ined(__i386__)  
6d00: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49   || defined(_M_I
6d10: 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20  X86) ||    \.   
6d20: 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f    defined(__x86_
6d30: 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  64) || defined(_
6d40: 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65  _x86_64__) || de
6d50: 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c  fined(_M_X64)  |
6d60: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
6d70: 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c  ned(_M_AMD64) ||
6d80: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29   defined(_M_ARM)
6d90: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
6da0: 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c  __x86)   ||    \
6db0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
6dc0: 61 72 6d 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e  arm__).#   defin
6dd0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
6de0: 45 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69  ER    1234.# eli
6df0: 66 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29  f defined(sparc)
6e00: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6e10: 5f 70 70 63 5f 5f 29 0a 23 20 20 20 64 65 66 69  _ppc__).#   defi
6e20: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
6e30: 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 65 6c  DER    4321.# el
6e40: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
6e50: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 30  LITE_BYTEORDER 0
6e60: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
6e70: 23 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  #if SQLITE_BYTEO
6e80: 52 44 45 52 3d 3d 34 33 32 31 0a 23 20 64 65 66  RDER==4321.# def
6e90: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
6ea0: 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69  DIAN    1.# defi
6eb0: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
6ec0: 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e  ENDIAN 0.# defin
6ed0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
6ee0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
6ef0: 31 36 42 45 0a 23 65 6c 69 66 20 53 51 4c 49 54  16BE.#elif SQLIT
6f00: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31 32 33  E_BYTEORDER==123
6f10: 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  4.# define SQLIT
6f20: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
6f30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6f40: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
6f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6f60: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
6f70: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c 73  ITE_UTF16LE.#els
6f80: 65 0a 23 20 69 66 64 65 66 20 53 51 4c 49 54 45  e.# ifdef SQLITE
6f90: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
6fa0: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
6fb0: 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65  3one = 1;.# else
6fc0: 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  .  extern const 
6fd0: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
6fe0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
6ff0: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
7000: 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28  N    (*(char *)(
7010: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29  &sqlite3one)==0)
7020: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7030: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a  _LITTLEENDIAN (*
7040: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7050: 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69  3one)==1).# defi
7060: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
7070: 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f 42  ATIVE  (SQLITE_B
7080: 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f  IGENDIAN?SQLITE_
7090: 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55  UTF16BE:SQLITE_U
70a0: 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a  TF16LE).#endif..
70b0: 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20  /*.** Constants 
70c0: 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74 20  for the largest 
70d0: 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73  and smallest pos
70e0: 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67  sible 64-bit sig
70f0: 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  ned integers..**
7100: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72   These macros ar
7110: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f  e designed to wo
7120: 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20  rk correctly on 
7130: 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20  both 32-bit and 
7140: 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c  64-bit.** compil
7150: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
7160: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28  LARGEST_INT64  (
7170: 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69 36  0xffffffff|(((i6
7180: 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
7190: 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c  2)).#define SMAL
71a0: 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36  LEST_INT64 (((i6
71b0: 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f  4)-1) - LARGEST_
71c0: 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  INT64)../*.** Ro
71d0: 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20  und up a number 
71e0: 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67  to the next larg
71f0: 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  er multiple of 8
7200: 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a  .  This is used.
7210: 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79  ** to force 8-by
7220: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20  te alignment on 
7230: 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74  64-bit architect
7240: 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ures..*/.#define
7250: 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28   ROUND8(x)     (
7260: 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a  ((x)+7)&~7)../*.
7270: 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f  ** Round down to
7280: 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c   the nearest mul
7290: 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64  tiple of 8.*/.#d
72a0: 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38  efine ROUNDDOWN8
72b0: 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a  (x) ((x)&~7)../*
72c0: 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20  .** Assert that 
72d0: 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73  the pointer X is
72e0: 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38   aligned to an 8
72f0: 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20  -byte boundary. 
7300: 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69   This.** macro i
7310: 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68  s used only with
7320: 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76  in assert() to v
7330: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63  erify that the c
7340: 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20  ode gets.** all 
7350: 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69  alignment restri
7360: 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a  ctions correct..
7370: 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66  **.** Except, if
7380: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
7390: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73  LIGNED_MALLOC is
73a0: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74   defined, then t
73b0: 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  he.** underlying
73c0: 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d   malloc() implem
73d0: 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72  entation might r
73e0: 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20  eturn us 4-byte 
73f0: 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74  aligned.** point
7400: 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61  ers.  In that ca
7410: 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20  se, only verify 
7420: 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  4-byte alignment
7430: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
7440: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
7450: 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e  D_MALLOC.# defin
7460: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
7470: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
7480: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
7490: 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c  r*)0)&3)==0).#el
74a0: 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  se.# define EIGH
74b0: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
74c0: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
74d0: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
74e0: 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f  7)==0).#endif../
74f0: 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41  *.** Disable MMA
7500: 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77  P on platforms w
7510: 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e  here it is known
7520: 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a   to not work.*/.
7530: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70  #if defined(__Op
7540: 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69  enBSD__) || defi
7550: 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a  ned(__QNXNTO__).
7560: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
7570: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  AX_MMAP_SIZE.# d
7580: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
7590: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e  _MMAP_SIZE 0.#en
75a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
75b0: 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  lt maximum size 
75c0: 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62  of memory used b
75d0: 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20  y memory-mapped 
75e0: 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a  I/O in the VFS.*
75f0: 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45  /.#ifdef __APPLE
7600: 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61  __.# include <Ta
7610: 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73  rgetConditionals
7620: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  .h>.#endif.#ifnd
7630: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
7640: 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65 66  AP_SIZE.# if def
7650: 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20  ined(__linux__) 
7660: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
7670: 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64  WIN32) \.  || (d
7680: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
7690: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d  ) && defined(__M
76a0: 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64  ACH__)) \.  || d
76b0: 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a  efined(__sun) \.
76c0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46    || defined(__F
76d0: 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c  reeBSD__) \.  ||
76e0: 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f   defined(__Drago
76f0: 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65 66 69  nFly__).#   defi
7700: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
7710: 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30  AP_SIZE 0x7fff00
7720: 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31  00  /* 214741811
7730: 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20  2 */.# else.#   
7740: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
7750: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
7760: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
7770: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
7780: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72  MMAP_SIZE is zer
7790: 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72  o on all platfor
77a0: 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66  ms.  Or, even if
77b0: 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66   a larger.** def
77c0: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
77d0: 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63  s specified at c
77e0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b  ompile-time, mak
77f0: 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64  e sure that it d
7800: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65  oes.** not excee
7810: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d  d the maximum mm
7820: 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e  ap size..*/.#ifn
7830: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
7840: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
7850: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
7860: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  AULT_MMAP_SIZE 0
7870: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
7880: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7890: 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE>SQLITE_MAX_
78a0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65  MMAP_SIZE.# unde
78b0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
78c0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
78d0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
78e0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c  LT_MMAP_SIZE SQL
78f0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7900: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
7910: 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49  Only one of SQLI
7920: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20  TE_ENABLE_STAT3 
7930: 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
7940: 5f 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65  _STAT4 can be de
7950: 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69  fined..** Priori
7960: 74 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53  ty is given to S
7970: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7980: 54 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61  T4.  If either a
7990: 72 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f  re defined, also
79a0: 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .** define SQLIT
79b0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
79c0: 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65  R_STAT4.*/.#ifde
79d0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
79e0: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
79f0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7a00: 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  3.# define SQLIT
7a10: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7a20: 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20  R_STAT4 1.#elif 
7a30: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7a40: 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  AT3.# define SQL
7a50: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7a60: 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69  _OR_STAT4 1.#eli
7a70: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7a80: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
7a90: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
7aa0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7ab0: 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AT4.#endif../*.*
7ac0: 2a 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  * SELECTTRACE_EN
7ad0: 41 42 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69  ABLED will be ei
7ae0: 74 68 65 72 20 31 20 6f 72 20 30 20 64 65 70 65  ther 1 or 0 depe
7af0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
7b00: 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53   or not.** the S
7b10: 65 6c 65 63 74 20 71 75 65 72 79 20 67 65 6e 65  elect query gene
7b20: 72 61 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f  rator tracing lo
7b30: 67 69 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  gic is turned on
7b40: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
7b50: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
7b60: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
7b70: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
7b80: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
7b90: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
7ba0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
7bb0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
7bc0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7bd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7be0: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
7bf0: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
7c00: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
7c10: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
7c20: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
7c30: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
7c40: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
7c50: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
7c60: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
7c70: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
7c80: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
7c90: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
7ca0: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
7cb0: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
7cc0: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
7cd0: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
7ce0: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7cf0: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
7d00: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
7d10: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
7d20: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
7d30: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
7d40: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
7d50: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
7d60: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
7d70: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
7d80: 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76    int (*xFunc)(v
7d90: 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20  oid *,int);  /* 
7da0: 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  The busy callbac
7db0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  k */.  void *pAr
7dc0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7dd0: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74    /* First arg t
7de0: 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  o busy callback 
7df0: 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20  */.  int nBusy; 
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e10: 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  /* Incremented w
7e20: 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61  ith each busy ca
7e30: 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ll */.};../*.** 
7e40: 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74  Name of the mast
7e50: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
7e60: 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64  e.  The master d
7e70: 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a  atabase table.**
7e80: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61   is a special ta
7e90: 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ble that holds t
7ea0: 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74  he names and att
7eb0: 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a  ributes of all.*
7ec0: 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e  * user tables an
7ed0: 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64  d indices..*/.#d
7ee0: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d  efine MASTER_NAM
7ef0: 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f  E       "sqlite_
7f00: 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20  master".#define 
7f10: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
7f20: 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d    "sqlite_temp_m
7f30: 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68  aster"../*.** Th
7f40: 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
7f50: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7f60: 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  se table..*/.#de
7f70: 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54  fine MASTER_ROOT
7f80: 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20         1../*.** 
7f90: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
7fa0: 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f  schema table..*/
7fb0: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
7fc0: 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49  TABLE(x)  ((!OMI
7fd0: 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31  T_TEMPDB)&&(x==1
7fe0: 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  )?TEMP_MASTER_NA
7ff0: 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a  ME:MASTER_NAME).
8000: 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69  ./*.** A conveni
8010: 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20  ence macro that 
8020: 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
8030: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
8040: 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a  n.** an array..*
8050: 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53  /.#define ArrayS
8060: 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29  ize(X)    ((int)
8070: 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f  (sizeof(X)/sizeo
8080: 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a  f(X[0])))../*.**
8090: 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
80a0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
80b0: 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a  power of two.*/.
80c0: 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f  #define IsPowerO
80d0: 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28  fTwo(X) (((X)&((
80e0: 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  X)-1))==0)../*.*
80f0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
8100: 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72  value as a destr
8110: 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75  uctor means to u
8120: 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  se sqlite3DbFree
8130: 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  ()..** The sqlit
8140: 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69  e3DbFree() routi
8150: 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20  ne requires two 
8160: 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65  parameters inste
8170: 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65  ad of the.** one
8180: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
8190: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
81a0: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
81b0: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
81c0: 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  uce.** this magi
81d0: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
81e0: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
81f0: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
8200: 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74  y.  Any.** point
8210: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
8220: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
8230: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
8240: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
8250: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
8260: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
8270: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
8280: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
8290: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
82a0: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
82b0: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
82c0: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
82d0: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
82e0: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
82f0: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
8300: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
8310: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
8320: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
8330: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
8340: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
8350: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
8360: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
8370: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
8380: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
8390: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
83a0: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
83b0: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
83c0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
83d0: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
83e0: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
83f0: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
8400: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
8410: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
8420: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
8430: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
8440: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
8450: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
8460: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
8470: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
8480: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
8490: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
84a0: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
84b0: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
84c0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
84d0: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
84e0: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
84f0: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
8500: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
8510: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
8520: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
8530: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
8540: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
8550: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
8560: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
8570: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
8580: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
8590: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
85a0: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
85b0: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
85c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
85d0: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
85e0: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
85f0: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
8600: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
8610: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
8620: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
8630: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
8640: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
8650: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
8660: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
8670: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
8680: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
8690: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
86a0: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
86b0: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
86c0: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
86d0: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
86e0: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20 23  e SQLITE_WSD.  #
86f0: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8700: 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73  v) v.  #define s
8710: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
8720: 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
8730: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
8740: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
8750: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
8760: 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65  suppress compile
8770: 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74  r warnings and t
8780: 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65  o.** make it cle
8790: 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64  ar to human read
87a0: 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74  ers when a funct
87b0: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
87c0: 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a   deliberately.**
87d0: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
87e0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
87f0: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
8800: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
8810: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
8820: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
8830: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
8840: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
8850: 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  e the.** impleme
8860: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51  ntation of an SQ
8870: 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70  L aggregate step
8880: 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f   callback may no
8890: 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72  t use the.** par
88a0: 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e  ameter indicatin
88b0: 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  g the number of 
88c0: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
88d0: 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74   to the aggregat
88e0: 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77  e,.** if it know
88f0: 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  s that this is e
8900: 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72  nforced elsewher
8910: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20  e..**.** When a 
8920: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
8930: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  er is not used a
8940: 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65  t all within the
8950: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
8960: 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65  ion,.** it is ge
8970: 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e  nerally named "N
8980: 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55  otUsed" or "NotU
8990: 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68  sed2" to make th
89a0: 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65  ings even cleare
89b0: 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74  r..** However, t
89c0: 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20  hese macros may 
89d0: 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
89e0: 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67  suppress warning
89f0: 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20  s related to.** 
8a00: 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  parameters that 
8a10: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
8a20: 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67  e used depending
8a30: 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20   on compilation 
8a40: 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20  options..** For 
8a50: 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61  example those pa
8a60: 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73  rameters only us
8a70: 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73  ed in assert() s
8a80: 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68  tatements. In th
8a90: 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65  ese.** cases the
8aa0: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
8ab0: 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65  named as per the
8ac0: 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f   usual conventio
8ad0: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ns..*/.#define U
8ae0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
8af0: 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65  x) (void)(x).#de
8b00: 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41  fine UNUSED_PARA
8b10: 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53  METER2(x,y) UNUS
8b20: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c  ED_PARAMETER(x),
8b30: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b40: 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61  (y)../*.** Forwa
8b50: 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  rd references to
8b60: 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74   structures.*/.t
8b70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67  ypedef struct Ag
8b80: 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74  gInfo AggInfo;.t
8b90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
8ba0: 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f  thContext AuthCo
8bb0: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
8bc0: 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
8bd0: 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74  o AutoincInfo;.t
8be0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69  ypedef struct Bi
8bf0: 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70  tvec Bitvec;.typ
8c00: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c  edef struct Coll
8c10: 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70  Seq CollSeq;.typ
8c20: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75  edef struct Colu
8c30: 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64  mn Column;.typed
8c40: 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b  ef struct Db Db;
8c50: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c60: 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74  Schema Schema;.t
8c70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
8c80: 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66  pr Expr;.typedef
8c90: 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
8ca0: 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64   ExprList;.typed
8cb0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53 70  ef struct ExprSp
8cc0: 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70  an ExprSpan;.typ
8cd0: 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79  edef struct FKey
8ce0: 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73   FKey;.typedef s
8cf0: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
8d00: 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63  ctor FuncDestruc
8d10: 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tor;.typedef str
8d20: 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63  uct FuncDef Func
8d30: 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Def;.typedef str
8d40: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
8d50: 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70  FuncDefHash;.typ
8d60: 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69  edef struct IdLi
8d70: 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64  st IdList;.typed
8d80: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20  ef struct Index 
8d90: 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73  Index;.typedef s
8da0: 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
8db0: 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74  e IndexSample;.t
8dc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
8dd0: 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b  yClass KeyClass;
8de0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8df0: 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b  KeyInfo KeyInfo;
8e00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e10: 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73  Lookaside Lookas
8e20: 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ide;.typedef str
8e30: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
8e40: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b  t LookasideSlot;
8e50: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e60: 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74  Module Module;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61  ypedef struct Na
8e80: 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f  meContext NameCo
8e90: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
8ea0: 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73  truct Parse Pars
8eb0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8ec0: 74 20 50 72 65 55 70 64 61 74 65 20 50 72 65 55  t PreUpdate PreU
8ed0: 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66 20 73  pdate;.typedef s
8ee0: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
8ef0: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
8f00: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
8f10: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
8f20: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
8f30: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
8f40: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
8f50: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
8f60: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
8f70: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
8f80: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
8f90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fa0: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
8fb0: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
8fc0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
8fd0: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
8fe0: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
8ff0: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
9000: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
9010: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9020: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
9030: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
9040: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
9050: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
9060: 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65  uct TreeView Tre
9070: 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73  eView;.typedef s
9080: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
9090: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
90a0: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
90b0: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
90c0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
90d0: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
90e0: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
90f0: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
9100: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
9110: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9120: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
9130: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9140: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
9150: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9160: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
9170: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
9180: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
9190: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
91a0: 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a  t With With;../*
91b0: 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74 20   A VList object 
91c0: 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69 6e  records a mappin
91d0: 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d 65  g between parame
91e0: 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f 77  ters/variables/w
91f0: 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20 74  ildcards.** in t
9200: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
9210: 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c 20   (such as $abc, 
9220: 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20 61  @pqr, or :xyz) a
9230: 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a 2a  nd the integer.*
9240: 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  * variable numbe
9250: 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
9260: 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65 72  h that parameter
9270: 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d 61  .  See the forma
9280: 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a 2a  t description.**
9290: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 56   on the sqlite3V
92a0: 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69 6e  ListAdd() routin
92b0: 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72  e for more infor
92c0: 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73 74  mation.  A VList
92d0: 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75   is really.** ju
92e0: 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69  st an array of i
92f0: 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70 65  ntegers..*/.type
9300: 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a 0a  def int VList;..
9310: 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72  /*.** Defer sour
9320: 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20  cing vdbe.h and 
9330: 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66  btree.h until af
9340: 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64  ter the "u8" and
9350: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
9360: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
9370: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
9380: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
9390: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
93a0: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
93b0: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
93c0: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
93d0: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
93e0: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
93f0: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
9400: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
9410: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  h".#include "os.
9420: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
9430: 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51  ex.h"../* The SQ
9440: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
9450: 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  LE compile-time 
9460: 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 73  option used to s
9470: 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2a  et the default.*
9480: 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  * synchronous se
9490: 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e 20  tting to EXTRA. 
94a0: 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72   It is no longer
94b0: 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23   supported..*/.#
94c0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54  ifdef SQLITE_EXT
94d0: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61 72  RA_DURABLE.# war
94e0: 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45 5f  ning Use SQLITE_
94f0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9500: 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f 66  OUS=3 instead of
9510: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9520: 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 53  RABLE.# define S
9530: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9540: 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64  NCHRONOUS 3.#end
9550: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c  if../*.** Defaul
9560: 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65  t synchronous le
9570: 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  vels..**.** Note
9580: 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74 6f   that (for histo
9590: 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74 68  rcal reasons) th
95a0: 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  e PAGER_SYNCHRON
95b0: 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66  OUS_* macros dif
95c0: 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  fer.** from the 
95d0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
95e0: 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65  YNCHRONOUS value
95f0: 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20   by 1..**.**    
9600: 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59 4e         PAGER_SYN
9610: 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20 44  CHRONOUS       D
9620: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9630: 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20 20  US.**   OFF     
9640: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9660: 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20  0.**   NORMAL   
9670: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
9680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
9690: 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20 20  .**   FULL      
96a0: 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20      3           
96b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 0a                2.
96c0: 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20 20  **   EXTRA      
96d0: 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20 20     4            
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a 2a               3.*
96f0: 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d 41  *.** The "PRAGMA
9700: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74   synchronous" st
9710: 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65  atement also use
9720: 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  s the zero-based
9730: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20   numbers..** In 
9740: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
9750: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9760: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
9770: 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e   all external in
9780: 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20  terfaces.** and 
9790: 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76 61  the one-based va
97a0: 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  lues are used in
97b0: 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66  ternally..*/.#if
97c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
97d0: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
97e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
97f0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9800: 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69 66  OUS 2.#endif.#if
9810: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
9820: 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e  ULT_WAL_SYNCHRON
9830: 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  OUS.# define SQL
9840: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f  ITE_DEFAULT_WAL_
9850: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49  SYNCHRONOUS SQLI
9860: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9870: 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f  RONOUS.#endif../
9880: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
9890: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
98a0: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
98b0: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
98c0: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
98d0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
98e0: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
98f0: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
9900: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
9910: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
9920: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
9930: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
9940: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
9950: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
9960: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
9970: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
9980: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
9990: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
99a0: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
99b0: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
99c0: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
99d0: 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20 20   *zDbSName;     
99e0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
99f0: 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68 65   database. (sche
9a00: 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69 6c  ma name, not fil
9a10: 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72 65  ename) */.  Btre
9a20: 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
9a30: 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73   /* The B*Tree s
9a40: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 69  tructure for thi
9a50: 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  s database file 
9a60: 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c  */.  u8 safety_l
9a70: 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77  evel;     /* How
9a80: 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20 73   aggressive at s
9a90: 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64  yncing data to d
9aa0: 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79 6e  isk */.  u8 bSyn
9ab0: 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  cSet;         /*
9ac0: 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d 41   True if "PRAGMA
9ad0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22 20   synchronous=N" 
9ae0: 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f 0a  has been run */.
9af0: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
9b00: 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a;     /* Pointe
9b10: 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63  r to database sc
9b20: 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73  hema (possibly s
9b30: 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  hared) */.};../*
9b40: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
9b50: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
9b60: 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65   structure store
9b70: 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68  s a database sch
9b80: 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20  ema..**.** Most 
9b90: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61  Schema objects a
9ba0: 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  re associated wi
9bb0: 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65  th a Btree.  The
9bc0: 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a   exception is.**
9bd0: 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20   the Schema for 
9be0: 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65  the TEMP databae
9bf0: 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31  s (sqlite3.aDb[1
9c00: 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65  ]) which is free
9c10: 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e  -standing..** In
9c20: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
9c30: 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68  de, a single Sch
9c40: 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62  ema object can b
9c50: 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  e shared by mult
9c60: 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74  iple.** Btrees t
9c70: 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
9c80: 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67   same underlying
9c90: 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74   BtShared object
9ca0: 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f  ..**.** Schema o
9cb0: 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d  bjects are autom
9cc0: 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63  atically dealloc
9cd0: 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  ated when the la
9ce0: 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a  st Btree that.**
9cf0: 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d   references them
9d00: 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20   is destroyed.  
9d10: 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61   The TEMP Schema
9d20: 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65   is manually fre
9d30: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
9d40: 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41  _close()..*.** A
9d50: 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20   thread must be 
9d60: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
9d70: 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
9d80: 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72  ding Btree in or
9d90: 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73  der.** to access
9da0: 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e   Schema content.
9db0: 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74    This implies t
9dc0: 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d  hat the thread m
9dd0: 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68  ust also be.** h
9de0: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
9df0: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f  n the sqlite3 co
9e00: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
9e10: 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42   that owns the B
9e20: 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54  tree..** For a T
9e30: 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79  EMP Schema, only
9e40: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
9e50: 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65  mutex is require
9e60: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68  d..*/.struct Sch
9e70: 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65  ema {.  int sche
9e80: 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20  ma_cookie;   /* 
9e90: 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  Database schema 
9ea0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
9eb0: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
9ec0: 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f    int iGeneratio
9ed0: 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61  n;     /* Genera
9ee0: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49  tion counter.  I
9ef0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
9f00: 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20  each change */. 
9f10: 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20   Hash tblHash;  
9f20: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62        /* All tab
9f30: 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  les indexed by n
9f40: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64  ame */.  Hash id
9f50: 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  xHash;        /*
9f60: 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64   All (named) ind
9f70: 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  ices indexed by 
9f80: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  name */.  Hash t
9f90: 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f  rigHash;       /
9fa0: 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69  * All triggers i
9fb0: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
9fc0: 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73  /.  Hash fkeyHas
9fd0: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
9fe0: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20  foreign keys by 
9ff0: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
a000: 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65   name */.  Table
a010: 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20   *pSeqTab;      
a020: 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  /* The sqlite_se
a030: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65  quence table use
a040: 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45  d by AUTOINCREME
a050: 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f  NT */.  u8 file_
a060: 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20  format;      /* 
a070: 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65  Schema format ve
a080: 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66  rsion for this f
a090: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ile */.  u8 enc;
a0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a0b0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75   Text encoding u
a0c0: 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61  sed by this data
a0d0: 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63  base */.  u16 sc
a0e0: 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f  hemaFlags;     /
a0f0: 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74  * Flags associat
a100: 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68  ed with this sch
a110: 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63  ema */.  int cac
a120: 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a  he_size;      /*
a130: 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
a140: 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63   to use in the c
a150: 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ache */.};../*.*
a160: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
a170: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
a180: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
a190: 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a  r bits in the.**
a1a0: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
a1b0: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
a1c0: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
a1d0: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
a1e0: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
a1f0: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
a200: 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
a210: 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70  ine DbHasAnyProp
a220: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28  erty(D,I,P)  (((
a230: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
a240: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
a250: 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
a260: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44   DbSetProperty(D
a270: 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61  ,I,P)     (D)->a
a280: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a290: 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a  chemaFlags|=(P).
a2a0: 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50  #define DbClearP
a2b0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a2c0: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
a2d0: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a2e0: 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41  s&=~(P)../*.** A
a2f0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
a300: 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61  r the DB.pSchema
a310: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
a320: 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65  *.** The DB_Sche
a330: 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73  maLoaded flag is
a340: 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64   set after the d
a350: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
a360: 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20  as been.** read 
a370: 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61  into internal ha
a380: 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  sh tables..**.**
a390: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
a3a0: 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20   means that one 
a3b0: 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61  or more views ha
a3c0: 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ve column names 
a3d0: 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65  that.** have bee
a3e0: 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49  n filled out.  I
a3f0: 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  f the schema cha
a400: 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75  nges, these colu
a410: 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a  mn names might.*
a420: 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f  * changes and so
a430: 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e   the view will n
a440: 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e  eed to be reset.
a450: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53  .*/.#define DB_S
a460: 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30  chemaLoaded    0
a470: 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63  x0001  /* The sc
a480: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f  hema has been lo
a490: 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aded */.#define 
a4a0: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
a4b0: 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f     0x0002  /* So
a4c0: 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65  me views have de
a4d0: 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  fined column nam
a4e0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
a4f0: 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20  _Empty          
a500: 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20   0x0004  /* The 
a510: 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c  file is empty (l
a520: 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a  ength 0 bytes) *
a530: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 52 65 73  /.#define DB_Res
a540: 65 74 57 61 6e 74 65 64 20 20 20 20 20 30 78 30  etWanted     0x0
a550: 30 30 38 20 20 2f 2a 20 52 65 73 65 74 20 74 68  008  /* Reset th
a560: 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 53  e schema when nS
a570: 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a  chemaLock==0 */.
a580: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
a590: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
a5a0: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
a5b0: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
a5c0: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
a5d0: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
a5e0: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
a5f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
a600: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
a610: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
a620: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
a630: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
a640: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
a650: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
a660: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
a670: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
a680: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
a690: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
a6a0: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
a6b0: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
a6c0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
a6d0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
a6e0: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
a6f0: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
a700: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
a710: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
a720: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
a730: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
a740: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
a750: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
a760: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
a770: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
a780: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
a790: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
a7a0: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
a7b0: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
a7c0: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
a7d0: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
a7e0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
a7f0: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
a800: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
a810: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
a820: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
a830: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
a840: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
a850: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
a860: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
a870: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
a880: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
a890: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
a8a0: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
a8b0: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
a8c0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
a8d0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
a8e0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
a8f0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
a900: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
a910: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
a920: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
a930: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
a940: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
a950: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
a960: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
a970: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
a980: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
a990: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
a9a0: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
a9b0: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
a9c0: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
a9d0: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
a9e0: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
a9f0: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
aa00: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
aa10: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
aa20: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
aa30: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
aa40: 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c   {.  u32 bDisabl
aa50: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
aa60: 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65  Only operate the
aa70: 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20   lookaside when 
aa80: 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a  zero */.  u16 sz
aa90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
aaa0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
aab0: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
aac0: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
aad0: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
aae0: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
aaf0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
ab00: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
ab10: 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f 74 3b 20  */.  u32 nSlot; 
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ab30: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b 61 73  Number of lookas
ab40: 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61  ide slots alloca
ab50: 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 61 6e 53  ted */.  u32 anS
ab60: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
ab70: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
ab80: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
ab90: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
aba0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
abb0: 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a 20 4c 69   *pInit;   /* Li
abc0: 73 74 20 6f 66 20 62 75 66 66 65 72 73 20 6e 6f  st of buffers no
abd0: 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
abe0: 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  d */.  Lookaside
abf0: 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f  Slot *pFree;   /
ac00: 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61  * List of availa
ac10: 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  ble buffers */. 
ac20: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20   void *pStart;  
ac30: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
ac40: 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61  t byte of availa
ac50: 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  ble memory space
ac60: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64   */.  void *pEnd
ac70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
ac80: 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74   First byte past
ac90: 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c   end of availabl
aca0: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74  e space */.};.st
acb0: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
acc0: 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  ot {.  Lookaside
acd0: 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  Slot *pNext;    
ace0: 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69  /* Next buffer i
acf0: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72  n the list of fr
ad00: 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b  ee buffers */.};
ad10: 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74  ../*.** A hash t
ad20: 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69  able for built-i
ad30: 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  n function defin
ad40: 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63  itions.  (Applic
ad50: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a  ation-defined.**
ad60: 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61   functions use a
ad70: 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74   regular table t
ad80: 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68  able from hash.h
ad90: 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61  .).**.** Hash ea
ada0: 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ch FuncDef struc
adb0: 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66  ture into one of
adc0: 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68   the FuncDefHash
add0: 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43  .a[] slots..** C
ade0: 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e  ollisions are on
adf0: 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70   the FuncDef.u.p
ae00: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23  Hash chain..*/.#
ae10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ae20: 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74  NC_HASH_SZ 23.st
ae30: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
ae40: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
ae50: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
ae60: 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  _SZ];       /* H
ae70: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
ae80: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23  nctions */.};..#
ae90: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
aea0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
aeb0: 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69  ./*.** Informati
aec0: 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22  on held in the "
aed0: 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73  sqlite3" databas
aee0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  e connection obj
aef0: 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ect and used.** 
af00: 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61  to manage user a
af10: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a  uthentication..*
af20: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
af30: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
af40: 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  h sqlite3_userau
af50: 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74  th;.struct sqlit
af60: 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20  e3_userauth {.  
af70: 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20  u8 authLevel;   
af80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
af90: 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74   Current authent
afa0: 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f  ication level */
afb0: 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20  .  int nAuthPW; 
afc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afd0: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
afe0: 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73  zAuthPW in bytes
aff0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
b000: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
b010: 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20      /* Password 
b020: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
b030: 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cate */.  char *
b040: 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20  zAuthUser;      
b050: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
b060: 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74  name used to aut
b070: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a  henticate */.};.
b080: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
b090: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75  es for sqlite3_u
b0a0: 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65  serauth.authLeve
b0b0: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  l */.#define UAU
b0c0: 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30  TH_Unknown     0
b0d0: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
b0e0: 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63  cation not yet c
b0f0: 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e  hecked */.#defin
b100: 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20  e UAUTH_Fail    
b110: 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65      1     /* Use
b120: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
b130: 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69   failed */.#defi
b140: 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20  ne UAUTH_User   
b150: 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75       2     /* Au
b160: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
b170: 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a   normal user */.
b180: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64  #define UAUTH_Ad
b190: 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20  min       3     
b1a0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
b1b0: 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72   as an administr
b1c0: 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63  ator */../* Func
b1d0: 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20  tions used only 
b1e0: 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a  by user authoriz
b1f0: 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69  ation logic */.i
b200: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
b210: 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68  thTable(const ch
b220: 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
b230: 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f  3UserAuthCheckLo
b240: 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  gin(sqlite3*,con
b250: 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76  st char*,u8*);.v
b260: 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41  oid sqlite3UserA
b270: 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  uthInit(sqlite3*
b280: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
b290: 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33  ryptFunc(sqlite3
b2a0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
b2b0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
b2c0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b2d0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b2e0: 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ATION */../*.** 
b2f0: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20  typedef for the 
b300: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
b310: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e  llback function.
b320: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
b330: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b340: 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20  ATION.  typedef 
b350: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
b360: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
b370: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b380: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b390: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3b0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20     const char*, 
b3c0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
b3d0: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e  lse.  typedef in
b3e0: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
b3f0: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
b400: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b410: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
b420: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b440: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
b450: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
b460: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b470: 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73  CATED./* This is
b480: 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45   an extra SQLITE
b490: 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61  _TRACE macro tha
b4a0: 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67  t indicates "leg
b4b0: 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20  acy" tracing.** 
b4c0: 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20  in the style of 
b4d0: 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a  sqlite3_trace().
b4e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b4f0: 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20  E_TRACE_LEGACY  
b500: 30 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66 69  0x80.#else.#defi
b510: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
b520: 4c 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69 66  LEGACY  0.#endif
b530: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
b540: 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 0a  DEPRECATED */...
b550: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
b560: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
b570: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
b580: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
b590: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
b5a0: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
b5b0: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
b5c0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
b5d0: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
b5e0: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
b5f0: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
b600: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
b610: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
b620: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
b630: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
b640: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
b650: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
b660: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
b670: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
b680: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
b690: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
b6a0: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
b6b0: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b6d0: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
b6e0: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
b6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b700: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
b710: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
b720: 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6d  n use */.  u32 m
b730: 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  DbFlags;        
b740: 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67           /* flag
b750: 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e 74 65  s recording inte
b760: 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20  rnal state */.  
b770: 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b790: 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c 65 20   flags settable 
b7a0: 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65 65 20  by pragmas. See 
b7b0: 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c  below */.  i64 l
b7c0: 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20  astRowid;       
b7d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49           /* ROWI
b7e0: 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74  D of most recent
b7f0: 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f   insert (see abo
b800: 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d  ve) */.  i64 szM
b810: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
b820: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
b830: 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74  t mmap_size sett
b840: 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53 63  ing */.  u32 nSc
b850: 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20 20  hemaLock;       
b860: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
b870: 20 72 65 73 65 74 20 74 68 65 20 73 63 68 65 6d   reset the schem
b880: 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  a when non-zero 
b890: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
b8a0: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
b8b0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73     /* Flags pass
b8c0: 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66  ed to sqlite3_vf
b8d0: 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69  s.xOpen() */.  i
b8e0: 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  nt errCode;     
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b900: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
b910: 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a  r code (SQLITE_*
b920: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61  ) */.  int errMa
b930: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sk;             
b940: 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74       /* & result
b950: 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73   codes with this
b960: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
b970: 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73 45  g */.  int iSysE
b980: 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20 20  rrno;           
b990: 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76 61       /* Errno va
b9a0: 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73 79  lue from last sy
b9b0: 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20 20  stem error */.  
b9c0: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b9e0: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
b9f0: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
ba00: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65  ations */.  u8 e
ba10: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
ba20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
ba30: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  t encoding */.  
ba40: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ba60: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
ba70: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
ba80: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
ba90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
baa0: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
bab0: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
bac0: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bae0: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
baf0: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
bb00: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42  ilure */.  u8 bB
bb10: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20  enignMalloc;    
bb20: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
bb30: 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20  ot require OOMs 
bb40: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
bb50: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20  dfltLockMode;   
bb60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
bb70: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  fault locking-mo
bb80: 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20  de for attached 
bb90: 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20  dbs */.  signed 
bba0: 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63  char nextAutovac
bbb0: 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61  ;      /* Autova
bbc0: 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20  c setting after 
bbd0: 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f  VACUUM if >=0 */
bbe0: 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72  .  u8 suppressEr
bbf0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
bc00: 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65   /* Do not issue
bc10: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
bc20: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
bc30: 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20  vtabOnConflict; 
bc40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
bc50: 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f  lue to return fo
bc60: 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e  r s3_vtab_on_con
bc70: 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20  flict() */.  u8 
bc80: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
bc90: 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72  epoint;    /* Tr
bca0: 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d  ue if the outerm
bcb0: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73  ost savepoint is
bcc0: 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54   a TS */.  u8 mT
bcd0: 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20 20  race;           
bce0: 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f           /* zero
bcf0: 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f   or more SQLITE_
bd00: 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20  TRACE flags */. 
bd10: 20 75 38 20 73 6b 69 70 42 74 72 65 65 4d 75 74   u8 skipBtreeMut
bd20: 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ex;            /
bd30: 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61  * True if no sha
bd40: 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e  red-cache backen
bd50: 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45  ds */.  u8 nSqlE
bd60: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
bd70: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
bd80: 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71  of pending OP_Sq
bd90: 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f  lExec opcodes */
bda0: 0a 20 20 75 38 20 62 46 75 6c 6c 45 51 50 3b 20  .  u8 bFullEQP; 
bdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdc0: 20 2f 2a 20 49 6e 63 6c 75 64 65 20 74 72 69 67   /* Include trig
bdd0: 67 65 72 73 20 69 6e 20 45 51 50 20 6f 75 74 70  gers in EQP outp
bde0: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74  ut */.  int next
bdf0: 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20  Pagesize;       
be00: 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a        /* Pagesiz
be10: 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  e after VACUUM i
be20: 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61  f >0 */.  u32 ma
be30: 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gic;            
be40: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63          /* Magic
be50: 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65   number for dete
be60: 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73  ct library misus
be70: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  e */.  int nChan
be80: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
be90: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
bea0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
beb0: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
bec0: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
bed0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
bee0: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
bef0: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
bf00: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
bf10: 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49   int aLimit[SQLI
bf20: 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f  TE_N_LIMIT];   /
bf30: 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e  * Limits */.  in
bf40: 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70  t nMaxSorterMmap
bf50: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
bf60: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72  aximum size of r
bf70: 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79  egions mapped by
bf80: 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72   sorter */.  str
bf90: 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49  uct sqlite3InitI
bfa0: 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e  nfo {      /* In
bfb0: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64  formation used d
bfc0: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
bfd0: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
bfe0: 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20  newTnum;        
bff0: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70          /* Rootp
c000: 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69  age of table bei
c010: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
c020: 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20  /.    u8 iDb;   
c030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c040: 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69    /* Which db fi
c050: 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74  le is being init
c060: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
c070: 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20  8 busy;         
c080: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52             /* TR
c090: 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  UE if currently 
c0a0: 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a  initializing */.
c0b0: 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69      u8 orphanTri
c0c0: 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  gger;           
c0d0: 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e  /* Last statemen
c0e0: 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45  t is orphaned TE
c0f0: 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  MP trigger */.  
c100: 20 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62    u8 imposterTab
c110: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
c120: 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70   Building an imp
c130: 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20  oster table */. 
c140: 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e   } init;.  int n
c150: 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20  VdbeActive;     
c160: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c170: 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72  er of VDBEs curr
c180: 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f  ently running */
c190: 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64  .  int nVdbeRead
c1a0: 3b 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 61 63   /* Number of ac
c1c0: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
c1d0: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
c1e0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74  .  int nVdbeWrit
c1f0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
c200: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
c210: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
c220: 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a  read and write *
c230: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65  /.  int nVdbeExe
c240: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
c250: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
c260: 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56  ested calls to V
c270: 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69  dbeExec() */.  i
c280: 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20  nt nVDestroy;   
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c2a0: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
c2b0: 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65   OP_VDestroy ope
c2c0: 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  rations */.  int
c2d0: 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20   nExtension;    
c2e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c2f0: 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65  mber of loaded e
c300: 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76  xtensions */.  v
c310: 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e  oid **aExtension
c320: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c330: 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20  Array of shared 
c340: 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20  library handles 
c350: 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72 61 63  */.  int (*xTrac
c360: 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69  e)(u32,void*,voi
c370: 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f  d*,void*);     /
c380: 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  * Trace function
c390: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61   */.  void *pTra
c3a0: 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ceArg;          
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3c0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
c3d0: 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  he trace functio
c3e0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50  n */.  void (*xP
c3f0: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
c400: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
c410: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
c420: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
c430: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20   *pProfileArg;  
c440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c450: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
c460: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
c470: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
c480: 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20  *pCommitArg;    
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c4a0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d  Argument to xCom
c4b0: 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  mitCallback() */
c4c0: 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74  .  int (*xCommit
c4d0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
c4e0: 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  ;    /* Invoked 
c4f0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
c500: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c   */.  void *pRol
c510: 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20  lbackArg;       
c520: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c530: 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  ent to xRollback
c540: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20  Callback() */.  
c550: 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b  void (*xRollback
c560: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
c570: 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20  ; /* Invoked at 
c580: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
c590: 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65  .  void *pUpdate
c5a0: 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55  Arg;.  void (*xU
c5b0: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76  pdateCallback)(v
c5c0: 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
c5d0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
c5e0: 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b  *,sqlite_int64);
c5f0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
c600: 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
c610: 48 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72  HOOK.  void *pPr
c620: 65 55 70 64 61 74 65 41 72 67 3b 20 20 20 20 20  eUpdateArg;     
c630: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
c640: 67 75 6d 65 6e 74 20 74 6f 20 78 50 72 65 55 70  gument to xPreUp
c650: 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a  dateCallback */.
c660: 20 20 76 6f 69 64 20 28 2a 78 50 72 65 55 70 64    void (*xPreUpd
c670: 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 20 20 20  ateCallback)(   
c680: 2f 2a 20 52 65 67 69 73 74 65 72 65 64 20 75 73  /* Registered us
c690: 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 75  ing sqlite3_preu
c6a0: 70 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a  pdate_hook() */.
c6b0: 20 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65      void*,sqlite
c6c0: 33 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73  3*,int,char cons
c6d0: 74 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73  t*,char const*,s
c6e0: 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c  qlite3_int64,sql
c6f0: 69 74 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a  ite3_int64.  );.
c700: 20 20 50 72 65 55 70 64 61 74 65 20 2a 70 50 72    PreUpdate *pPr
c710: 65 55 70 64 61 74 65 3b 20 20 20 20 20 20 20 20  eUpdate;        
c720: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
c730: 63 74 69 76 65 20 70 72 65 2d 75 70 64 61 74 65  ctive pre-update
c740: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
c750: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e  dif /* SQLITE_EN
c760: 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
c770: 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  OOK */.#ifndef S
c780: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
c790: 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62   int (*xWalCallb
c7a0: 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c  ack)(void *, sql
c7b0: 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
c7c0: 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ar *, int);.  vo
c7d0: 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e  id *pWalArg;.#en
c7e0: 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  dif.  void(*xCol
c7f0: 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73  lNeeded)(void*,s
c800: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
c810: 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a  tRep,const char*
c820: 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  );.  void(*xColl
c830: 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c  Needed16)(void*,
c840: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
c850: 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64  xtRep,const void
c860: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c  *);.  void *pCol
c870: 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71  lNeededArg;.  sq
c880: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72  lite3_value *pEr
c890: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  r;          /* M
c8a0: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
c8b0: 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e   message */.  un
c8c0: 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69  ion {.    volati
c8d0: 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75  le int isInterru
c8e0: 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66  pted; /* True if
c8f0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
c900: 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  pt has been call
c910: 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  ed */.    double
c920: 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20   notUsed1;      
c930: 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20        /* Spacer 
c940: 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f  */.  } u1;.  Loo
c950: 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65  kaside lookaside
c960: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f  ;          /* Lo
c970: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63  okaside malloc c
c980: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a  onfiguration */.
c990: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
c9a0: 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
c9b0: 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74  N.  sqlite3_xaut
c9c0: 68 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20  h xAuth;        
c9d0: 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68    /* Access auth
c9e0: 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69  orization functi
c9f0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  on */.  void *pA
ca00: 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  uthArg;         
ca10: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
ca20: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63  ument to the acc
ca30: 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f  ess auth functio
ca40: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
ca50: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
ca60: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
ca70: 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72  K.  int (*xProgr
ca80: 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  ess)(void *);   
ca90: 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73    /* The progres
caa0: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
cab0: 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41  void *pProgressA
cac0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rg;           /*
cad0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
cae0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
caf0: 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ck */.  unsigned
cb00: 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20   nProgressOps;  
cb10: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
cb20: 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70  of opcodes for p
cb30: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
cb40: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
cb50: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
cb60: 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
cb70: 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20  t nVTrans;      
cb80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
cb90: 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66  llocated size of
cba0: 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61   aVTrans */.  Ha
cbb0: 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20  sh aModule;     
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
cbd0: 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69  opulated by sqli
cbe0: 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
cbf0: 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78  e() */.  VtabCtx
cc00: 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20   *pVtabCtx;     
cc10: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
cc20: 74 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61  t for active vta
cc30: 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65  b connect/create
cc40: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61   */.  VTable **a
cc50: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
cc60: 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74      /* Virtual t
cc70: 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20  ables with open 
cc80: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a  transactions */.
cc90: 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f    VTable *pDisco
cca0: 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73  nnect;    /* Dis
ccb0: 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e  connect these in
ccc0: 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72   next sqlite3_pr
ccd0: 65 70 61 72 65 28 29 20 2a 2f 0a 20 20 76 6f 69  epare() */.  voi
cce0: 64 20 2a 70 42 65 73 74 49 6e 64 65 78 43 74 78  d *pBestIndexCtx
ccf0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
cd00: 72 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  r sqlite3_vtab_c
cd10: 6f 6c 6c 61 74 69 6f 6e 28 29 20 2a 2f 0a 23 65  ollation() */.#e
cd20: 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e  ndif.  Hash aFun
cd30: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
cd40: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
cd50: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
cd60: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
cd70: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
cd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cd90: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
cda0: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
cdb0: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
cdc0: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
cdd0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
cde0: 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32    Db aDbStatic[2
cdf0: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
ce00: 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20  /* Static space 
ce10: 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c  for the 2 defaul
ce20: 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  t backends */.  
ce30: 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
ce40: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  point;        /*
ce50: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
ce60: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
ce70: 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b  int busyTimeout;
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ce90: 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69   Busy handler ti
cea0: 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a  meout, in msec *
ceb0: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
cec0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
ced0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
cee0: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
cef0: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
cf00: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cf20: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
cf30: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
cf40: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36  actions  */.  i6
cf50: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
cf60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
cf70: 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  et deferred cons
cf80: 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61  traints this tra
cf90: 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69  nsaction. */.  i
cfa0: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
cfb0: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ons;         /* 
cfc0: 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d  Net deferred imm
cfd0: 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  ediate constrain
cfe0: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42  ts */.  int *pnB
cff0: 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20  ytesFreed;      
d000: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
d010: 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20  NULL, increment 
d020: 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29  this in DbFree()
d030: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
d040: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
d050: 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20  NOTIFY.  /* The 
d060: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62  following variab
d070: 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74  les are all prot
d080: 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41  ected by the STA
d090: 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20  TIC_MASTER.  ** 
d0a0: 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71  mutex, not by sq
d0b0: 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65  lite3.mutex. The
d0c0: 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f  y are used by co
d0d0: 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a  de in notify.c..
d0e0: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
d0f0: 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  .pUnlockConnecti
d100: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
d110: 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74  s that X is wait
d120: 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a  ing for Y to.  *
d130: 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74  * unlock so that
d140: 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e   it can proceed.
d150: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
d160: 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65  X.pBlockingConne
d170: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
d180: 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68  eans that someth
d190: 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64  ing that X tried
d1a0: 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64  .  ** tried to d
d1b0: 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65  o recently faile
d1c0: 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  d with an SQLITE
d1d0: 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75  _LOCKED error du
d1e0: 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20  e to locks.  ** 
d1f0: 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a  held by Y..  */.
d200: 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63    sqlite3 *pBloc
d210: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  kingConnection; 
d220: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68  /* Connection th
d230: 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45  at caused SQLITE
d240: 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c  _LOCKED */.  sql
d250: 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e  ite3 *pUnlockCon
d260: 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20  nection;        
d270: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
d280: 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e   to watch for un
d290: 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  lock */.  void *
d2a0: 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20  pUnlockArg;     
d2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2c0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
d2d0: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a  UnlockNotify */.
d2e0: 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b    void (*xUnlock
d2f0: 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c  Notify)(void **,
d300: 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63   int);  /* Unloc
d310: 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63  k notify callbac
d320: 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  k */.  sqlite3 *
d330: 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20  pNextBlocked;   
d340: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
d350: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63  list of all bloc
d360: 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ked connections 
d370: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  */.#endif.#ifdef
d380: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
d390: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71  HENTICATION.  sq
d3a0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61  lite3_userauth a
d3b0: 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55  uth;        /* U
d3c0: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
d3d0: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  on information *
d3e0: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
d3f0: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
d400: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
d410: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
d420: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
d430: 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64  HEMA_ENC(db) ((d
d440: 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65  b)->aDb[0].pSche
d450: 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65  ma->enc).#define
d460: 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20 20   ENC(db)        
d470: 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  ((db)->enc)../*.
d480: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
d490: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
d4a0: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20  e3.flags..**.** 
d4b0: 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
d4c0: 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
d4d0: 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
d4e0: 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53     SQLITE_FullFS
d4f0: 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52  ync     == PAGER
d500: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
d510: 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75     SQLITE_CkptFu
d520: 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52  llFSync == PAGER
d530: 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a  _CKPT_FULLFSYNC.
d540: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43  **      SQLITE_C
d550: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20  acheSpill    == 
d560: 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c  PAGER_CACHE_SPIL
d570: 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L.*/.#define SQL
d580: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
d590: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
d5a0: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
d5b0: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
d5c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
d5d0: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
d5e0: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65  00000002  /* Cre
d5f0: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
d600: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
d610: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d620: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
d630: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68  x00000004  /* Sh
d640: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
d650: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
d660: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d670: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20  _FullFSync      
d680: 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55  0x00000008  /* U
d690: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e  se full fsync on
d6a0: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a   the backend */.
d6b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
d6c0: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78  kptFullFSync  0x
d6d0: 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65  00000010  /* Use
d6e0: 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20   full fsync for 
d6f0: 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64  checkpoint */.#d
d700: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63  efine SQLITE_Cac
d710: 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30  heSpill     0x00
d720: 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f  000020  /* OK to
d730: 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63   spill pager cac
d740: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
d750: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
d760: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
d770: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
d780: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
d790: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
d7a0: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
d7b0: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
d7c0: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
d7d0: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d800: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
d810: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
d820: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
d830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d850: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
d860: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
d870: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
d880: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
d890: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
d8a0: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
d8b0: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
d8c0: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
d8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8f0: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
d900: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
d910: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
d920: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
d930: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20  00000200  /* Do 
d940: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
d950: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
d960: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d970: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30  ReadUncommit   0
d980: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45  x00000400  /* RE
d990: 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69  AD UNCOMMITTED i
d9a0: 6e 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a  n shared-cache *
d9b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d9c0: 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20  _NoCkptOnClose  
d9d0: 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e  0x00000800  /* N
d9e0: 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20  o checkpoint on 
d9f0: 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a  close()/DETACH *
da00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
da10: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
da20: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52  0x00001000  /* R
da30: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
da40: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
da50: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
da60: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 30  iggers    0x0000
da70: 32 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  2000  /* Enable 
da80: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
da90: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
daa0: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
dab0: 20 20 20 20 30 78 30 30 30 30 34 30 30 30 20 20      0x00004000  
dac0: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
dad0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
dae0: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
daf0: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
db00: 20 20 20 20 20 30 78 30 30 30 30 38 30 30 30 20       0x00008000 
db10: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
db20: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
db30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
db40: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78  oadExtension  0x
db50: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61  00010000  /* Ena
db60: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
db70: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
db80: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63  LITE_LoadExtFunc
db90: 20 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20      0x00020000  
dba0: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
dbb0: 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66  xtension() SQL f
dbc0: 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  unc */.#define S
dbd0: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
dbe0: 67 65 72 20 20 30 78 30 30 30 34 30 30 30 30 20  ger  0x00040000 
dbf0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
dc00: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
dc10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
dc20: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
dc30: 30 30 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65  0080000  /* Defe
dc40: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
dc50: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
dc60: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
dc70: 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30        0x00100000
dc80: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
dc90: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
dca0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dcb0: 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30  CellSizeCk     0
dcc0: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68  x00200000  /* Ch
dcd0: 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73  eck btree cell s
dce0: 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a  izes on load */.
dcf0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
dd00: 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78  ts3Tokenizer  0x
dd10: 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00400000  /* Ena
dd20: 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a  ble fts3_tokeniz
dd30: 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65  er(2) */.#define
dd40: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50   SQLITE_EnableQP
dd50: 53 47 20 20 20 20 20 30 78 30 30 38 30 30 30 30  SG     0x0080000
dd60: 30 20 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e  0  /* Query Plan
dd70: 6e 65 72 20 53 74 61 62 69 6c 69 74 79 20 47 75  ner Stability Gu
dd80: 61 72 61 6e 74 65 65 20 2a 2f 0a 2f 2a 20 46 6c  arantee */./* Fl
dd90: 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66  ags used only if
dda0: 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 69   debugging */.#i
ddb0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
ddc0: 47 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  G.#define SQLITE
ddd0: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
dde0: 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44  0x08000000  /* D
ddf0: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
de00: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
de10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
de20: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
de30: 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x10000000  /* De
de40: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
de50: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
de60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
de70: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
de80: 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 54 72  x20000000  /* Tr
de90: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
dea0: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
deb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
dec0: 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 34 30  eAddopTrace 0x40
ded0: 30 30 30 30 30 30 20 20 2f 2a 20 54 72 61 63 65  000000  /* Trace
dee0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
def0: 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65  p() calls */.#de
df00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
df10: 45 51 50 20 20 20 20 20 20 20 20 30 78 38 30 30  EQP        0x800
df20: 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00000  /* Debug 
df30: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
df40: 41 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  AN */.#endif../*
df50: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
df60: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d  es for sqlite3.m
df70: 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  DbFlags.*/.#defi
df80: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
df90: 43 68 61 6e 67 65 20 20 20 30 78 30 30 30 31 20  Change   0x0001 
dfa0: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
dfb0: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
dfc0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
dfd0: 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74  FLAG_PreferBuilt
dfe0: 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50  in  0x0002  /* P
dff0: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
e000: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
e010: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61  define DBFLAG_Va
e020: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
e030: 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  004  /* Currentl
e040: 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f  y in a VACUUM */
e050: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
e060: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
e070: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
e080: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
e090: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
e0a0: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
e0b0: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
e0c0: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
e0d0: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
e0e0: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
e0f0: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
e100: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
e110: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
e120: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
e130: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
e140: 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  ening */.#define
e150: 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61   SQLITE_ColumnCa
e160: 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20  che    0x0002   
e170: 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20  /* Column cache 
e180: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e190: 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20  E_GroupByOrder  
e1a0: 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f   0x0004   /* GRO
e1b0: 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52  UPBY cover of OR
e1c0: 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  DERBY */.#define
e1d0: 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75   SQLITE_FactorOu
e1e0: 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20  tConst 0x0008   
e1f0: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74  /* Constant fact
e200: 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  oring */.#define
e210: 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74   SQLITE_Distinct
e220: 4f 70 74 20 20 20 20 30 78 30 30 31 30 20 20 20  Opt    0x0010   
e230: 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e  /* DISTINCT usin
e240: 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  g indexes */.#de
e250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65  fine SQLITE_Cove
e260: 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 32  rIdxScan   0x002
e270: 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20  0   /* Covering 
e280: 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23  index scans */.#
e290: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72  define SQLITE_Or
e2a0: 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30  derByIdxJoin 0x0
e2b0: 30 34 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  040   /* ORDER B
e2c0: 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69  Y of joins via i
e2d0: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
e2e0: 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76  SQLITE_Transitiv
e2f0: 65 20 20 20 20 20 30 78 30 30 38 30 20 20 20 2f  e     0x0080   /
e300: 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e  * Transitive con
e310: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
e320: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e  ine SQLITE_OmitN
e330: 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 31 30 30  oopJoin   0x0100
e340: 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65     /* Omit unuse
e350: 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e  d tables in join
e360: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e370: 49 54 45 5f 43 6f 75 6e 74 4f 66 56 69 65 77 20  ITE_CountOfView 
e380: 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54     0x0200   /* T
e390: 68 65 20 63 6f 75 6e 74 2d 6f 66 2d 76 69 65 77  he count-of-view
e3a0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
e3b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e3c0: 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30  CursorHints    0
e3d0: 78 30 34 30 30 20 20 20 2f 2a 20 41 64 64 20 4f  x0400   /* Add O
e3e0: 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63  P_CursorHint opc
e3f0: 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  odes */.#define 
e400: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
e410: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
e420: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
e430: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 20 20 20  TAT4 data */.   
e440: 2f 2a 20 54 48 33 20 65 78 70 65 63 74 73 20 74  /* TH3 expects t
e450: 68 65 20 53 74 61 74 33 34 20 20 5e 5e 5e 5e 5e  he Stat34  ^^^^^
e460: 5e 20 76 61 6c 75 65 20 74 6f 20 62 65 20 30 78  ^ value to be 0x
e470: 30 38 30 30 2e 20 20 44 6f 6e 27 74 20 63 68 61  0800.  Don't cha
e480: 6e 67 65 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e  nge it */.#defin
e490: 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73  e SQLITE_AllOpts
e4a0: 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20          0xffff  
e4b0: 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61   /* All optimiza
e4c0: 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
e4d0: 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69  Macros for testi
e4e0: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
e4f0: 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  t optimizations 
e500: 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64  are enabled or d
e510: 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66  isabled..*/.#def
e520: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
e530: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
e540: 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70  k)  (((db)->dbOp
e550: 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d  tFlags&(mask))!=
e560: 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  0).#define Optim
e570: 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64  izationEnabled(d
e580: 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62  b, mask)   (((db
e590: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
e5a0: 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  ask))==0)../*.**
e5b0: 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
e5c0: 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  it OK to factor 
e5d0: 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  constant express
e5e0: 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e  ions into the in
e5f0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20  itialization.** 
e600: 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65  code. The argume
e610: 6e 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62  nt is a Parse ob
e620: 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64  ject for the cod
e630: 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a  e generator..*/.
e640: 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63  #define ConstFac
e650: 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f  torOk(P) ((P)->o
e660: 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f  kConstFactor)../
e670: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
e680: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c  lues for the sql
e690: 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e  ite.magic field.
e6a0: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20  .** The numbers 
e6b0: 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20  are obtained at 
e6c0: 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20  random and have 
e6d0: 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69  no special meani
e6e0: 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61  ng, other.** tha
e6f0: 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74  n being distinct
e700: 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65   from one anothe
e710: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r..*/.#define SQ
e720: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20  LITE_MAGIC_OPEN 
e730: 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20      0xa029a697  
e740: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f  /* Database is o
e750: 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pen */.#define S
e760: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
e770: 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20  ED   0x9f3c2d33 
e780: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
e790: 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  closed */.#defin
e7a0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53  e SQLITE_MAGIC_S
e7b0: 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32  ICK     0x4b7712
e7c0: 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64  90  /* Error and
e7d0: 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20   awaiting close 
e7e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e7f0: 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20  E_MAGIC_BUSY    
e800: 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20   0xf03b7906  /* 
e810: 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74  Database current
e820: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65  ly in use */.#de
e830: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
e840: 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33  C_ERROR    0xb53
e850: 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c  57930  /* An SQL
e860: 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72  ITE_MISUSE error
e870: 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65   occurred */.#de
e880: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
e890: 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63  C_ZOMBIE   0x64c
e8a0: 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20  ffc7f  /* Close 
e8b0: 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d  with last statem
e8c0: 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a  ent close */../*
e8d0: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e  .** Each SQL fun
e8e0: 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ction is defined
e8f0: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
e900: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
e910: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20  .** structure.  
e920: 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74  For global built
e930: 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65  -in functions (e
e940: 78 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78  x: substr(), max
e950: 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20  (), count()).** 
e960: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  a pointer to thi
e970: 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68  s structure is h
e980: 65 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  eld in the sqlit
e990: 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  e3BuiltinFunctio
e9a0: 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f  ns object..** Fo
e9b0: 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  r per-connection
e9c0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66   application-def
e9d0: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20  ined functions, 
e9e0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  a pointer to thi
e9f0: 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69  s.** structure i
ea00: 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62  s held in the db
ea10: 2d 3e 61 48 61 73 68 20 68 61 73 68 20 74 61 62  ->aHash hash tab
ea20: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e  le..**.** The u.
ea30: 70 48 61 73 68 20 66 69 65 6c 64 20 69 73 20 75  pHash field is u
ea40: 73 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61  sed by the globa
ea50: 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68  l built-ins.  Th
ea60: 65 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a  e u.pDestructor.
ea70: 2a 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  ** field is used
ea80: 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69   by per-connecti
ea90: 6f 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74  on app-def funct
eaa0: 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ions..*/.struct 
eab0: 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e  FuncDef {.  i8 n
eac0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
ead0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
eae0: 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61  guments.  -1 mea
eaf0: 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a  ns unlimited */.
eb00: 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b    u16 funcFlags;
eb10: 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63         /* Some c
eb20: 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51  ombination of SQ
eb30: 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20  LITE_FUNC_* */. 
eb40: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
eb50: 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61  ;     /* User da
eb60: 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a  ta parameter */.
eb70: 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74    FuncDef *pNext
eb80: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66  ;      /* Next f
eb90: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d  unction with sam
eba0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64  e name */.  void
ebb0: 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74   (*xSFunc)(sqlit
ebc0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
ebd0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
ebe0: 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67  ; /* func or agg
ebf0: 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20  -step */.  void 
ec00: 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c  (*xFinalize)(sql
ec10: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20  ite3_context*); 
ec20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec30: 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65   /* Agg finalize
ec40: 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  r */.  const cha
ec50: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53  r *zName;   /* S
ec60: 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  QL name of the f
ec70: 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e  unction. */.  un
ec80: 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65  ion {.    FuncDe
ec90: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
eca0: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
ecb0: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
ecc0: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
ecd0: 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75  /.    FuncDestru
ece0: 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
ecf0: 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63  r;   /* Referenc
ed00: 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75  e counted destru
ed10: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
ed20: 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  .  } u;.};../*.*
ed30: 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
ed40: 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20   encapsulates a 
ed50: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65  user-function de
ed60: 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63  structor callbac
ed70: 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  k (as.** configu
ed80: 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65  red using create
ed90: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20  _function_v2()) 
eda0: 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20  and a reference 
edb0: 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a  counter. When.**
edc0: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
edd0: 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20  _v2() is called 
ede0: 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63  to create a func
edf0: 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74  tion with a dest
ee00: 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e  ructor,.** a sin
ee10: 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68  gle object of th
ee20: 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63  is type is alloc
ee30: 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75  ated. FuncDestru
ee40: 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74  ctor.nRef is set
ee50: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65   to.** the numbe
ee60: 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a  r of FuncDef obj
ee70: 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69  ects created (ei
ee80: 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70  ther 1 or 3, dep
ee90: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
eea0: 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20  r.** or not the 
eeb0: 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69  specified encodi
eec0: 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59  ng is SQLITE_ANY
eed0: 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70  ). The FuncDef.p
eee0: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65  Destructor.** me
eef0: 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20  mber of each of 
ef00: 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20  the new FuncDef 
ef10: 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74  objects is set t
ef20: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61  o point to the a
ef30: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63  llocated.** Func
ef40: 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a  Destructor..**.*
ef50: 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68  * Thereafter, wh
ef60: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  en one of the Fu
ef70: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
ef80: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65   deleted, the re
ef90: 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74  ference.** count
efa0: 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   on this object 
efb0: 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20  is decremented. 
efc0: 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20  When it reaches 
efd0: 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  0, the destructo
efe0: 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20  r.** is invoked 
eff0: 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74  and the FuncDest
f000: 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65  ructor structure
f010: 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63   freed..*/.struc
f020: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
f030: 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20   {.  int nRef;. 
f040: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
f050: 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69  )(void *);.  voi
f060: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b  d *pUserData;.};
f070: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
f080: 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63   values for Func
f090: 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65  Def.flags.  Note
f0a0: 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54   that the _LENGT
f0b0: 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a  H and _TYPEOF.**
f0c0: 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72   values must cor
f0d0: 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41  respond to OPFLA
f0e0: 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
f0f0: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
f100: 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45  .  And.** SQLITE
f110: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d  _FUNC_CONSTANT m
f120: 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  ust be the same 
f130: 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  as SQLITE_DETERM
f140: 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a  INISTIC.  There.
f150: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
f160: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
f170: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
f180: 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c   this..**.** Val
f190: 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
f1a0: 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
f1b0: 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53  ert()):.**     S
f1c0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
f1d0: 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d  X    ==  NC_MinM
f1e0: 61 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46  axAgg      == SF
f1f0: 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20  _MinMaxAgg.**   
f200: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45    SQLITE_FUNC_LE
f210: 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c  NGTH    ==  OPFL
f220: 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20  AG_LENGTHARG.** 
f230: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
f240: 54 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50  TYPEOF    ==  OP
f250: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a  FLAG_TYPEOFARG.*
f260: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
f270: 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20  C_CONSTANT  ==  
f280: 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49  SQLITE_DETERMINI
f290: 53 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50  STIC from the AP
f2a0: 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  I.**     SQLITE_
f2b0: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64  FUNC_ENCMASK   d
f2c0: 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45  epends on SQLITE
f2d0: 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20  _UTF* macros in 
f2e0: 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69  the API.*/.#defi
f2f0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
f300: 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f  NCMASK  0x0003 /
f310: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
f320: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72  QLITE_UTF16BE or
f330: 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66   UTF16LE */.#def
f340: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f350: 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20  LIKE     0x0004 
f360: 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72  /* Candidate for
f370: 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69   the LIKE optimi
f380: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
f390: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41  e SQLITE_FUNC_CA
f3a0: 53 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a  SE     0x0008 /*
f3b0: 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20   Case-sensitive 
f3c0: 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69  LIKE-type functi
f3d0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
f3e0: 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20  LITE_FUNC_EPHEM 
f3f0: 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68     0x0010 /* Eph
f400: 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20  emeral.  Delete 
f410: 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65  with VDBE */.#de
f420: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f430: 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30  _NEEDCOLL 0x0020
f440: 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
f450: 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
f460: 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64  t be called*/.#d
f470: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f480: 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34  C_LENGTH   0x004
f490: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
f4a0: 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
f4b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f4c0: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
f4d0: 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0080 /* Built-
f4e0: 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  in typeof() func
f4f0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
f500: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
f510: 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42  T    0x0100 /* B
f520: 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
f530: 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
f540: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f550: 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30  C_COALESCE 0x020
f560: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
f570: 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75  alesce() or ifnu
f580: 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ll() */.#define 
f590: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49  SQLITE_FUNC_UNLI
f5a0: 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42  KELY 0x0400 /* B
f5b0: 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79  uilt-in unlikely
f5c0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
f5d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f5e0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38  NC_CONSTANT 0x08
f5f0: 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69  00 /* Constant i
f600: 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e  nputs give a con
f610: 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a  stant output */.
f620: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f630: 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31  UNC_MINMAX   0x1
f640: 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  000 /* True for 
f650: 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20  min() and max() 
f660: 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64  aggregates */.#d
f670: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f680: 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30  C_SLOCHNG  0x200
f690: 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67  0 /* "Slow Chang
f6a0: 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61  e". Value consta
f6b0: 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20  nt during a.    
f6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6e0: 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20  ** single query 
f6f0: 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f  - might change o
f700: 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66  ver time */.#def
f710: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f720: 41 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20  AFFINITY 0x4000 
f730: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69  /* Built-in affi
f740: 6e 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  nity() function 
f750: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
f760: 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61  llowing three ma
f770: 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29  cros, FUNCTION()
f780: 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64  , LIKEFUNC() and
f790: 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65   AGGREGATE() are
f7a0: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61  .** used to crea
f7b0: 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  te the initializ
f7c0: 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63  ers for the Func
f7d0: 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a  Def structures..
f7e0: 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e  **.**   FUNCTION
f7f0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
f800: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
f810: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
f820: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
f830: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
f840: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
f850: 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d   zName.**     im
f860: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
f870: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
f880: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
f890: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
f8a0: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
f8b0: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
f8c0: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
f8d0: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
f8e0: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
f8f0: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
f900: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
f910: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
f920: 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72 67  n. If.**     arg
f930: 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75  ument bNC is tru
f940: 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49  e, then the SQLI
f950: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
f960: 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
f970: 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28  .**   VFUNCTION(
f980: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
f990: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
f9a0: 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
f9b0: 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
f9c0: 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
f9d0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
f9e0: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43  g..**.**   DFUNC
f9f0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
fa00: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
fa10: 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
fa20: 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
fa30: 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
fa40: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fa50: 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20  T flag and.**   
fa60: 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49 54    adds the SQLIT
fa70: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66  E_FUNC_SLOCHNG f
fa80: 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64  lag.  Used for d
fa90: 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74  ate & time funct
faa0: 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20  ions.**     and 
fab0: 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73  functions like s
fac0: 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20  qlite_version() 
fad0: 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c  that can change,
fae0: 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a   but not during.
faf0: 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20  **     a single 
fb00: 71 75 65 72 79 2e 20 20 54 68 65 20 69 41 72 67  query.  The iArg
fb10: 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20 54 68   is ignored.  Th
fb20: 65 20 75 73 65 72 2d 64 61 74 61 20 69 73 20 61  e user-data is a
fb30: 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20 20 20  lways set.**    
fb40: 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74   to a NULL point
fb50: 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72  er.  The bNC par
fb60: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
fb70: 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52 45  ed..**.**   PURE
fb80: 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
fb90: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
fba0: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
fbb0: 20 66 6f 72 20 22 70 75 72 65 22 20 64 61 74 65   for "pure" date
fbc0: 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 2c  /time functions,
fbd0: 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6c   this macro is l
fbe0: 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a  ike DFUNCTION.**
fbf0: 20 20 20 20 20 65 78 63 65 70 74 20 74 68 61 74       except that
fc00: 20 69 74 20 64 6f 65 73 20 73 65 74 20 74 68 65   it does set the
fc10: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fc20: 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20 69 41  STANT flags.  iA
fc30: 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69 67 6e  rg is.**     ign
fc40: 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75 73 65  ored and the use
fc50: 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65 73 65  r-data for these
fc60: 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20 73 65   functions is se
fc70: 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20 20 20  t to an .**     
fc80: 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d 4e 55  arbitrary non-NU
fc90: 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65  LL pointer.  The
fca0: 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69   bNC parameter i
fcb0: 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
fcc0: 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
fcd0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
fce0: 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
fcf0: 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
fd00: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
fd10: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
fd20: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
fd30: 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
fd40: 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
fd50: 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
fd60: 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
fd70: 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
fd80: 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
fd90: 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
fda0: 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
fdb0: 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
fdc0: 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
fdd0: 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
fde0: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
fdf0: 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
fe00: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
fe10: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
fe20: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
fe30: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
fe40: 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68   zName.**     th
fe50: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
fe60: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
fe70: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
fe80: 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20  a call to C.**  
fe90: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
fea0: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
feb0: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
fec0: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
fed0: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
fee0: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
fef0: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
ff00: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
ff10: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
ff20: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
ff30: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
ff40: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
ff50: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
ff60: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
ff70: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
ff80: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
ff90: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
ffa0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
ffb0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
ffc0: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
ffd0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
ffe0: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
fff0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
10000 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
10010 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
10020 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55  0} }.#define VFU
10030 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10040 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10050 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
10060 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e   SQLITE_UTF8|(bN
10070 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
10080 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
10090 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
100a0 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
100b0 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
100c0 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54  }.#define DFUNCT
100d0 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
100e0 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
100f0 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
10100 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
10110 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 5c  G|SQLITE_UTF8, \
10120 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c  .   0, 0, xFunc,
10130 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
10140 7d 0a 23 64 65 66 69 6e 65 20 50 55 52 45 5f 44  }.#define PURE_D
10150 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
10160 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
10170 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
10180 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
10190 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 53 51  G|SQLITE_UTF8|SQ
101a0 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
101b0 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64 2a 29  NT, \.   (void*)
101c0 26 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20  &sqlite3Config, 
101d0 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  0, xFunc, 0, #zN
101e0 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
101f0 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61  ne FUNCTION2(zNa
10200 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10210 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72  bNC, xFunc, extr
10220 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
10230 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  g,SQLITE_FUNC_CO
10240 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
10250 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10260 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
10270 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51  traFlags,\.   SQ
10280 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
10290 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
102a0 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
102b0 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55  }.#define STR_FU
102c0 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
102d0 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78  rg, pArg, bNC, x
102e0 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
102f0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10300 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38  CHNG|SQLITE_UTF8
10310 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
10320 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
10330 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63    pArg, 0, xFunc
10340 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23  , 0, #zName, }.#
10350 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
10360 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
10370 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
10380 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10390 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
103a0 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20  UTF8|flags, \.  
103b0 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
103c0 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 23 7a   likeFunc, 0, #z
103d0 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
103e0 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e  ine AGGREGATE(zN
103f0 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
10400 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
10410 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  l) \.  {nArg, SQ
10420 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
10430 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10440 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
10450 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
10460 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
10470 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23  l,#zName, {0}}.#
10480 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
10490 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  2(zName, nArg, a
104a0 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
104b0 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67  Final, extraFlag
104c0 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
104d0 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
104e0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
104f0 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
10500 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
10510 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
10520 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
10530 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a  ame, {0}}../*.**
10540 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
10550 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
10560 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
10570 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
10580 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
10590 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
105a0 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
105b0 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
105c0 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
105d0 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
105e0 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
105f0 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
10600 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
10610 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
10620 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
10630 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
10640 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
10650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10660 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
10670 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
10680 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
10690 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
106a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
106c0 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
106d0 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
106e0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
106f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10700 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
10710 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
10720 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
10730 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
10740 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
10750 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
10760 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
10770 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
10780 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
10790 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
107a0 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
107b0 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
107c0 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
107d0 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
107e0 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
107f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
10800 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
10810 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
10820 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
10830 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
10840 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
10850 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
10860 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
10870 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
10880 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
10890 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
108a0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
108b0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
108c0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
108d0 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
108e0 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
108f0 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
10900 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
10910 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
10920 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
10930 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
10940 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
10950 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
10960 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
10970 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
10980 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
10990 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
109a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109b0 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
109c0 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
109d0 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
109e0 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
109f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10a00 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
10a10 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
10a20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20  Table *pEpoTab; 
10a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a40 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75       /* Eponymou
10a50 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73  s table for this
10a60 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   module */.};../
10a70 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  *.** information
10a80 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
10a90 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62  mn of an SQL tab
10aa0 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e  le is held in an
10ab0 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
10ac0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
10ad0 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  */.struct Column
10ae0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
10af0 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ;     /* Name of
10b00 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30   this column, \0
10b10 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70  00, then the typ
10b20 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66  e */.  Expr *pDf
10b30 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75  lt;     /* Defau
10b40 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  lt value of this
10b50 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
10b60 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  r *zColl;     /*
10b70 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
10b80 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75  nce.  If NULL, u
10b90 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  se the default *
10ba0 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20  /.  u8 notNull; 
10bb0 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63       /* An OE_ c
10bc0 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ode for handling
10bd0 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
10be0 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72  traint */.  char
10bf0 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20   affinity;   /* 
10c00 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
10c10 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73  E_AFF_... values
10c20 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20   */.  u8 szEst; 
10c30 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
10c40 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75  ted size of valu
10c50 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e in this column
10c60 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31  . sizeof(INT)==1
10c70 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67   */.  u8 colFlag
10c80 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61  s;     /* Boolea
10c90 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53  n properties.  S
10ca0 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69  ee COLFLAG_ defi
10cb0 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  nes below */.};.
10cc0 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
10cd0 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f  es for Column.co
10ce0 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69  lFlags:.*/.#defi
10cf0 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b  ne COLFLAG_PRIMK
10d00 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a  EY  0x0001    /*
10d10 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20   Column is part 
10d20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
10d30 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  ey */.#define CO
10d40 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30  LFLAG_HIDDEN   0
10d50 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69  x0002    /* A hi
10d60 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  dden column in a
10d70 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
10d80 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
10d90 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30 30  G_HASTYPE  0x000
10da0 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d  4    /* Type nam
10db0 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e  e follows column
10dc0 20 6e 61 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   name */../*.** 
10dd0 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71  A "Collating Seq
10de0 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65  uence" is define
10df0 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
10e00 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
10e10 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
10e20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20  Conceptually, a 
10e30 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10e40 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ce consists of a
10e50 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63   name and.** a c
10e60 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e  omparison routin
10e70 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
10e80 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74  he order of that
10e90 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a   sequence..**.**
10ea0 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70   If CollSeq.xCmp
10eb0 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61   is NULL, it mea
10ec0 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
10ed0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10ee0 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
10ef0 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
10f00 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
10f10 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
10f20 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
10f30 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
10f40 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
10f50 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
10f60 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
10f70 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c  Name of the coll
10f80 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
10f90 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
10fa0 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
10fb0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
10fc0 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65   encoding handle
10fd0 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20  d by xCmp() */. 
10fe0 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20   void *pUser;   
10ff0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
11000 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70  argument to xCmp
11010 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
11020 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  mp)(void*,int, c
11030 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
11040 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20   const void*);. 
11050 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
11060 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75  id*);  /* Destru
11070 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a  ctor for pUser *
11080 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  /.};../*.** A so
11090 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
110a0 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
110b0 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
110c0 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
110d0 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
110e0 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
110f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
11100 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
11110 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
11120 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
11130 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
11140 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31 20  SO_UNDEFINED -1 
11150 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72  /* No sort order
11160 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f   specified */../
11170 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69  *.** Column affi
11180 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a  nity types..**.*
11190 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20  * These used to 
111a0 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61  have mnemonic na
111b0 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20  me like 'i' for 
111c0 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
111d0 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f  ER and.** 't' fo
111e0 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  r SQLITE_AFF_TEX
111f0 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73  T.  But we can s
11200 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61  ave a little spa
11210 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a  ce and improve.*
11220 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69  * the speed a li
11230 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e  ttle by numberin
11240 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e  g the values con
11250 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a  secutively..**.*
11260 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
11270 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
11280 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
11290 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61  th 'A'.  That wa
112a0 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
112b0 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
112c0 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
112d0 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
112e0 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
112f0 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
11300 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
11310 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
11320 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
11330 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
11340 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
11350 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
11360 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
11370 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
11380 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
11390 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20  rison.  And the 
113a0 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69 72  BLOB type is fir
113b0 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  st..*/.#define S
113c0 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20  QLITE_AFF_BLOB  
113d0 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53     'A'.#define S
113e0 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20  QLITE_AFF_TEXT  
113f0 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53     'B'.#define S
11400 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
11410 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53  C  'C'.#define S
11420 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
11430 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53  R  'D'.#define S
11440 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20  QLITE_AFF_REAL  
11450 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20     'E'..#define 
11460 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63  sqlite3IsNumeric
11470 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58  Affinity(X)  ((X
11480 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  )>=SQLITE_AFF_NU
11490 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  MERIC)../*.** Th
114a0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
114b0 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f  K values masks o
114c0 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61  ff the significa
114d0 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a  nt bits of an.**
114e0 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e   affinity value.
114f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
11500 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20  TE_AFF_MASK     
11510 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69  0x47../*.** Addi
11520 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65  tional bit value
11530 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52  s that can be OR
11540 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e  ed with an affin
11550 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63  ity without.** c
11560 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69  hanging the affi
11570 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  nity..**.** The 
11580 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66  SQLITE_NOTNULL f
11590 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61  lag is a combina
115a0 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61  tion of NULLEQ a
115b0 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a  nd JUMPIFNULL..*
115c0 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61  * It causes an a
115d0 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20  ssert() to fire 
115e0 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
115f0 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f  d to a compariso
11600 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73  n.** operator is
11610 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64   NULL.  It is ad
11620 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63  ded to certain c
11630 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
11640 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20  ors to.** prove 
11650 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64  that the operand
11660 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54  s are always NOT
11670 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e   NULL..*/.#defin
11680 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c  e SQLITE_KEEPNUL
11690 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 55  L     0x08  /* U
116a0 73 65 64 20 62 79 20 76 65 63 74 6f 72 20 3d 3d  sed by vector ==
116b0 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e   or <> */.#defin
116c0 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
116d0 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a  ULL   0x10  /* j
116e0 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f  umps if either o
116f0 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a  perand is NULL *
11700 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
11710 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78  _STOREP2      0x
11720 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  20  /* Store res
11730 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72  ult in reg[P2] r
11740 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20  ather than jump 
11750 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
11760 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30  E_NULLEQ       0
11770 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c  x80  /* NULL=NUL
11780 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
11790 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20  ITE_NOTNULL     
117a0 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74   0x90  /* Assert
117b0 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61   that operands a
117c0 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f  re never NULL */
117d0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
117e0 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
117f0 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
11800 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ch virtual table
11810 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74   present in.** t
11820 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
11830 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ma..**.** If the
11840 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
11850 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e   is shared, then
11860 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e   there is one in
11870 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a  stance of this.*
11880 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  * structure for 
11890 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
118a0 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65  nnection (sqlite
118b0 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68  3*) that uses th
118c0 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65  e shared.** sche
118d0 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ma. This is beca
118e0 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73  use each databas
118f0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71  e connection req
11900 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e  uires its own un
11910 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  ique.** instance
11920 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
11930 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65  vtab* handle use
11940 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
11950 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a  virtual table.**
11960 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
11970 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
11980 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
11990 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
119a0 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
119b0 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
119c0 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
119d0 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
119e0 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61  tabase.** schema
119f0 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74   is shared, as t
11a00 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
11a10 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74  n often stores t
11a20 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
11a30 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
11a40 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69   passed to it vi
11a50 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29  a the xConnect()
11a60 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65   or xCreate() me
11a70 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69  thod.** during i
11a80 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
11a90 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64  ternally. This d
11aa0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
11ab0 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a  on handle may.**
11ac0 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79   then be used by
11ad0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
11ae0 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
11af0 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c  n to access real
11b00 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69   tables.** withi
11b10 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
11b20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
11b30 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
11b40 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72  he callers.** tr
11b50 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
11b60 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
11b70 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
11b80 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 0a  e same database.
11b90 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  ** connection as
11ba0 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65 78   that used to ex
11bb0 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74  ecute SQL operat
11bc0 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74  ions on the virt
11bd0 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ual table..**.**
11be0 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65   All VTable obje
11bf0 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73 70  cts that corresp
11c00 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  ond to a single 
11c10 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65  table in a share
11c20 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63  d.** database sc
11c30 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c  hema are initial
11c40 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  ly stored in a l
11c50 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74  inked-list point
11c60 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20  ed to by.** the 
11c70 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65  Table.pVTable me
11c80 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66  mber variable of
11c90 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
11ca0 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e  ng Table object.
11cb0 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69  .** When an sqli
11cc0 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70  te3_prepare() op
11cd0 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69  eration is requi
11ce0 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  red to access th
11cf0 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  e virtual.** tab
11d00 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73 20  le, it searches 
11d10 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65  the list for the
11d20 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72   VTable that cor
11d30 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a  responds to the.
11d40 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
11d50 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65  ection doing the
11d60 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73   preparing so as
11d70 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72   to use the corr
11d80 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76  ect.** sqlite3_v
11d90 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74  tab* handle in t
11da0 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
11db0 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e  y..**.** When an
11dc0 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65   in-memory Table
11dd0 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74   object is delet
11de0 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20  ed (for example 
11df0 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65  when the.** sche
11e00 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f  ma is being relo
11e10 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65  aded for some re
11e20 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c  ason), the VTabl
11e30 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f  e objects are no
11e40 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64  t.** deleted and
11e50 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
11e60 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e  b* handles are n
11e70 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29  ot xDisconnect()
11e80 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ed.** immediatel
11e90 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
11ea0 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
11eb0 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
11ec0 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
11ed0 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
11ee0 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
11ef0 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
11f00 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
11f10 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
11f20 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
11f30 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
11f40 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
11f50 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74  onnected.** next
11f60 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e   time a statemen
11f70 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73  t is prepared us
11f80 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33  ing said sqlite3
11f90 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a  *. This is done.
11fa0 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64  ** to avoid dead
11fb0 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f  lock issues invo
11fc0 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73  lving multiple s
11fd0 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
11fe0 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74  exes..** Refer t
11ff0 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65  o comments above
12000 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   function sqlite
12010 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
12020 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c  ) for an.** expl
12030 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68  anation as to wh
12040 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20  y it is safe to 
12050 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20  add an entry to 
12060 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  an sqlite3.pDisc
12070 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77  onnect.** list w
12080 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74  ithout holding t
12090 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
120a0 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
120b0 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  utex..**.** The 
120c0 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63  memory for objec
120d0 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ts of this type 
120e0 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61  is always alloca
120f0 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  ted by.** sqlite
12100 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69  3DbMalloc(), usi
12110 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
12120 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20  n handle stored 
12130 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 0a  in VTable.db as.
12140 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67  ** the first arg
12150 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ument..*/.struct
12160 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69   VTable {.  sqli
12170 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
12180 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
12190 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73  e connection ass
121a0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
121b0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64  s table */.  Mod
121c0 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20  ule *pMod;      
121d0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
121e0 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c  r to module impl
121f0 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
12200 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
12210 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69  tab;      /* Poi
12220 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73  nter to vtab ins
12230 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  tance */.  int n
12240 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
12250 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12260 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
12270 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  is structure */.
12280 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74    u8 bConstraint
12290 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
122a0 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
122b0 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ts are supported
122c0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70   */.  int iSavep
122d0 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
122e0 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20  /* Depth of the 
122f0 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20  SAVEPOINT stack 
12300 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65  */.  VTable *pNe
12310 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
12320 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64  * Next in linked
12330 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65   list (see above
12340 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
12350 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61  he schema for ea
12360 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e 64  ch SQL table and
12370 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73 65   view is represe
12380 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
12390 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  * by an instance
123a0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
123b0 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
123c0 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
123d0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
123e0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
123f0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
12400 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a  ew */.  Column *
12410 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  aCol;        /* 
12420 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
12430 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  t each column */
12440 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78  .  Index *pIndex
12450 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  ;       /* List 
12460 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
12470 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
12480 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
12490 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
124a0 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
124b0 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
124c0 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
124d0 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
124e0 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
124f0 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
12500 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
12510 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
12520 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
12530 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
12540 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
12550 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
12560 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
12570 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c  pCheck;    /* Al
12580 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  l CHECK constrai
12590 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nts */.         
125a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
125b0 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64     ... also used
125c0 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20   as column name 
125d0 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57 20 2a  list in a VIEW *
125e0 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
125f0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
12600 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72 20   BTree page for 
12610 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
12620 75 33 32 20 6e 54 61 62 52 65 66 3b 20 20 20 20  u32 nTabRef;    
12630 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12640 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
12650 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75 33  is Table */.  u3
12660 32 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20  2 tabFlags;     
12670 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46     /* Mask of TF
12680 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
12690 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20  16 iPKey;       
126a0 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65      /* If not ne
126b0 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c  gative, use aCol
126c0 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72  [iPKey] as the r
126d0 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43  owid */.  i16 nC
126e0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
126f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
12700 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
12710 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52  e */.  LogEst nR
12720 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45  owLogEst;   /* E
12730 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e  stimated rows in
12740 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71   table - from sq
12750 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
12760 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54   */.  LogEst szT
12770 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  abRow;     /* Es
12780 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
12790 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69  each table row i
127a0 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65  n bytes */.#ifde
127b0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
127c0 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73  COSTMULT.  LogEs
127d0 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20  t costMult;     
127e0 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69  /* Cost multipli
127f0 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69  er for using thi
12800 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  s table */.#endi
12810 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20  f.  u8 keyConf; 
12820 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74           /* What
12830 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f   to do in case o
12840 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  f uniqueness con
12850 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a  flict on iPKey *
12860 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
12870 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
12880 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66  .  int addColOff
12890 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65  set;    /* Offse
128a0 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c  t in CREATE TABL
128b0 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20  E stmt to add a 
128c0 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65  new column */.#e
128d0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
128e0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
128f0 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64  TABLE.  int nMod
12900 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20  uleArg;      /* 
12910 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
12920 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  nts to the modul
12930 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
12940 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30  ModuleArg;  /* 0
12950 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68 65  : module 1: sche
12960 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65 20  ma 2: vtab name 
12970 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20  3...: args */.  
12980 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b  VTable *pVTable;
12990 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
129a0 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20  VTable objects. 
129b0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67  */.#endif.  Trig
129c0 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
129d0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67   /* List of trig
129e0 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70  gers stored in p
129f0 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65  Schema */.  Sche
12a00 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
12a10 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20   /* Schema that 
12a20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61  contains this ta
12a30 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ble */.  Table *
12a40 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a  pNextZombie;  /*
12a50 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72   Next on the Par
12a60 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69  se.pZombieTab li
12a70 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
12a80 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
12a90 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67  or Table.tabFlag
12aa0 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48  s..**.** TF_OOOH
12ab0 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f  idden applies to
12ac0 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77 20   tables or view 
12ad0 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65 6e  that have hidden
12ae0 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72   columns that ar
12af0 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79  e.** followed by
12b00 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
12b10 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20  mns.  Example:  
12b20 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  "CREATE VIRTUAL 
12b30 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a  TABLE x USING.**
12b40 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c   vtab1(a HIDDEN,
12b50 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62   b);".  Since "b
12b60 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65  " is a non-hidde
12b70 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22  n column but "a"
12b80 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74   is hidden,.** t
12b90 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  he TF_OOOHidden 
12ba0 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20  attribute would 
12bb0 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61  apply in this ca
12bc0 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73  se.  Such tables
12bd0 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63   require.** spec
12be0 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72  ial handling dur
12bf0 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65  ing INSERT proce
12c00 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ssing..*/.#defin
12c10 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20  e TF_Readonly   
12c20 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
12c30 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74  * Read-only syst
12c40 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  em table */.#def
12c50 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c  ine TF_Ephemeral
12c60 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20 20         0x0002   
12c70 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c   /* An ephemeral
12c80 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
12c90 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b  e TF_HasPrimaryK
12ca0 65 79 20 20 20 30 78 30 30 30 34 20 20 20 20 2f  ey   0x0004    /
12cb0 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72  * Table has a pr
12cc0 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
12cd0 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72  fine TF_Autoincr
12ce0 65 6d 65 6e 74 20 20 20 30 78 30 30 30 38 20 20  ement   0x0008  
12cf0 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69    /* Integer pri
12d00 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f  mary key is auto
12d10 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65  increment */.#de
12d20 66 69 6e 65 20 54 46 5f 48 61 73 53 74 61 74 31  fine TF_HasStat1
12d30 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20          0x0010  
12d40 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73 74 20    /* nRowLogEst 
12d50 73 65 74 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  set from sqlite_
12d60 73 74 61 74 31 20 2a 2f 0a 23 64 65 66 69 6e 65  stat1 */.#define
12d70 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
12d80 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a      0x0020    /*
12d90 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d   No rowid.  PRIM
12da0 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b  ARY KEY is the k
12db0 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
12dc0 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20  _NoVisibleRowid 
12dd0 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 4e 6f   0x0040    /* No
12de0 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72   user-visible "r
12df0 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  owid" column */.
12e00 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69  #define TF_OOOHi
12e10 64 64 65 6e 20 20 20 20 20 20 20 30 78 30 30 38  dden       0x008
12e20 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f  0    /* Out-of-O
12e30 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75  rder hidden colu
12e40 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  mns */.#define T
12e50 46 5f 53 74 61 74 73 55 73 65 64 20 20 20 20 20  F_StatsUsed     
12e60 20 20 30 78 30 31 30 30 20 20 20 20 2f 2a 20 51    0x0100    /* Q
12e70 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 64 65 63  uery planner dec
12e80 69 73 69 6f 6e 73 20 61 66 66 65 63 74 65 64 20  isions affected 
12e90 62 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  by.             
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12eb0 20 20 20 20 20 20 20 20 2a 2a 20 49 6e 64 65 78          ** Index
12ec0 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 5d 20 76  .aiRowLogEst[] v
12ed0 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  alues */.#define
12ee0 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20 20   TF_HasNotNull  
12ef0 20 20 20 20 30 78 30 32 30 30 20 20 20 20 2f 2a      0x0200    /*
12f00 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54 20 4e 55   Contains NOT NU
12f10 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  LL constraints *
12f20 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  /../*.** Test to
12f30 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20   see whether or 
12f40 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61  not a table is a
12f50 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
12f60 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65   This is.** done
12f70 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74   as a macro so t
12f80 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f  hat it will be o
12f90 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65  ptimized out whe
12fa0 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  n virtual.** tab
12fb0 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d  le support is om
12fc0 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
12fd0 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  uild..*/.#ifndef
12fe0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
12ff0 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
13000 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
13010 20 20 20 20 20 20 28 28 58 29 2d 3e 6e 4d 6f 64        ((X)->nMod
13020 75 6c 65 41 72 67 29 0a 23 65 6c 73 65 0a 23 20  uleArg).#else.# 
13030 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
13040 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65 6e 64  l(X)      0.#end
13050 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
13060 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
13070 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69 64   a column is hid
13080 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72 79  den.  IsOrdinary
13090 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a  HiddenColumn().*
130a0 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  * only works for
130b0 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61 62   non-virtual tab
130c0 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74 61  les (ordinary ta
130d0 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29 20  bles and views) 
130e0 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  and is.** always
130f0 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53 51   false unless SQ
13100 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
13110 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64 65  EN_COLUMNS is de
13120 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20 49  fined.  The.** I
13130 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 20  sHiddenColumn() 
13140 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61 6c  macro is general
13150 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66   purpose..*/.#if
13160 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
13170 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
13180 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e 65  LUMNS).#  define
13190 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
131a0 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29  X)         (((X)
131b0 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
131c0 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
131d0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
131e0 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
131f0 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46  n(X) (((X)->colF
13200 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
13210 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69 66  IDDEN)!=0).#elif
13220 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
13230 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
13240 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  LE).#  define Is
13250 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
13260 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63          (((X)->c
13270 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
13280 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20  G_HIDDEN)!=0).# 
13290 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61   define IsOrdina
132a0 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  ryHiddenColumn(X
132b0 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ) 0.#else.#  def
132c0 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
132d0 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 30 0a  mn(X)         0.
132e0 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
132f0 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
13300 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f  (X) 0.#endif.../
13310 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65  * Does the table
13320 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f   have a rowid */
13330 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69  .#define HasRowi
13340 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e  d(X)     (((X)->
13350 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69  tabFlags & TF_Wi
13360 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a  thoutRowid)==0).
13370 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52  #define VisibleR
13380 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74  owid(X) (((X)->t
13390 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56  abFlags & TF_NoV
133a0 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29  isibleRowid)==0)
133b0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72  ../*.** Each for
133c0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
133d0 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  int is an instan
133e0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
133f0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
13400 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b  *.** A foreign k
13410 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64  ey is associated
13420 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73   with two tables
13430 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61  .  The "from" ta
13440 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61  ble is.** the ta
13450 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
13460 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  s the REFERENCES
13470 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65   clause that cre
13480 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e  ates the foreign
13490 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74  .** key.  The "t
134a0 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20  o" table is the 
134b0 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61  table that is na
134c0 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52  med in the REFER
134d0 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a  ENCES clause..**
134e0 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65   Consider this e
134f0 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  xample:.**.**   
13500 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65    CREATE TABLE e
13510 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49  x1(.**       a I
13520 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
13530 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49  EY,.**       b I
13540 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e  NTEGER CONSTRAIN
13550 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53  T fk1 REFERENCES
13560 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29   ex2(x).**     )
13570 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65  ;.**.** For fore
13580 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74  ign key "fk1", t
13590 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
135a0 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74   "ex1" and the t
135b0 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22  o-table is "ex2"
135c0 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20  ..** Equivalent 
135d0 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  names:.**.**    
135e0 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63   from-table == c
135f0 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20  hild-table.**   
13600 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20      to-table == 
13610 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a  parent-table.**.
13620 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
13630 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
13640 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
13650 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
13660 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
13670 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
13680 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
13690 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
136a0 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
136b0 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
136c0 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
136d0 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
136e0 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
136f0 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
13700 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74  ..**.** The list
13710 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20   of all parents 
13720 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20  for child Table 
13730 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70  X is held at X.p
13740 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69  FKey..**.** A li
13750 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72  st of all childr
13760 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e  en for a table n
13770 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69  amed Z (which mi
13780 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69  ght not even exi
13790 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69  st).** is held i
137a0 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73  n Schema.fkeyHas
137b0 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65  h with a hash ke
137c0 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63  y of Z..*/.struc
137d0 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65  t FKey {.  Table
137e0 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20   *pFrom;     /* 
137f0 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
13800 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
13810 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69  clause (aka: Chi
13820 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ld) */.  FKey *p
13830 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65  NextFrom;  /* Ne
13840 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65  xt FKey with the
13850 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20   same in pFrom. 
13860 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70  Next parent of p
13870 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  From */.  char *
13880 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  zTo;        /* N
13890 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61  ame of table tha
138a0 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73  t the key points
138b0 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74   to (aka: Parent
138c0 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
138d0 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74  xtTo;    /* Next
138e0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
138f0 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f  To. Next child o
13900 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79  f zTo. */.  FKey
13910 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a   *pPrevTo;    /*
13920 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74   Previous with t
13930 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20  he same zTo */. 
13940 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
13950 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13960 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
13970 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20  key */.  /* EV: 
13980 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f  R-30323-21917 */
13990 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64  .  u8 isDeferred
139a0 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  ;       /* True 
139b0 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
139c0 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
139d0 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
139e0 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
139f0 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20  ];        /* ON 
13a00 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50  DELETE and ON UP
13a10 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65  DATE actions, re
13a20 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20  spectively */.  
13a30 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67  Trigger *apTrigg
13a40 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72  er[2];/* Trigger
13a50 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20  s for aAction[] 
13a60 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  actions */.  str
13a70 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20  uct sColMap {   
13a80 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66     /* Mapping of
13a90 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
13aa0 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
13ab0 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
13ac0 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20  From;           
13ad0 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c   /* Index of col
13ae0 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  umn in pFrom */.
13af0 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20      char *zCol; 
13b00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
13b10 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a  e of column in z
13b20 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65  To.  If NULL use
13b30 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
13b40 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20    } aCol[1];    
13b50 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
13b60 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66  ntry for each of
13b70 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f   nCol columns */
13b80 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74  .};../*.** SQLit
13b90 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20  e supports many 
13ba0 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
13bb0 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73  o resolve a cons
13bc0 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  traint.** error.
13bd0 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65    ROLLBACK proce
13be0 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
13bf0 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
13c00 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65  olation.** cause
13c10 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
13c20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61  in process to fa
13c30 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63  il and for the c
13c40 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
13c50 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c  on.** to be roll
13c60 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20  ed back.  ABORT 
13c70 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
13c80 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
13c90 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69  n process.** fai
13ca0 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72  ls and any prior
13cb0 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68   changes from th
13cc0 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e  at one operation
13cd0 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c   are backed out,
13ce0 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e  .** but the tran
13cf0 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72  saction is not r
13d00 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49  olled back.  FAI
13d10 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  L processing mea
13d20 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f  ns that.** the o
13d30 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  peration in prog
13d40 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72  ress stops and r
13d50 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20  eturns an error 
13d60 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72  code.  But prior
13d70 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20  .** changes due 
13d80 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  to the same oper
13d90 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61  ation are not ba
13da0 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20  cked out and no 
13db0 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75  rollback.** occu
13dc0 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e  rs.  IGNORE mean
13dd0 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69  s that the parti
13de0 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63  cular row that c
13df0 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72  aused the constr
13e00 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73  aint.** error is
13e10 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72   not inserted or
13e20 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65   updated.  Proce
13e30 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
13e40 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20  and no error.** 
13e50 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45  is returned.  RE
13e60 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74  PLACE means that
13e70 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74   preexisting dat
13e80 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
13e90 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51  caused.** a UNIQ
13ea0 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  UE constraint vi
13eb0 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f  olation are remo
13ec0 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ved so that the 
13ed0 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a  new insert or.**
13ee0 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63   update can proc
13ef0 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  eed.  Processing
13f00 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
13f10 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72  o error is repor
13f20 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52  ted..**.** RESTR
13f30 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e  ICT, SETNULL, an
13f40 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e  d CASCADE action
13f50 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20  s apply only to 
13f60 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a  foreign keys..**
13f70 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65   RESTRICT is the
13f80 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66   same as ABORT f
13f90 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72  or IMMEDIATE for
13fa0 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68  eign keys and th
13fb0 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c  e.** same as ROL
13fc0 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52  LBACK for DEFERR
13fd0 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c  ED keys.  SETNUL
13fe0 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  L means that the
13ff0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
14000 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20  is set to NULL. 
14010 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74   CASCADE means t
14020 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20  hat a DELETE or 
14030 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a  UPDATE of the.**
14040 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
14050 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61  e row is propaga
14060 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77  ted into the row
14070 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a   that holds the.
14080 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a  ** foreign key..
14090 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
140a0 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
140b0 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
140c0 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
140d0 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
140e0 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
140f0 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
14100 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
14110 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
14120 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
14130 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
14140 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
14150 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
14160 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
14170 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
14180 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
14190 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
141a0 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
141b0 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
141c0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
141d0 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
141e0 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
141f0 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
14200 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
14210 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
14220 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
14230 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
14240 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
14250 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
14260 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
14270 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
14280 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
14290 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
142a0 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
142b0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74  .#define OE_Rest
142c0 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41  rict 6   /* OE_A
142d0 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41  bort for IMMEDIA
142e0 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  TE, OE_Rollback 
142f0 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a  for DEFERRED */.
14300 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75  #define OE_SetNu
14310 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74  ll  7   /* Set t
14320 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
14330 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a  alue to NULL */.
14340 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66  #define OE_SetDf
14350 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74  lt  8   /* Set t
14360 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
14370 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61  alue to its defa
14380 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ult */.#define O
14390 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20 2f  E_Cascade  9   /
143a0 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68  * Cascade the ch
143b0 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e  anges */..#defin
143c0 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30  e OE_Default  10
143d0 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
143e0 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
143f0 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
14400 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
14410 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
14420 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
14430 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
14440 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
14450 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
14460 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
14470 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 0a   to control the.
14480 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  ** comparison of
14490 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b   the two index k
144a0 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  eys..**.** Note 
144b0 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b  that aSortOrder[
144c0 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61  ] and aColl[] ha
144d0 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74  ve nField+1 slot
144e0 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  s.  There.** are
144f0 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f   nField slots fo
14500 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  r the columns of
14510 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f   an index then o
14520 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a  ne extra slot.**
14530 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61   for the rowid a
14540 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  t the end..*/.st
14550 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
14560 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20   u32 nRef;      
14570 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14580 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  f references to 
14590 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a  this KeyInfo obj
145a0 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ect */.  u8 enc;
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
145c0 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20  Text encoding - 
145d0 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  one of the SQLIT
145e0 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f  E_UTF* values */
145f0 0a 20 20 75 31 36 20 6e 4b 65 79 46 69 65 6c 64  .  u16 nKeyField
14600 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
14610 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20   of key columns 
14620 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
14630 20 20 75 31 36 20 6e 41 6c 6c 46 69 65 6c 64 3b    u16 nAllField;
14640 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 63        /* Total c
14650 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75 64 69 6e  olumns, includin
14660 67 20 6b 65 79 20 70 6c 75 73 20 6f 74 68 65 72  g key plus other
14670 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  s */.  sqlite3 *
14680 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
14690 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
146a0 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61  ction */.  u8 *a
146b0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f  SortOrder;     /
146c0 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72  * Sort order for
146d0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f   each column. */
146e0 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c  .  CollSeq *aCol
146f0 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  l[1];  /* Collat
14700 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ing sequence for
14710 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   each term of th
14720 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  e key */.};../*.
14730 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68  ** This object h
14740 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 77 68  olds a record wh
14750 69 63 68 20 68 61 73 20 62 65 65 6e 20 70 61 72  ich has been par
14760 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64  sed out into ind
14770 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64  ividual.** field
14780 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  s, for the purpo
14790 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61 20 63  ses of doing a c
147a0 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a  omparison..**.**
147b0 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20   A record is an 
147c0 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74  object that cont
147d0 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
147e0 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e   fields of data.
147f0 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20  .** Records are 
14800 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
14810 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74  e content of a t
14820 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20  able row and to 
14830 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79  store.** the key
14840 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41   of an index.  A
14850 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f   blob encoding o
14860 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72  f a record is cr
14870 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  eated by.** the 
14880 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  OP_MakeRecord op
14890 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45  code of the VDBE
148a0 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d   and is disassem
148b0 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f  bled by the.** O
148c0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
148d0 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  .**.** An instan
148e0 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
148f0 74 20 73 65 72 76 65 73 20 61 73 20 61 20 22 6b  t serves as a "k
14900 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20 61 20  ey" for doing a 
14910 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20  search on.** an 
14920 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20 54 68  index b+tree. Th
14930 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20 73 65  e goal of the se
14940 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e 64 20  arch is to find 
14950 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  the entry that.*
14960 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f 20 74  * is closed to t
14970 68 65 20 6b 65 79 20 64 65 73 63 72 69 62 65 64  he key described
14980 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63 74 2e   by this object.
14990 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 6d 69    This object mi
149a0 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74  ght hold.** just
149b0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
149c0 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d 62 65   key.  The numbe
149d0 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73 20 67  r of fields is g
149e0 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49  iven by.** pKeyI
149f0 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a  nfo->nField..**.
14a00 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32  ** The r1 and r2
14a10 20 66 69 65 6c 64 73 20 61 72 65 20 74 68 65 20   fields are the 
14a20 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75 72 6e  values to return
14a30 20 69 66 20 74 68 69 73 20 6b 65 79 20 69 73 20   if this key is 
14a40 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20  less than.** or 
14a50 67 72 65 61 74 65 72 20 74 68 61 6e 20 61 20 6b  greater than a k
14a60 65 79 20 69 6e 20 74 68 65 20 62 74 72 65 65 2c  ey in the btree,
14a70 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
14a80 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c  These are normal
14a90 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20  ly.** -1 and +1 
14aa0 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 62 75  respectively, bu
14ab0 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76 65 72  t might be inver
14ac0 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31  ted to +1 and -1
14ad0 20 69 66 20 74 68 65 20 62 2d 74 72 65 65 0a 2a   if the b-tree.*
14ae0 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f 72 64  * is in DESC ord
14af0 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65  er..**.** The ke
14b00 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e  y comparison fun
14b10 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20  ctions actually 
14b20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 5f 72  return default_r
14b30 63 20 77 68 65 6e 20 74 68 65 79 20 66 69 6e 64  c when they find
14b40 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20 63 6f  .** an equals co
14b50 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66 61 75  mparison.  defau
14b60 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d 31 2c  lt_rc can be -1,
14b70 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66 20 74   0, or +1.  If t
14b80 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74  here are.** mult
14b90 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20  iple entries in 
14ba0 74 68 65 20 62 2d 74 72 65 65 20 77 69 74 68 20  the b-tree with 
14bb0 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28 77 68  the same key (wh
14bc0 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a  en only looking.
14bd0 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73 74 20  ** at the first 
14be0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
14bf0 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75 6c 74  s,) then default
14c00 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74 20 74  _rc can be set t
14c10 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75 73 65  o -1 to.** cause
14c20 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 20 66   the search to f
14c30 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d 61 74  ind the last mat
14c40 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61 75  ch, or +1 to cau
14c50 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
14c60 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66 69 72  .** find the fir
14c70 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20  st match..**.** 
14c80 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73  The key comparis
14c90 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c  on functions wil
14ca0 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74 6f 20  l set eqSeen to 
14cb0 74 72 75 65 20 69 66 20 74 68 65 79 20 65 76 65  true if they eve
14cc0 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65 71 75  r.** get and equ
14cd0 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65 6e 20  al results when 
14ce0 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73 20 73  comparing this s
14cf0 74 72 75 63 74 75 72 65 20 74 6f 20 61 20 62 2d  tructure to a b-
14d00 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  tree record..** 
14d10 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 21  When default_rc!
14d20 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68 20 6d  =0, the search m
14d30 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e 20 74  ight end up on t
14d40 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64 69  he record immedi
14d50 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20  ately.** before 
14d60 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 20  the first match 
14d70 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61  or immediately a
14d80 66 74 65 72 20 74 68 65 20 6c 61 73 74 20 6d 61  fter the last ma
14d90 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53  tch.  The.** eqS
14da0 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20 69  een field will i
14db0 6e 64 69 63 61 74 65 20 77 68 65 74 68 65 72 20  ndicate whether 
14dc0 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20  or not an exact 
14dd0 6d 61 74 63 68 20 65 78 69 73 74 73 20 69 6e 20  match exists in 
14de0 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a  the.** b-tree..*
14df0 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  /.struct Unpacke
14e00 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49  dRecord {.  KeyI
14e10 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
14e20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64  /* Collation and
14e30 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f   sort-order info
14e40 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d  rmation */.  Mem
14e50 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
14e60 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20   /* Values */.  
14e70 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
14e80 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14e90 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
14ea0 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61  m[] */.  i8 defa
14eb0 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20  ult_rc;      /* 
14ec0 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
14ed0 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71  t if keys are eq
14ee0 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43  ual */.  u8 errC
14ef0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ode;         /* 
14f00 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62  Error detected b
14f10 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  y xRecordCompare
14f20 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d   (CORRUPT or NOM
14f30 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20  EM) */.  i8 r1; 
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14f50 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
14f60 69 66 20 28 6c 68 73 20 3c 20 72 68 73 29 20 2a  if (lhs < rhs) *
14f70 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20 20 20  /.  i8 r2;      
14f80 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
14f90 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
14fa0 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 75  hs > rhs) */.  u
14fb0 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20 20 20  8 eqSeen;       
14fc0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e     /* True if an
14fd0 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70 61 72   equality compar
14fe0 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65  ison has been se
14ff0 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a  en */.};.../*.**
15000 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20   Each SQL index 
15010 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
15020 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a  n memory by an.*
15030 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
15040 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
15050 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  cture..**.** The
15060 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
15070 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74  table that are t
15080 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65  o be indexed are
15090 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79   described.** by
150a0 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20   the aiColumn[] 
150b0 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74  field of this st
150c0 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78  ructure.  For ex
150d0 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a  ample, suppose.*
150e0 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f  * we have the fo
150f0 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e  llowing table an
15100 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20  d index:.**.**  
15110 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
15120 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69  Ex1(c1 int, c2 i
15130 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a  nt, c3 text);.**
15140 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
15150 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c  X Ex2 ON Ex1(c3,
15160 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  c1);.**.** In th
15170 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  e Table structur
15180 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31  e describing Ex1
15190 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73  , nCol==3 becaus
151a0 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74  e there are.** t
151b0 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  hree columns in 
151c0 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74  the table.  In t
151d0 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  he Index structu
151e0 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a  re describing.**
151f0 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32   Ex2, nColumn==2
15200 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20   since 2 of the 
15210 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31  3 columns of Ex1
15220 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a   are indexed..**
15230 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69   The value of ai
15240 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d  Column is {2, 0}
15250 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d  .  aiColumn[0]==
15260 32 20 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a  2 because the.**
15270 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f   first column to
15280 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29   be indexed (c3)
15290 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
152a0 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d   2 in Ex1.aCol[]
152b0 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20  ..** The second 
152c0 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
152d0 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e  exed (c1) has an
152e0 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a   index of 0 in.*
152f0 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65  * Ex1.aCol[], he
15300 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e  nce Ex2.aiColumn
15310 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  [1]==0..**.** Th
15320 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  e Index.onError 
15330 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73  field determines
15340 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
15350 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75  the indexed colu
15360 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75  mns.** must be u
15370 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74  nique and what t
15380 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65  o do if they are
15390 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65   not.  When Inde
153a0 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e  x.onError=OE_Non
153b0 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74  e,.** it means t
153c0 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69  his is not a uni
153d0 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65  que index.  Othe
153e0 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e  rwise it is a un
153f0 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e  ique index.** an
15400 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49  d the value of I
15410 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64  ndex.onError ind
15420 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20  icate the which 
15430 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
15440 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d  ion.** algorithm
15450 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65   to employ whene
15460 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ver an attempt i
15470 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74  s made to insert
15480 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a   a non-unique.**
15490 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20   element..**.** 
154a0 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20  While parsing a 
154b0 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20  CREATE TABLE or 
154c0 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
154d0 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20  tement in order 
154e0 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56  to.** generate V
154f0 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70  DBE code (as opp
15500 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20  osed to parsing 
15510 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e  one read from an
15520 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a   sqlite_master.*
15530 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72 74 20  * table as part 
15540 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78  of parsing an ex
15550 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
15560 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65  schema), transie
15570 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20  nt instances.** 
15580 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
15590 65 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64  e may be created
155a0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
155b0 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61  he Index.tnum va
155c0 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65  riable is.** use
155d0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61  d to store the a
155e0 64 64 72 65 73 73 20 6f 66 20 61 20 56 44 42 45  ddress of a VDBE
155f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f   instruction, no
15600 74 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67  t a database pag
15610 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20  e.** number (it 
15620 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74  cannot - the dat
15630 61 62 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f  abase page is no
15640 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69  t allocated unti
15650 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72  l the VDBE.** pr
15660 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75 74 65  ogram is execute
15670 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54  d). See convertT
15680 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62  oWithoutRowidTab
15690 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  le() for details
156a0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
156b0 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
156c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
156d0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
156e0 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61  ndex */.  i16 *a
156f0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
15700 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
15710 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
15720 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
15730 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73   is 0 */.  LogEs
15740 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20  t *aiRowLogEst; 
15750 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
15760 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
15770 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
15780 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
15790 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
157a0 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
157b0 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
157c0 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
157d0 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
157e0 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
157f0 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
15800 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
15810 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
15820 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
15830 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
15840 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
15850 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
15860 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
15870 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
15880 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
15890 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
158a0 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
158b0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
158c0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
158d0 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
158e0 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73  e==ASC */.  cons
158f0 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b  t char **azColl;
15900 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
15910 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
15920 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
15930 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dex */.  Expr *p
15940 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20  PartIdxWhere;   
15950 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
15960 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
15970 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  dices */.  ExprL
15980 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20  ist *aColExpr;  
15990 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78      /* Column ex
159a0 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
159b0 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
159c0 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61          /* DB Pa
159d0 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f  ge containing ro
159e0 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  ot of this index
159f0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49   */.  LogEst szI
15a00 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f  dxRow;         /
15a10 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72  * Estimated aver
15a20 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20  age row size in 
15a30 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  bytes */.  u16 n
15a40 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  KeyCol;         
15a50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15a60 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67   columns forming
15a70 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31   the key */.  u1
15a80 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 nColumn;      
15a90 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15aa0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72   of columns stor
15ab0 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ed in the index 
15ac0 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b  */.  u8 onError;
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15ae0 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67   OE_Abort, OE_Ig
15af0 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65  nore, OE_Replace
15b00 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a  , or OE_None */.
15b10 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79    unsigned idxTy
15b20 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d  pe:2;      /* 1=
15b30 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d  =UNIQUE, 2==PRIM
15b40 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41  ARY KEY, 0==CREA
15b50 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e  TE INDEX */.  un
15b60 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65  signed bUnordere
15b70 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68  d:1;   /* Use th
15b80 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20  is index for == 
15b90 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e  or IN queries on
15ba0 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ly */.  unsigned
15bb0 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20   uniqNotNull:1; 
15bc0 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51   /* True if UNIQ
15bd0 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20  UE and NOT NULL 
15be0 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  for all columns 
15bf0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
15c00 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a  Resized:1;    /*
15c10 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65 49   True if resizeI
15c20 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73  ndexObject() has
15c30 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
15c40 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76    unsigned isCov
15c50 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72  ering:1;   /* Tr
15c60 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61 20  ue if this is a 
15c70 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a  covering index *
15c80 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53  /.  unsigned noS
15c90 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20  kipScan:1;   /* 
15ca0 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73  Do not try to us
15cb0 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74  e skip-scan if t
15cc0 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  rue */.  unsigne
15cd0 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20 20 20  d hasStat1:1;   
15ce0 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45 73 74    /* aiRowLogEst
15cf0 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66 72 6f   values come fro
15d00 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a  m sqlite_stat1 *
15d10 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
15d20 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
15d30 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d  STAT4.  int nSam
15d40 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ple;            
15d50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c   /* Number of el
15d60 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c  ements in aSampl
15d70 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  e[] */.  int nSa
15d80 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20  mpleCol;        
15d90 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64    /* Size of Ind
15da0 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20  exSample.anEq[] 
15db0 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74  and so on */.  t
15dc0 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20  Rowcnt *aAvgEq; 
15dd0 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
15de0 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f  ge nEq values fo
15df0 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53  r keys not in aS
15e00 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78  ample */.  Index
15e10 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
15e20 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f      /* Samples o
15e30 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
15e40 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  key */.  tRowcnt
15e50 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20   *aiRowEst;     
15e60 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
15e70 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20  hmic stat1 data 
15e80 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a  for this index *
15e90 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77  /.  tRowcnt nRow
15ea0 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20  Est0;        /* 
15eb0 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
15ec0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
15ed0 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23  n the index */.#
15ee0 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
15ef0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
15f00 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65  or Index.idxType
15f10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
15f20 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45  TE_IDXTYPE_APPDE
15f30 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72  F      0   /* Cr
15f40 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
15f50 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66  TE INDEX */.#def
15f60 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
15f70 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31  PE_UNIQUE      1
15f80 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73     /* Implements
15f90 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
15fa0 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
15fb0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
15fc0 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f  RIMARYKEY  2   /
15fd0 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59  * Is the PRIMARY
15fe0 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
15ff0 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e  le */../* Return
16000 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
16010 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45   is a PRIMARY KE
16020 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  Y index */.#defi
16030 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49  ne IsPrimaryKeyI
16040 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69  ndex(X)  ((X)->i
16050 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49  dxType==SQLITE_I
16060 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
16070 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  Y)../* Return tr
16080 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
16090 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20   a UNIQUE index 
160a0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69  */.#define IsUni
160b0 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20  queIndex(X)     
160c0 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d   ((X)->onError!=
160d0 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65  OE_None)../* The
160e0 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b   Index.aiColumn[
160f0 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 72  ] values are nor
16100 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20 69  mally positive i
16110 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20  nteger.  But.** 
16120 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 6e  there are some n
16130 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 74  egative values t
16140 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61 6c  hat have special
16150 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65   meaning:.*/.#de
16160 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20 20  fine XN_ROWID   
16170 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e    (-1)     /* In
16180 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
16190 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  the rowid */.#de
161a0 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20 20  fine XN_EXPR    
161b0 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e    (-2)     /* In
161c0 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
161d0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  an expression */
161e0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d  ../*.** Each sam
161f0 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ple stored in th
16200 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
16210 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
16220 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a  ted in memory.**
16230 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75   using a structu
16240 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e  re of this type.
16250 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74    See documentat
16260 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f  ion at the top o
16270 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65  f the.** analyze
16280 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  .c source file f
16290 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
162a0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
162b0 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
162c0 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20   {.  void *p;   
162d0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
162e0 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63  r to sampled rec
162f0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ord */.  int n; 
16300 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
16310 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20  ze of record in 
16320 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63  bytes */.  tRowc
16330 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20  nt *anEq;    /* 
16340 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
16350 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65  ows where the ke
16360 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61  y equals this sa
16370 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
16380 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45  t *anLt;    /* E
16390 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
163a0 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20  ws where key is 
163b0 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
163c0 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
163d0 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20  nt *anDLt;   /* 
163e0 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64  Est. number of d
163f0 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73  istinct keys les
16400 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
16410 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
16420 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e  Each token comin
16430 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78  g out of the lex
16440 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  er is an instanc
16450 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
16460 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20  ucture.  Tokens 
16470 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73  are also used as
16480 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72   part of an expr
16490 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  ession..**.** No
164a0 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30  te if Token.z==0
164b0 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20   then Token.dyn 
164c0 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20  and Token.n are 
164d0 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a  undefined and.**
164e0 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e   may contain ran
164f0 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20  dom values.  Do 
16500 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73  not make any ass
16510 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54  umptions about T
16520 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20  oken.dyn.** and 
16530 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b  Token.n when Tok
16540 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75  en.z==0..*/.stru
16550 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
16560 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
16570 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
16580 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
16590 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
165a0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
165b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
165c0 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
165d0 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
165e0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
165f0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
16600 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
16610 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
16620 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
16630 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
16640 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
16650 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
16660 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
16670 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
16680 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
16690 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
166a0 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
166b0 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
166c0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
166d0 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
166e0 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
166f0 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
16700 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
16710 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
16720 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
16730 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
16740 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
16750 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
16760 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
16770 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
16780 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
16790 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
167a0 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
167b0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
167c0 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
167d0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
167e0 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
167f0 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
16800 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
16810 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
16820 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
16830 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
16840 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
16850 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
16860 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
16870 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
16880 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
16890 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
168a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
168b0 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
168c0 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
168d0 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
168e0 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
168f0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
16900 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
16910 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
16920 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
16930 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
16950 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
16960 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
16970 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
16980 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
16990 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
169a0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
169b0 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
169c0 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
169d0 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
169e0 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
169f0 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
16a00 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16a10 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
16a20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
16a30 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78  .  int mnReg, mx
16a40 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61  Reg;       /* Ra
16a50 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73  nge of registers
16a60 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
16a70 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f  Col and aFunc */
16a80 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
16a90 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
16aa0 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
16ab0 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
16ac0 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
16ad0 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
16ae0 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
16af0 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
16b00 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
16b10 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
16b20 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
16b30 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
16b40 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
16b50 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
16b60 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
16b70 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16b90 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
16ba0 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
16bb0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
16bc0 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
16bd0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
16be0 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
16bf0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
16c00 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
16c10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
16c20 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
16c30 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
16c40 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
16c50 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
16c60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
16c70 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
16c80 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
16c90 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
16ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16cb0 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
16cc0 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
16cd0 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
16ce0 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
16cf0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16d00 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
16d10 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
16d20 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d30 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
16d40 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
16d50 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
16d60 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
16d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16d80 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
16d90 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
16da0 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
16db0 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
16dc0 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
16dd0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
16de0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
16df0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16e00 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
16e10 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
16e20 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
16e30 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
16e40 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
16e50 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
16e60 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
16e70 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
16e80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
16e90 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
16ea0 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
16eb0 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
16ec0 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
16ed0 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
16ee0 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
16ef0 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
16f00 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
16f10 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
16f20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16f30 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
16f40 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
16f50 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
16f60 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
16f70 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
16f80 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
16f90 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
16fa0 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
16fb0 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
16fc0 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
16fd0 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
16fe0 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
16ff0 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
17000 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
17010 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
17020 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
17030 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
17040 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
17050 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
17060 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
17070 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
17080 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
17090 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
170a0 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
170b0 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
170c0 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
170d0 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
170e0 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
170f0 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
17100 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
17110 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
17120 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
17130 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
17140 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
17150 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
17160 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
17170 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
17180 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
17190 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
171a0 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
171b0 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
171c0 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
171d0 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
171e0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
171f0 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
17200 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
17210 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
17220 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
17230 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
17240 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
17250 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
17260 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
17270 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
17280 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
17290 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
172a0 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
172b0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
172c0 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
172d0 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
172e0 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
172f0 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
17300 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
17310 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
17320 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
17330 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
17340 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
17350 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
17360 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
17370 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
17380 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
17390 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20  AT, TK_BLOB,.** 
173a0 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
173b0 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
173c0 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
173d0 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
173e0 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
173f0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
17400 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
17410 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
17420 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
17430 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  the.** variable 
17440 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
17450 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
17460 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
17470 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
17480 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
17490 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
174a0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
174b0 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
174c0 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
174d0 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
174e0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
174f0 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
17500 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
17510 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
17520 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
17530 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
17540 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
17550 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
17560 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
17570 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
17580 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
17590 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
175a0 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
175b0 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
175c0 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
175d0 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
175e0 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
175f0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17600 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
17610 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
17620 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
17630 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
17640 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
17650 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
17660 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
17670 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
17680 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
17690 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
176a0 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
176b0 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76  .x.pList is.** v
176c0 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
176d0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
176e0 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
176f0 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
17700 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
17710 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
17720 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
17730 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
17740 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
17750 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
17760 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
17770 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
17780 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
17790 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
177a0 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
177b0 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
177c0 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
177d0 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
177e0 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
177f0 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
17800 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
17810 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
17820 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
17830 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
17840 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
17850 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
17860 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
17870 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
17880 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
17890 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
178a0 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
178b0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
178c0 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
178d0 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
178e0 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
178f0 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72  ark.** character
17900 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67   '?' in the orig
17910 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74  inal SQL) then t
17920 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  he Expr.iTable h
17930 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a  olds the index.*
17940 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
17950 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a  t variable..**.*
17960 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
17970 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72  ion is a subquer
17980 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c  y then Expr.iCol
17990 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  umn holds an int
179a0 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72  eger.** register
179b0 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69   number containi
179c0 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ng the result of
179d0 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20   the subquery.  
179e0 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65  If the.** subque
179f0 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74  ry gives a const
17a00 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e  ant result, then
17a10 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20   iTable is -1.  
17a20 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a  If the subquery.
17a30 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65  ** gives a diffe
17a40 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64  rent answer at d
17a50 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64  ifferent times d
17a60 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
17a70 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68  processing.** th
17a80 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65  en iTable is the
17a90 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75   address of a su
17aa0 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f  broutine that co
17ab0 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75  mputes the subqu
17ac0 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ery..**.** If th
17ad0 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
17ae0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
17af0 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
17b00 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
17b10 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
17b20 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
17b30 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
17b40 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
17b50 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
17b60 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
17b70 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  efinition..**.**
17b80 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45   ALLOCATION NOTE
17b90 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62  S:.**.** Expr ob
17ba0 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20  jects can use a 
17bb0 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  lot of memory sp
17bc0 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ace in database 
17bd0 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68  schema.  To.** h
17be0 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72  elp reduce memor
17bf0 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20  y requirements, 
17c00 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70  sometimes an Exp
17c10 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  r object will be
17c20 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20  .** truncated.  
17c30 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68  And to reduce th
17c40 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
17c50 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
17c60 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f  sometimes.** two
17c70 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62   or more Expr ob
17c80 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74  jects will be st
17c90 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ored in a single
17ca0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
17cb0 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20  on,.** together 
17cc0 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  with Expr.zToken
17cd0 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20   strings..**.** 
17ce0 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
17cf0 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e  d and EP_TokenOn
17d00 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ly flags are set
17d10 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72   when.** an Expr
17d20 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63   object is trunc
17d30 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52  ated.  When EP_R
17d40 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74  educed is set, t
17d50 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63  hen all.** the c
17d60 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74  hild Expr object
17d70 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c  s in the Expr.pL
17d80 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69  eft and Expr.pRi
17d90 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20  ght subtrees.** 
17da0 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  are contained wi
17db0 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65  thin the same me
17dc0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
17dd0 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c    Note, however,
17de0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62   that.** the sub
17df0 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e  trees in Expr.x.
17e00 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e  pList or Expr.x.
17e10 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  pSelect are alwa
17e20 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a  ys separately.**
17e30 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61   allocated, rega
17e40 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
17e50 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75  r or not EP_Redu
17e60 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73  ced is set..*/.s
17e70 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75  truct Expr {.  u
17e80 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
17e90 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69        /* Operati
17ea0 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  on performed by 
17eb0 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63  this node */.  c
17ec0 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
17ed0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
17ee0 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c  inity of the col
17ef0 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20  umn or 0 if not 
17f00 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  a column */.  u3
17f10 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  2 flags;        
17f20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
17f30 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65  flags.  EP_* See
17f40 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f   below */.  unio
17f50 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54  n {.    char *zT
17f60 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  oken;          /
17f70 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a  * Token value. Z
17f80 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61  ero terminated a
17f90 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20  nd dequoted */. 
17fa0 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20     int iValue;  
17fb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e            /* Non
17fc0 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65  -negative intege
17fd0 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e  r value if EP_In
17fe0 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b  tValue */.  } u;
17ff0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
18000 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
18010 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
18020 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
18030 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
18040 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
18050 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
18060 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
18070 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
18080 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
18090 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
180a0 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
180b0 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
180c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
180d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
180e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
180f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18100 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74  /..  Expr *pLeft
18110 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
18120 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  eft subnode */. 
18130 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20   Expr *pRight;  
18140 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74          /* Right
18150 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e   subnode */.  un
18160 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69  ion {.    ExprLi
18170 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f  st *pList;     /
18180 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  * op = IN, EXIST
18190 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c  S, SELECT, CASE,
181a0 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45   FUNCTION, BETWE
181b0 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  EN */.    Select
181c0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
181d0 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61  * EP_xIsSelect a
181e0 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  nd op = IN, EXIS
181f0 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20  TS, SELECT */.  
18200 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } x;..  /* If th
18210 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
18220 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
18230 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
18240 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
18250 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
18260 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
18270 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
18280 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
18290 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
182a0 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
182b0 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
182c0 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a  lfunction..  ***
182d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
182e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
182f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18310 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  **/..#if SQLITE_
18320 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
18330 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
18340 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69            /* Hei
18350 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20  ght of the tree 
18360 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e  headed by this n
18370 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
18380 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
18390 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
183a0 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62  UMN: cursor numb
183b0 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64  er of table hold
183c0 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  ing column.     
183d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183e0 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54      ** TK_REGIST
183f0 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  ER: register num
18400 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  ber.            
18410 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
18420 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e  TK_TRIGGER: 1 ->
18430 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20   new, 0 -> old. 
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18450 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e          ** EP_Un
18460 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37  likely:  1342177
18470 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68  28 times likelih
18480 6f 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20 20  ood.            
18490 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
184a0 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72  TK_SELECT: 1st r
184b0 65 67 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c  egister of resul
184c0 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e  t vector */.  yn
184d0 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  Var iColumn;    
184e0 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
184f0 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e  N: column index.
18500 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a    -1 for rowid..
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18520 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56           ** TK_V
18530 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c  ARIABLE: variabl
18540 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73  e number (always
18550 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20   >= 1)..        
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f   ** TK_SELECT_CO
18580 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20  LUMN: column of 
18590 74 68 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f  the result vecto
185a0 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b  r */.  i16 iAgg;
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
185c0 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20   Which entry in 
185d0 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d  pAggInfo->aCol[]
185e0 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f   or ->aFunc[] */
185f0 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69  .  i16 iRightJoi
18600 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20  nTable;   /* If 
18610 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65  EP_FromJoin, the
18620 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20   right table of 
18630 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38  the join */.  u8
18640 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20   op2;           
18650 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53       /* TK_REGIS
18660 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61  TER: original va
18670 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20  lue of Expr.op. 
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18690 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f          ** TK_CO
186a0 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20  LUMN: the value 
186b0 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c  of p5 for OP_Col
186c0 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
186d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
186e0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a  TK_AGG_FUNCTION:
186f0 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a   nesting depth *
18700 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
18710 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73  gInfo;     /* Us
18720 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c  ed by TK_AGG_COL
18730 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46  UMN and TK_AGG_F
18740 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62  UNCTION */.  Tab
18750 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
18760 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72      /* Table for
18770 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65   TK_COLUMN expre
18780 73 73 69 6f 6e 73 2e 20 20 43 61 6e 20 62 65 20  ssions.  Can be 
18790 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20  NULL.           
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
187b0 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66   for a column of
187c0 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20   an index on an 
187d0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b  expression */.};
187e0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
187f0 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
18800 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
18810 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
18820 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
18830 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20  ne EP_FromJoin  
18840 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67  0x000001 /* Orig
18850 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49  inates in ON/USI
18860 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74  NG clause of out
18870 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
18880 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
18890 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
188a0 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
188b0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
188c0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
188d0 45 50 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30  EP_HasFunc   0x0
188e0 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e  00004 /* Contain
188f0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75  s one or more fu
18900 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b  nctions of any k
18910 69 6e 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ind */.         
18920 20 20 20 20 20 20 20 20 20 2f 2a 20 30 78 30 30           /* 0x00
18930 30 30 30 38 20 2f 2f 20 61 76 61 69 6c 61 62 6c  0008 // availabl
18940 65 20 66 6f 72 20 75 73 65 20 2a 2f 0a 23 64 65  e for use */.#de
18950 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74  fine EP_Distinct
18960 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67    0x000010 /* Ag
18970 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
18980 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b   with DISTINCT k
18990 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
189a0 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30  e EP_VarSelect 0
189b0 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
189c0 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
189d0 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
189e0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
189f0 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20  Quoted 0x000040 
18a00 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
18a10 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
18a20 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
18a30 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30  _InfixFunc 0x000
18a40 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
18a50 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
18a60 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
18a70 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
18a80 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30  _Collate   0x000
18a90 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  100 /* Tree cont
18aa0 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54  ains a TK_COLLAT
18ab0 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  E operator */.#d
18ac0 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63  efine EP_Generic
18ad0 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49     0x000200 /* I
18ae0 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72  gnore COLLATE or
18af0 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69   affinity on thi
18b00 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  s tree */.#defin
18b10 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30  e EP_IntValue  0
18b20 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67  x000400 /* Integ
18b30 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  er value contain
18b40 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a  ed in u.iValue *
18b50 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73  /.#define EP_xIs
18b60 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20  Select 0x000800 
18b70 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20  /* x.pSelect is 
18b80 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65  valid (otherwise
18b90 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a   x.pList is) */.
18ba0 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20  #define EP_Skip 
18bb0 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a       0x001000 /*
18bc0 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72   COLLATE, AS, or
18bd0 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65   UNLIKELY */.#de
18be0 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20  fine EP_Reduced 
18bf0 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78    0x002000 /* Ex
18c00 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52  pr struct EXPR_R
18c10 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73  EDUCEDSIZE bytes
18c20 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
18c30 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78   EP_TokenOnly 0x
18c40 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73  004000 /* Expr s
18c50 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e  truct EXPR_TOKEN
18c60 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f  ONLYSIZE bytes o
18c70 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
18c80 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30 30  P_Static    0x00
18c90 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20  8000 /* Held in 
18ca0 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69  memory not obtai
18cb0 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ned from malloc(
18cc0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
18cd0 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30  MemToken  0x0100
18ce0 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71  00 /* Need to sq
18cf0 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78  lite3DbFree() Ex
18d00 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65  pr.zToken */.#de
18d10 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65  fine EP_NoReduce
18d20 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61    0x020000 /* Ca
18d30 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
18d40 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
18d50 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69  .#define EP_Unli
18d60 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f  kely  0x040000 /
18d70 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20  * unlikely() or 
18d80 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e  likelihood() fun
18d90 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
18da0 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78   EP_ConstFunc 0x
18db0 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49  080000 /* A SQLI
18dc0 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
18dd0 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e   or _SLOCHNG fun
18de0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
18df0 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78   EP_CanBeNull 0x
18e00 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65  100000 /* Can be
18e10 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f   null despite NO
18e20 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
18e30 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
18e40 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30  Subquery  0x2000
18e50 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
18e60 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20  ins a TK_SELECT 
18e70 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
18e80 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20  ine EP_Alias    
18e90 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20   0x400000 /* Is 
18ea0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72  an alias for a r
18eb0 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
18ec0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c   */.#define EP_L
18ed0 65 61 66 20 20 20 20 20 20 30 78 38 30 30 30 30  eaf      0x80000
18ee0 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c  0 /* Expr.pLeft,
18ef0 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65   .pRight, .u.pSe
18f00 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f  lect all NULL */
18f10 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 45 50 5f 50  ../*.** The EP_P
18f20 72 6f 70 61 67 61 74 65 20 6d 61 73 6b 20 69 73  ropagate mask is
18f30 20 61 20 73 65 74 20 6f 66 20 70 72 6f 70 65 72   a set of proper
18f40 74 69 65 73 20 74 68 61 74 20 61 75 74 6f 6d 61  ties that automa
18f50 74 69 63 61 6c 6c 79 20 70 72 6f 70 61 67 61 74  tically propagat
18f60 65 0a 2a 2a 20 75 70 77 61 72 64 73 20 69 6e 74  e.** upwards int
18f70 6f 20 70 61 72 65 6e 74 20 6e 6f 64 65 73 2e 0a  o parent nodes..
18f80 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72  */.#define EP_Pr
18f90 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c  opagate (EP_Coll
18fa0 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79 7c  ate|EP_Subquery|
18fb0 45 50 5f 48 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a  EP_HasFunc)../*.
18fc0 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
18fd0 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
18fe0 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
18ff0 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
19000 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  * Expr.flags fie
19010 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
19020 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45  xprHasProperty(E
19030 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66  ,P)     (((E)->f
19040 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
19050 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c  efine ExprHasAll
19060 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
19070 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
19080 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45  ==(P)).#define E
19090 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45  xprSetProperty(E
190a0 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61  ,P)     (E)->fla
190b0 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20  gs|=(P).#define 
190c0 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74  ExprClearPropert
190d0 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c  y(E,P)   (E)->fl
190e0 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68  ags&=~(P)../* Th
190f0 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
19100 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20  erty() macro is 
19110 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63  used for Verific
19120 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
19130 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64  n,.** and Accred
19140 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49  itation only.  I
19150 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70  t works like Exp
19160 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64  rSetProperty() d
19170 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f  uring VVA.** pro
19180 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20  cesses but is a 
19190 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65  no-op for delive
191a0 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
191b0 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66  LITE_DEBUG.# def
191c0 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
191d0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29  operty(E,P)  (E)
191e0 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c  ->flags|=(P).#el
191f0 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  se.# define Expr
19200 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
19210 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,P).#endif../*.*
19220 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
19230 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72  rmine the number
19240 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72   of bytes requir
19250 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45  ed by a normal E
19260 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61  xpr.** struct, a
19270 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
19280 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  th the EP_Reduce
19290 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78  d flag set in Ex
192a0 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20  pr.flags.** and 
192b0 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
192c0 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e  ith the EP_Token
192d0 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a  Only flag set..*
192e0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46  /.#define EXPR_F
192f0 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20  ULLSIZE         
19300 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20    sizeof(Expr)  
19310 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c           /* Full
19320 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65   size */.#define
19330 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
19340 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f  E        offseto
19350 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20  f(Expr,iTable)  
19360 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72  /* Common featur
19370 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  es */.#define EX
19380 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
19390 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
193a0 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20  xpr,pLeft)   /* 
193b0 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a  Fewer features *
193c0 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70  /../*.** Flags p
193d0 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c  assed to the sql
193e0 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75  ite3ExprDup() fu
193f0 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20  nction. See the 
19400 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a  header comment.*
19410 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45  * above sqlite3E
19420 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74  xprDup() for det
19430 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
19440 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
19450 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
19460 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d  /* Used reduced-
19470 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20  size Expr nodes 
19480 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74  */../*.** A list
19490 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e   of expressions.
194a0 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f    Each expressio
194b0 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79  n may optionally
194c0 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e   have a.** name.
194d0 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63    An expr/name c
194e0 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62  ombination can b
194f0 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61  e used in severa
19500 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20  l ways, such.** 
19510 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22  as the list of "
19520 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c  expr AS ID" fiel
19530 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22  ds following a "
19540 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68  SELECT" or in th
19550 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44  e.** list of "ID
19560 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69   = expr" items i
19570 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20  n an UPDATE.  A 
19580 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
19590 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20  ons can.** also 
195a0 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
195b0 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e  rgument to a fun
195c0 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20  ction, in which 
195d0 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65  case the a.zName
195e0 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74  .** field is not
195f0 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20   used..**.** By 
19600 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72  default the Expr
19610 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c  .zSpan field hol
19620 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61  ds a human-reada
19630 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  ble description 
19640 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  of.** the expres
19650 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65  sion that is use
19660 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
19670 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73  ion of error mes
19680 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c  sages and.** col
19690 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20  umn labels.  In 
196a0 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e  this case, Expr.
196b0 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c  zSpan is typical
196c0 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  ly the text of a
196d0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65  .** column expre
196e0 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73  ssion as it exis
196f0 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73  ts in a SELECT s
19700 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76  tatement.  Howev
19710 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53  er, if.** the bS
19720 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73  panIsTab flag is
19730 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e   set, then zSpan
19740 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74   is overloaded t
19750 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a  o mean the name.
19760 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ** of the result
19770 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66   column in the f
19780 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41  orm: DATABASE.TA
19790 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69  BLE.COLUMN.  Thi
197a0 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20  s later.** form 
197b0 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65  is used for name
197c0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68   resolution with
197d0 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61   nested FROM cla
197e0 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  uses..*/.struct 
197f0 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74  ExprList {.  int
19800 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20   nExpr;         
19810 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
19820 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20   expressions on 
19830 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74  the list */.  st
19840 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74  ruct ExprList_it
19850 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68  em { /* For each
19860 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
19870 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45  he list */.    E
19880 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
19890 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
198a0 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68 69  rse tree for thi
198b0 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
198c0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
198d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
198e0 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
198f0 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
19900 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
19910 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
19920 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
19930 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
19940 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
19950 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
19960 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
19970 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
19980 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
19990 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
199a0 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
199b0 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
199c0 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
199d0 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
199e0 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
199f0 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
19a00 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
19a10 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
19a20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
19a30 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
19a40 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
19a50 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  e */.    union {
19a60 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
19a70 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
19a80 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
19a90 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
19aa0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
19ab0 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
19ac0 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
19ad0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
19ae0 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
19af0 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
19b00 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
19b10 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
19b20 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
19b30 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
19b40 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
19b50 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
19b60 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  } u;.  } a[1];  
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b80 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20  /* One slot for 
19b90 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
19ba0 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  in the list */.}
19bb0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
19bc0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
19bd0 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62  ucture is used b
19be0 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  y the parser to 
19bf0 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74  record both.** t
19c00 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
19c10 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
19c20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20  and the span of 
19c30 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61  input text for a
19c40 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e  n.** expression.
19c50 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53  .*/.struct ExprS
19c60 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45  pan {.  Expr *pE
19c70 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  xpr;          /*
19c80 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   The expression 
19c90 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20  parse tree */.  
19ca0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61  const char *zSta
19cb0 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63  rt;   /* First c
19cc0 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75  haracter of inpu
19cd0 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73  t text */.  cons
19ce0 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20  t char *zEnd;   
19cf0 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74    /* One charact
19d00 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  er past the end 
19d10 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
19d20 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
19d30 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
19d40 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c  tructure can hol
19d50 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20  d a simple list 
19d60 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a  of identifiers,.
19d70 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c  ** such as the l
19d80 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74  ist "a,b,c" in t
19d90 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
19da0 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20  tements:.**.**  
19db0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
19dc0 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20  t(a,b,c) VALUES 
19dd0 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ...;.**      CRE
19de0 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e  ATE INDEX idx ON
19df0 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20   t(a,b,c);.**   
19e00 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
19e10 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50  R trig BEFORE UP
19e20 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29  DATE ON t(a,b,c)
19e30 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20   ...;.**.** The 
19e40 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65  IdList.a.idx fie
19e50 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  ld is used when 
19e60 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65  the IdList repre
19e70 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f  sents the list o
19e80 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  f.** column name
19e90 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20  s after a table 
19ea0 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52  name in an INSER
19eb0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  T statement.  In
19ec0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a   the statement.*
19ed0 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20  *.**     INSERT 
19ee0 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e  INTO t(a,b,c) ..
19ef0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69  ..**.** If "a" i
19f00 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d  s the k-th colum
19f10 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20  n of table "t", 
19f20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d  then IdList.a[0]
19f30 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75  .idx==k..*/.stru
19f40 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74  ct IdList {.  st
19f50 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d  ruct IdList_item
19f60 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61   {.    char *zNa
19f70 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
19f80 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69   of the identifi
19f90 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64  er */.    int id
19fa0 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
19fb0 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62  ndex in some Tab
19fc0 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63  le.aCol[] of a c
19fd0 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d  olumn named zNam
19fe0 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69  e */.  } *a;.  i
19ff0 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20  nt nId;         
1a000 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65  /* Number of ide
1a010 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20  ntifiers on the 
1a020 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
1a030 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61  * The bitmask da
1a040 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  tatype defined b
1a050 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72  elow is used for
1a060 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
1a070 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68  ations..**.** Ch
1a080 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d  anging this from
1a090 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33   a 64-bit to a 3
1a0a0 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74  2-bit type limit
1a0b0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  s the number of.
1a0c0 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a  ** tables in a j
1a0d0 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61  oin to 32 instea
1a0e0 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74  d of 64.  But it
1a0f0 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68   also reduces th
1a100 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65  e size.** of the
1a110 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20   library by 738 
1a120 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a  bytes on ix86..*
1a130 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1a140 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74  BITMASK_TYPE.  t
1a150 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ypedef SQLITE_BI
1a160 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61  TMASK_TYPE Bitma
1a170 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  sk;.#else.  type
1a180 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b  def u64 Bitmask;
1a190 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1a1a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
1a1b0 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
1a1c0 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
1a1d0 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
1a1e0 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
1a1f0 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
1a200 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
1a210 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
1a220 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
1a230 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
1a240 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64  mask)1)<<(n)).#d
1a250 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28  efine MASKBIT32(
1a260 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69  n) (((unsigned i
1a270 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66  nt)1)<<(n)).#def
1a280 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20  ine ALLBITS     
1a290 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a   ((Bitmask)-1)..
1a2a0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
1a2b0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65  ing structure de
1a2c0 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d  scribes the FROM
1a2d0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
1a2e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
1a2f0 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20  * Each table or 
1a300 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
1a310 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61  FROM clause is a
1a320 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e   separate elemen
1a330 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c  t of.** the SrcL
1a340 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a  ist.a[] array..*
1a350 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64  *.** With the ad
1a360 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70  dition of multip
1a370 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70  le database supp
1a380 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ort, the followi
1a390 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
1a3a0 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64  can also be used
1a3b0 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70   to describe a p
1a3c0 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20  articular table 
1a3d0 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c  such as the tabl
1a3e0 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64  e that.** is mod
1a3f0 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45  ified by an INSE
1a400 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  RT, DELETE, or U
1a410 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
1a420 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51    In standard SQ
1a430 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62  L,.** such a tab
1a440 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d  le must be a sim
1a450 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42  ple name: ID.  B
1a460 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68  ut in SQLite, th
1a470 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e  e table can.** n
1a480 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64  ow be identified
1a490 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e   by a database n
1a4a0 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e  ame, a dot, then
1a4b0 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a   the table name:
1a4c0 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68   ID.ID..**.** Th
1a4d0 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74  e jointype start
1a4e0 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68  s out showing th
1a4f0 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77  e join type betw
1a500 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  een the current 
1a510 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65  table.** and the
1a520 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74   next table on t
1a530 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61  he list.  The pa
1a540 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20  rser builds the 
1a550 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a  list this way..*
1a560 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63  * But sqlite3Src
1a570 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
1a580 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73  e() later shifts
1a590 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73   the jointypes s
1a5a0 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a  o that each.** j
1a5b0 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65  ointype expresse
1a5c0 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65  s the join betwe
1a5d0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64  en the table and
1a5e0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61   the previous ta
1a5f0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  ble..**.** In th
1a600 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c  e colUsed field,
1a610 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
1a620 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20  bit (bit 63) is 
1a630 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65  set if the table
1a640 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72  .** contains mor
1a650 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e  e than 63 column
1a660 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20  s and the 64-th 
1a670 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20  or later column 
1a680 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75  is used..*/.stru
1a690 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69  ct SrcList {.  i
1a6a0 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20  nt nSrc;        
1a6b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
1a6c0 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65  les or subquerie
1a6d0 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  s in the FROM cl
1a6e0 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41  ause */.  u32 nA
1a6f0 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75  lloc;      /* Nu
1a700 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
1a710 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d  allocated in a[]
1a720 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75   below */.  stru
1a730 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
1a740 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53  {.    Schema *pS
1a750 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d  chema;  /* Schem
1a760 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  a to which this 
1a770 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f  item is fixed */
1a780 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61  .    char *zData
1a790 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  base;  /* Name o
1a7a0 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
1a7b0 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
1a7c0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
1a7d0 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
1a7e0 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  f the table */. 
1a7f0 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b     char *zAlias;
1a800 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20       /* The "B" 
1a810 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20  part of a "A AS 
1a820 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d  B" phrase.  zNam
1a830 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a  e is the "A" */.
1a840 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
1a850 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20        /* An SQL 
1a860 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  table correspond
1a870 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a  ing to zName */.
1a880 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
1a890 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43  ect;  /* A SELEC
1a8a0 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64  T statement used
1a8b0 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74   in place of a t
1a8c0 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20  able name */.   
1a8d0 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62   int addrFillSub
1a8e0 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66  ;  /* Address of
1a8f0 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d   subroutine to m
1a900 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65  anifest a subque
1a910 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ry */.    int re
1a920 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52  gReturn;    /* R
1a930 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1a940 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f  return address o
1a950 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f  f addrFillSub */
1a960 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
1a970 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  lt;    /* Regist
1a980 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75  ers holding resu
1a990 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74  lts of a co-rout
1a9a0 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ine */.    struc
1a9b0 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69  t {.      u8 joi
1a9c0 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54  ntype;      /* T
1a9d0 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77  ype of join betw
1a9e0 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20 61  een this table a
1a9f0 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
1aa00 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1aa10 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b  d notIndexed :1;
1aa20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
1aa30 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e  here is a NOT IN
1aa40 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a  DEXED clause */.
1aa50 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1aa60 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20  sIndexedBy :1;  
1aa70 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
1aa80 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20  e is an INDEXED 
1aa90 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  BY clause */.   
1aaa0 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61     unsigned isTa
1aab0 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a  bFunc :1;     /*
1aac0 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76   True if table-v
1aad0 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73  alued-function s
1aae0 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75  yntax */.      u
1aaf0 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c  nsigned isCorrel
1ab00 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75  ated :1;  /* Tru
1ab10 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69  e if sub-query i
1ab20 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a  s correlated */.
1ab30 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76        unsigned v
1ab40 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20  iaCoroutine :1; 
1ab50 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20   /* Implemented 
1ab60 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  as a co-routine 
1ab70 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1ab80 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a 31  d isRecursive :1
1ab90 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  ;   /* True for 
1aba0 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72 65  recursive refere
1abb0 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20  nce in WITH */. 
1abc0 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66     } fg;.#ifndef
1abd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
1abe0 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
1abf0 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
1ac00 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
1ac10 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
1ac20 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
1ac30 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
1ac40 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
1ac50 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
1ac60 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
1ac70 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
1ac80 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
1ac90 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
1aca0 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
1acb0 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
1acc0 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
1acd0 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
1ace0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
1acf0 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
1ad00 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
1ad10 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
1ad20 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
1ad30 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  used */.    unio
1ad40 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  n {.      char *
1ad50 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f  zIndexedBy;    /
1ad60 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
1ad70 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
1ad80 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
1ad90 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74  /.      ExprList
1ada0 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20   *pFuncArg;  /* 
1adb0 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62  Arguments to tab
1adc0 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
1add0 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a  on */.    } u1;.
1ade0 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e      Index *pIBIn
1adf0 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73  dex;  /* Index s
1ae00 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
1ae10 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e  onding to u1.zIn
1ae20 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61  dexedBy */.  } a
1ae30 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
1ae40 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
1ae50 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
1ae60 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
1ae70 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
1ae80 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
1ae90 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
1aea0 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
1aeb0 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
1aec0 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
1aed0 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
1aee0 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
1aef0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
1af00 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
1af10 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
1af20 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
1af30 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
1af40 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
1af50 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
1af60 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
1af70 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
1af80 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
1af90 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
1afa0 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
1afb0 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
1afc0 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
1afd0 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
1afe0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1aff0 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
1b000 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
1b010 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
1b020 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
1b030 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
1b040 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
1b050 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
1b060 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
1b070 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
1b080 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
1b090 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
1b0a0 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
1b0b0 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
1b0c0 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
1b0d0 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
1b0e0 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ber..**.** Value
1b0f0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
1b100 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
1b110 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45  t()):.**     WHE
1b120 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d  RE_USE_LIMIT  ==
1b130 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a   SF_FixedLimit.*
1b140 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b150 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20  ORDERBY_NORMAL  
1b160 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70   0x0000 /* No-op
1b170 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b180 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20  E_ORDERBY_MIN   
1b190 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44     0x0001 /* ORD
1b1a0 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
1b1b0 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20   for min() func 
1b1c0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b1d0 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20  _ORDERBY_MAX    
1b1e0 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45    0x0002 /* ORDE
1b1f0 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
1b200 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a  for max() func *
1b210 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b220 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20  ONEPASS_DESIRED 
1b230 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20   0x0004 /* Want 
1b240 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55  to do one-pass U
1b250 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a  PDATE/DELETE */.
1b260 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
1b270 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30  EPASS_MULTIROW 0
1b280 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53  x0008 /* ONEPASS
1b290 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74   is ok with mult
1b2a0 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1b2b0 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49  fine WHERE_DUPLI
1b2c0 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30  CATES_OK    0x00
1b2d0 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75  10 /* Ok to retu
1b2e0 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68  rn a row more th
1b2f0 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69  an once */.#defi
1b300 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43  ne WHERE_OR_SUBC
1b310 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32 30  LAUSE     0x0020
1b320 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61   /* Processing a
1b330 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70 61   sub-WHERE as pa
1b340 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20  rt of.          
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
1b370 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69  he OR optimizati
1b380 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  on  */.#define W
1b390 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20  HERE_GROUPBY    
1b3a0 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20        0x0040 /* 
1b3b0 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c  pOrderBy is real
1b3c0 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  ly a GROUP BY */
1b3d0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1b3e0 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20  ISTINCTBY       
1b3f0 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72  0x0080 /* pOrder
1b400 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44  by is really a D
1b410 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a  ISTINCT clause *
1b420 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b430 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20  WANT_DISTINCT   
1b440 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f   0x0100 /* All o
1b450 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62  utput needs to b
1b460 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64  e distinct */.#d
1b470 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54  efine WHERE_SORT
1b480 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30  BYGROUP      0x0
1b490 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73  200 /* Support s
1b4a0 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
1b4b0 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ted() */.#define
1b4c0 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c   WHERE_SEEK_TABL
1b4d0 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20 2f  E       0x0400 /
1b4e0 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73  * Do not defer s
1b4f0 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62  eeks on main tab
1b500 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  le */.#define WH
1b510 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49  ERE_ORDERBY_LIMI
1b520 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f  T    0x0800 /* O
1b530 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20  RDERBY+LIMIT on 
1b540 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a  the inner loop *
1b550 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b560 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20  SEEK_UNIQ_TABLE 
1b570 20 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f   0x1000 /* Do no
1b580 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 69 66  t defer seeks if
1b590 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20   unique */.     
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5b0 20 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30     /*     0x2000
1b5c0 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c      not currentl
1b5d0 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  y used */.#defin
1b5e0 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49  e WHERE_USE_LIMI
1b5f0 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30 20  T        0x4000 
1b600 2f 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54  /* Use the LIMIT
1b610 20 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74   in cost estimat
1b620 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  es */.          
1b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b640 20 20 20 20 20 30 78 38 30 30 30 20 20 20 20 6e       0x8000    n
1b650 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1b660 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  d */../* Allowed
1b670 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
1b680 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
1b690 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
1b6a0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1b6b0 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
1b6c0 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
1b6d0 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
1b6e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b6f0 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
1b700 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
1b710 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
1b720 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1b730 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
1b740 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
1b750 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
1b760 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b770 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
1b780 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
1b790 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
1b7a0 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
1b7b0 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
1b7c0 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
1b7d0 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
1b7e0 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
1b7f0 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
1b800 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
1b810 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
1b820 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
1b830 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
1b840 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
1b850 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
1b860 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
1b870 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
1b880 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
1b890 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
1b8a0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
1b8b0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
1b8c0 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
1b8d0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
1b8e0 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
1b8f0 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
1b900 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
1b910 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
1b920 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
1b930 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
1b940 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
1b950 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
1b960 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
1b970 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
1b980 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
1b990 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
1b9a0 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a  the inner-most.*
1b9b0 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
1b9c0 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
1b9d0 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
1b9e0 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
1b9f0 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
1ba00 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
1ba10 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
1ba20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
1ba30 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
1ba40 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
1ba50 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
1ba60 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
1ba70 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
1ba80 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
1ba90 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
1baa0 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
1bab0 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
1bac0 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
1bad0 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
1bae0 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
1baf0 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
1bb00 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
1bb10 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
1bb20 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
1bb30 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
1bb40 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
1bb50 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
1bb60 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
1bb70 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
1bb80 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
1bb90 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
1bba0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
1bbb0 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
1bbc0 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
1bbd0 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
1bbe0 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
1bbf0 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
1bc00 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
1bc10 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1bc20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
1bc30 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
1bc40 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
1bc50 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
1bc60 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
1bc70 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78  ve names */.  Ex
1bc80 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1bc90 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
1bca0 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
1bcb0 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41  t columns */.  A
1bcc0 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
1bcd0 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
1bce0 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
1bcf0 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
1bd00 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
1bd10 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
1bd20 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
1bd30 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
1bd40 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
1bd50 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
1bd60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bd70 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
1bd80 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
1bd90 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
1bda0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1bdb0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
1bdc0 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
1bdd0 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
1bde0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
1bdf0 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
1be00 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
1be10 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
1be20 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
1be30 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
1be40 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
1be50 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
1be60 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  eld..**.** Value
1be70 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c   constraints (al
1be80 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73  l checked via as
1be90 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e  sert()):.**    N
1bea0 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53  C_HasAgg    == S
1beb0 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e  F_HasAgg.**    N
1bec0 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53  C_MinMaxAgg == S
1bed0 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53  F_MinMaxAgg == S
1bee0 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
1bef0 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  X.**.*/.#define 
1bf00 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30  NC_AllowAgg  0x0
1bf10 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74  001  /* Aggregat
1bf20 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
1bf30 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
1bf40 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49  #define NC_PartI
1bf50 64 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  dx   0x0002  /* 
1bf60 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1bf70 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  g a partial inde
1bf80 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69  x WHERE */.#defi
1bf90 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
1bfa0 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20  0x0004  /* True 
1bfb0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
1bfc0 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
1bfd0 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
1bfe0 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63  ine NC_InAggFunc
1bff0 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65   0x0008  /* True
1c000 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72   if analyzing ar
1c010 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67  guments to an ag
1c020 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  g func */.#defin
1c030 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30  e NC_HasAgg    0
1c040 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72  x0010  /* One or
1c050 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
1c060 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a  functions seen *
1c070 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78  /.#define NC_Idx
1c080 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20 2f  Expr   0x0020  /
1c090 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1c0a0 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43  ing columns of C
1c0b0 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23  REATE INDEX */.#
1c0c0 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c  define NC_VarSel
1c0d0 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41  ect 0x0040  /* A
1c0e0 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71   correlated subq
1c0f0 75 65 72 79 20 68 61 73 20 62 65 65 6e 20 73 65  uery has been se
1c100 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  en */.#define NC
1c110 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30  _MinMaxAgg 0x100
1c120 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67  0  /* min/max ag
1c130 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20  gregates seen.  
1c140 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a  See note above *
1c150 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d  /.#define NC_Com
1c160 70 6c 65 78 20 20 20 30 78 32 30 30 30 20 20 2f  plex   0x2000  /
1c170 2a 20 54 72 75 65 20 69 66 20 61 20 66 75 6e 63  * True if a func
1c180 74 69 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79  tion or subquery
1c190 20 73 65 65 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   seen */../*.** 
1c1a0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1c1b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1c1c0 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
1c1d0 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
1c1e0 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
1c1f0 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
1c200 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
1c210 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
1c220 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f  nLimit is set to
1c230 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20   -1 if there is 
1c240 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e  no LIMIT clause.
1c250 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74    nOffset is set
1c260 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65   to 0..** If the
1c270 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c  re is a LIMIT cl
1c280 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72  ause, the parser
1c290 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20   sets nLimit to 
1c2a0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1c2b0 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f  .** limit and nO
1c2c0 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  ffset to the val
1c2d0 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74  ue of the offset
1c2e0 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20   (or 0 if there 
1c2f0 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74  is not.** offset
1c300 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e  ).  But later on
1c310 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  , nLimit and nOf
1c320 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20  fset become the 
1c330 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73  memory locations
1c340 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20  .** in the VDBE 
1c350 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20  that record the 
1c360 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74  limit and offset
1c370 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a   counters..**.**
1c380 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20   addrOpenEphm[] 
1c390 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
1c3a0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f  the address of O
1c3b0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1c3c0 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73  opcodes..** Thes
1c3d0 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74  e addresses must
1c3e0 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68   be stored so th
1c3f0 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63  at we can go bac
1c400 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a  k and fill in.**
1c410 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20   the P4_KEYINFO 
1c420 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72  and P2 parameter
1c430 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65  s later.  Neithe
1c440 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f  r the KeyInfo no
1c450 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  r.** the number 
1c460 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32  of columns in P2
1c470 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64   can be computed
1c480 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
1c490 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f  e.** as the OP_O
1c4a0 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74  penEphm instruct
1c4b0 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63  ion is coded bec
1c4c0 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75  ause not.** enou
1c4d0 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  gh information a
1c4e0 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  bout the compoun
1c4f0 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e  d query is known
1c500 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a   at that point..
1c510 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  ** The KeyInfo f
1c520 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
1c530 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61  0] and [1] conta
1c540 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ins collating se
1c550 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74  quences.** for t
1c560 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
1c570 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
1c580 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20  addrOpenEphm[2] 
1c590 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
1c5a0 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20  ng.** sequences 
1c5b0 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  for the ORDER BY
1c5c0 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
1c5d0 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78  ct Select {.  Ex
1c5e0 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1c5f0 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c       /* The fiel
1c600 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ds of the result
1c610 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
1c620 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c630 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e  One of: TK_UNION
1c640 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52   TK_ALL TK_INTER
1c650 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a  SECT TK_EXCEPT *
1c660 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65  /.  LogEst nSele
1c670 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  ctRow;     /* Es
1c680 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
1c690 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
1c6a0 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b  .  u32 selFlags;
1c6b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
1c6c0 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73  ious SF_* values
1c6d0 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74   */.  int iLimit
1c6e0 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20  , iOffset;   /* 
1c6f0 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  Memory registers
1c700 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26   holding LIMIT &
1c710 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73   OFFSET counters
1c720 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52   */.#if SELECTTR
1c730 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68  ACE_ENABLED.  ch
1c740 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b  ar zSelName[12];
1c750 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63       /* Symbolic
1c760 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45   name of this SE
1c770 4c 45 43 54 20 75 73 65 20 66 6f 72 20 64 65 62  LECT use for deb
1c780 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66  ugging */.#endif
1c790 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45  .  int addrOpenE
1c7a0 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f  phm[2];   /* OP_
1c7b0 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65  OpenEphem opcode
1c7c0 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69  s related to thi
1c7d0 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72  s select */.  Sr
1c7e0 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20  cList *pSrc;    
1c7f0 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d       /* The FROM
1c800 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1c810 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
1c820 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1c830 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1c840 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
1c850 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50      /* The GROUP
1c860 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1c870 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20  Expr *pHaving;  
1c880 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41         /* The HA
1c890 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20  VING clause */. 
1c8a0 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
1c8b0 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f  rBy;    /* The O
1c8c0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a  RDER BY clause *
1c8d0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69  /.  Select *pPri
1c8e0 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72  or;        /* Pr
1c8f0 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20  ior select in a 
1c900 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20  compound select 
1c910 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53  statement */.  S
1c920 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20  elect *pNext;   
1c930 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65        /* Next se
1c940 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74  lect to the left
1c950 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a   in a compound *
1c960 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74  /.  Expr *pLimit
1c970 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49  ;          /* LI
1c980 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  MIT expression. 
1c990 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
1c9a0 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a  sed. */.  With *
1c9b0 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
1c9c0 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20   /* WITH clause 
1c9d0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73  attached to this
1c9e0 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c   select. Or NULL
1c9f0 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  . */.};../*.** A
1ca00 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
1ca10 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
1ca20 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
1ca30 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
1ca40 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
1ca50 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
1ca60 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68  straints (all ch
1ca70 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74  ecked via assert
1ca80 28 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61  ()).**     SF_Ha
1ca90 73 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48  sAgg     == NC_H
1caa0 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f  asAgg.**     SF_
1cab0 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43  MinMaxAgg  == NC
1cac0 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 3d  _MinMaxAgg     =
1cad0 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  = SQLITE_FUNC_MI
1cae0 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46  NMAX.**     SF_F
1caf0 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45  ixedLimit == WHE
1cb00 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a  RE_USE_LIMIT.*/.
1cb10 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69  #define SF_Disti
1cb20 6e 63 74 20 20 20 20 20 20 20 30 78 30 30 30 30  nct       0x0000
1cb30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f  1  /* Output sho
1cb40 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20  uld be DISTINCT 
1cb50 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c  */.#define SF_Al
1cb60 6c 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30  l            0x0
1cb70 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65  0002  /* Include
1cb80 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72  s the ALL keywor
1cb90 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
1cba0 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30  Resolved       0
1cbb0 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74  x00004  /* Ident
1cbc0 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
1cbd0 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
1cbe0 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
1cbf0 65 20 20 20 20 20 20 30 78 30 30 30 30 38 20 20  e      0x00008  
1cc00 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 20  /* Contains agg 
1cc10 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47  functions or a G
1cc20 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
1cc30 6e 65 20 53 46 5f 48 61 73 41 67 67 20 20 20 20  ne SF_HasAgg    
1cc40 20 20 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a       0x00010  /*
1cc50 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   Contains aggreg
1cc60 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
1cc70 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73  .#define SF_Uses
1cc80 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30  Ephemeral  0x000
1cc90 32 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20  20  /* Uses the 
1cca0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
1ccb0 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  code */.#define 
1ccc0 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20  SF_Expanded     
1ccd0 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73 71    0x00040  /* sq
1cce0 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e  lite3SelectExpan
1ccf0 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  d() called on th
1cd00 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  is */.#define SF
1cd10 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20  _HasTypeInfo    
1cd20 30 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d  0x00080  /* FROM
1cd30 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65   subqueries have
1cd40 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20   Table metadata 
1cd50 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f  */.#define SF_Co
1cd60 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30  mpound       0x0
1cd70 30 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0100  /* Part of
1cd80 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72   a compound quer
1cd90 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  y */.#define SF_
1cda0 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 30  Values         0
1cdb0 78 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74 68  x00200  /* Synth
1cdc0 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55  esized from VALU
1cdd0 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  ES clause */.#de
1cde0 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c  fine SF_MultiVal
1cdf0 75 65 20 20 20 20 20 30 78 30 30 34 30 30 20 20  ue     0x00400  
1ce00 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53  /* Single VALUES
1ce10 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69   term with multi
1ce20 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
1ce30 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f  ine SF_NestedFro
1ce40 6d 20 20 20 20 20 30 78 30 30 38 30 30 20 20 2f  m     0x00800  /
1ce50 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65  * Part of a pare
1ce60 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63  nthesized FROM c
1ce70 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1ce80 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   SF_MinMaxAgg   
1ce90 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41     0x01000  /* A
1cea0 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e  ggregate contain
1ceb0 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78  ing min() or max
1cec0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1ced0 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20  _Recursive      
1cee0 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20  0x02000  /* The 
1cef0 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f  recursive part o
1cf00 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54  f a recursive CT
1cf10 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  E */.#define SF_
1cf20 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30  FixedLimit     0
1cf30 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65  x04000  /* nSele
1cf40 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20 63  ctRow set by a c
1cf50 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f  onstant LIMIT */
1cf60 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62  .#define SF_Mayb
1cf70 65 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38 30  eConvert   0x080
1cf80 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76  00  /* Need conv
1cf90 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
1cfa0 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
1cfb0 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76  .#define SF_Conv
1cfc0 65 72 74 65 64 20 20 20 20 20 20 30 78 31 30 30  erted      0x100
1cfd0 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72  00  /* By conver
1cfe0 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1cff0 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
1d000 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64  define SF_Includ
1d010 65 48 69 64 64 65 6e 20 20 30 78 32 30 30 30 30  eHidden  0x20000
1d020 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64    /* Include hid
1d030 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f  den columns in o
1d040 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65  utput */.#define
1d050 20 53 46 5f 43 6f 6d 70 6c 65 78 52 65 73 75 6c   SF_ComplexResul
1d060 74 20 20 30 78 34 30 30 30 30 20 20 2f 2a 20 52  t  0x40000  /* R
1d070 65 73 75 6c 74 20 73 65 74 20 63 6f 6e 74 61 69  esult set contai
1d080 6e 73 20 73 75 62 71 75 65 72 79 20 6f 72 20 66  ns subquery or f
1d090 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 0a 2f 2a 0a  unction */.../*.
1d0a0 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f  ** The results o
1d0b0 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62  f a SELECT can b
1d0c0 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e  e distributed in
1d0d0 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61   several ways, a
1d0e0 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20  s defined.** by 
1d0f0 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
1d100 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68  wing macros.  Th
1d110 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d  e "SRT" prefix m
1d120 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73  eans "SELECT Res
1d130 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a  ult.** Type"..**
1d140 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f  .**     SRT_Unio
1d150 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  n       Store re
1d160 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69  sults as a key i
1d170 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  n a temporary in
1d180 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  dex.**          
1d190 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74             ident
1d1a0 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e  ified by pDest->
1d1b0 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
1d1c0 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20     SRT_Except   
1d1d0 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74     Remove result
1d1e0 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f  s from the tempo
1d1f0 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74  rary index pDest
1d200 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
1d210 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20       SRT_Exists 
1d220 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69       Store a 1 i
1d230 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44  n memory cell pD
1d240 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20  est->iSDParm if 
1d250 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20  the result.**   
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d270 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70    set is not emp
1d280 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ty..**.**     SR
1d290 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68  T_Discard     Th
1d2a0 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20  row the results 
1d2b0 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75  away.  This is u
1d2c0 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a  sed by SELECT.**
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2e0 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20       statements 
1d2f0 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
1d300 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f  whose only purpo
1d310 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20  se is.**        
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1d330 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66   side-effects of
1d340 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
1d350 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  * All of the abo
1d360 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69  ve are free to i
1d370 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45  gnore their ORDE
1d380 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f  R BY clause. Tho
1d390 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f  se that.** follo
1d3a0 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65  w must honor the
1d3b0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1d3c0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1d3d0 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65  Output      Gene
1d3e0 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75  rate a row of ou
1d3f0 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20  tput (using the 
1d400 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20  OP_ResultRow.** 
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d420 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20      opcode) for 
1d430 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
1d440 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a  result set..**.*
1d450 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20  *     SRT_Mem   
1d460 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64        Only valid
1d470 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
1d480 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  s a single colum
1d490 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  n..**           
1d4a0 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20            Store 
1d4b0 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  the first column
1d4c0 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65   of the first re
1d4d0 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20  sult row.**     
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4f0 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
1d500 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20  t->iSDParm then 
1d510 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74  abandon the rest
1d520 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d530 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71          of the q
1d540 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74  uery.  This dest
1d550 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20  ination implies 
1d560 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a  "LIMIT 1"..**.**
1d570 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20       SRT_Set    
1d580 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20       The result 
1d590 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65  must be a single
1d5a0 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20   column.  Store 
1d5b0 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20  each.**         
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20              row 
1d5d0 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65  of result as the
1d5e0 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44   key in table pD
1d5f0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d610 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61       Apply the a
1d620 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61  ffinity pDest->a
1d630 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74  ffSdst before st
1d640 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20  oring.**        
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
1d660 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69  ults.  Used to i
1d670 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45  mplement "IN (SE
1d680 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a  LECT ...)"..**.*
1d690 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54  *     SRT_EphemT
1d6a0 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20  ab    Create an 
1d6b0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1d6c0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61  pDest->iSDParm a
1d6d0 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20  nd store.**     
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6f0 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65  the result there
1d700 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20  . The cursor is 
1d710 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a  left open after.
1d720 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d730 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67         returning
1d740 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20  .  This is like 
1d750 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74  SRT_Table except
1d760 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20   that.**        
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1d780 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73  s destination us
1d790 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  es OP_OpenEpheme
1d7a0 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a  ral to create.**
1d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7c0 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66       the table f
1d7d0 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  irst..**.**     
1d7e0 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
1d7f0 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f  Generate a co-ro
1d800 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72  utine that retur
1d810 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a  ns a new row of.
1d820 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d830 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65         results e
1d840 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69  ach time it is i
1d850 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74  nvoked.  The ent
1d860 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20  ry point.**     
1d870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d880 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e  of the co-routin
1d890 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  e is stored in r
1d8a0 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
1d8b0 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20  SDParm.**       
1d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
1d8d0 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77  d the result row
1d8e0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44   is stored in pD
1d8f0 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73  est->nDest regis
1d900 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ters.**         
1d910 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72              star
1d920 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d  ting with pDest-
1d930 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  >iSdst..**.**   
1d940 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20    SRT_Table     
1d950 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1d960 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  in temporary tab
1d970 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1d980 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69  m..**     SRT_Fi
1d990 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69  fo        This i
1d9a0 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d  s like SRT_Ephem
1d9b0 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20  Tab except that 
1d9c0 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20  the table.**    
1d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9e0 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61   is assumed to a
1d9f0 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20  lready be open. 
1da00 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a   SRT_Fifo has.**
1da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da20 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f       the additio
1da30 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20  nal property of 
1da40 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67  being able to ig
1da50 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  nore.**         
1da60 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1da70 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1da80 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
1da90 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65  istFifo    Store
1daa0 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65   results in a te
1dab0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1dac0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dae0 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73       But also us
1daf0 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
1db00 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1db10 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  +1 as.**        
1db20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72               a r
1db30 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69  ecord of all pri
1db40 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69  or results and i
1db50 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63  gnore any duplic
1db60 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ate.**          
1db70 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e             rows.
1db80 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22    Name means:  "
1db90 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a  Distinct Fifo"..
1dba0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75  **.**     SRT_Qu
1dbb0 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  eue       Store 
1dbc0 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
1dbd0 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
1dbe0 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79  >iSDParm (really
1dbf0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1dc00 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78          an index
1dc10 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71  ).  Append a seq
1dc20 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20  uence number so 
1dc30 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73  that all entries
1dc40 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1dc50 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74          are dist
1dc60 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  inct..**.**     
1dc70 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20  SRT_DistQueue   
1dc80 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1dc90 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
1dca0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f  pDest->iSDParm o
1dcb0 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20  nly if.**       
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1dcd0 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61  e same record ha
1dce0 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f  s never been sto
1dcf0 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65  red before.  The
1dd00 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1dd10 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74          index at
1dd20 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
1dd30 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72  1 hold all prior
1dd40 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66   stores..*/.#def
1dd50 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20  ine SRT_Union   
1dd60 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65       1  /* Store
1dd70 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20   result as keys 
1dd80 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
1dd90 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70  define SRT_Excep
1dda0 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65  t       2  /* Re
1ddb0 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d  move result from
1ddc0 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a   a UNION index *
1ddd0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
1dde0 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a  ists       3  /*
1ddf0 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20   Store 1 if the 
1de00 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d  result is not em
1de10 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
1de20 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20  RT_Discard      
1de30 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76  4  /* Do not sav
1de40 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e  e the results an
1de50 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  ywhere */.#defin
1de60 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20  e SRT_Fifo      
1de70 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72     5  /* Store r
1de80 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
1de90 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
1dea0 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
1deb0 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20   SRT_DistFifo   
1dec0 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54    6  /* Like SRT
1ded0 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75  _Fifo, but uniqu
1dee0 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a  e results only *
1def0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75  /.#define SRT_Qu
1df00 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a  eue        7  /*
1df10 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
1df20 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65   an queue */.#de
1df30 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65  fine SRT_DistQue
1df40 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65  ue    8  /* Like
1df50 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20   SRT_Queue, but 
1df60 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
1df70 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f  nly */../* The O
1df80 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
1df90 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c  s ignored for al
1dfa0 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a  l of the above *
1dfb0 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61  /.#define Ignora
1dfc0 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28  bleOrderby(X) ((
1dfd0 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44  X->eDest)<=SRT_D
1dfe0 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69  istQueue)..#defi
1dff0 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20  ne SRT_Output   
1e000 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74      9  /* Output
1e010 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73   each row of res
1e020 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
1e030 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31  RT_Mem         1
1e040 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
1e050 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63  lt in a memory c
1e060 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ell */.#define S
1e070 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31  RT_Set         1
1e080 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
1e090 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61  lts as keys in a
1e0a0 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
1e0b0 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ne SRT_EphemTab 
1e0c0 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65     12  /* Create
1e0d0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61   transient tab a
1e0e0 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52  nd store like SR
1e0f0 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  T_Table */.#defi
1e100 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65  ne SRT_Coroutine
1e110 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61     13  /* Genera
1e120 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  te a single row 
1e130 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65  of result */.#de
1e140 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20  fine SRT_Table  
1e150 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72       14  /* Stor
1e160 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
1e170 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
1e180 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a  ic rowid */../*.
1e190 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1e1a0 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65  f this object de
1e1b0 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f  scribes where to
1e1c0 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75   put of the resu
1e1d0 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45  lts of.** a SELE
1e1e0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
1e1f0 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65  .struct SelectDe
1e200 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b  st {.  u8 eDest;
1e210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
1e220 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66  ow to dispose of
1e230 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f   the results.  O
1e240 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65  n of SRT_* above
1e250 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61  . */.  int iSDPa
1e260 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  rm;         /* A
1e270 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20   parameter used 
1e280 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73  by the eDest dis
1e290 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a  posal method */.
1e2a0 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20    int iSdst;    
1e2b0 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
1e2c0 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65  egister where re
1e2d0 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65  sults are writte
1e2e0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74  n */.  int nSdst
1e2f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1e300 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
1e310 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  rs allocated */.
1e320 20 20 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74    char *zAffSdst
1e330 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69  ;      /* Affini
1e340 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65  ty used when eDe
1e350 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20  st==SRT_Set */. 
1e360 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
1e370 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c  rBy;  /* Key col
1e380 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65  umns for SRT_Que
1e390 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51  ue and SRT_DistQ
1e3a0 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ueue */.};../*.*
1e3b0 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65  * During code ge
1e3c0 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74  neration of stat
1e3d0 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69  ements that do i
1e3e0 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f  nserts into AUTO
1e3f0 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62  INCREMENT.** tab
1e400 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  les, the followi
1e410 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ng information i
1e420 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
1e430 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e  e Table.u.autoIn
1e440 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f  c.p.** pointer o
1e450 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65  f each autoincre
1e460 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65  ment table to re
1e470 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69  cord some side i
1e480 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a  nformation that.
1e490 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  ** the code gene
1e4a0 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65  rator needs.  We
1e4b0 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65   have to keep pe
1e4c0 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72  r-table autoincr
1e4d0 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ement.** informa
1e4e0 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73  tion in case ins
1e4f0 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69  erts are done wi
1e500 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20  thin triggers.  
1e510 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a  Triggers do not.
1e520 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72  ** normally coor
1e530 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74  dinate their act
1e540 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20  ivities, but we 
1e550 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64  do need to coord
1e560 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61  inate the.** loa
1e570 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20  ding and saving 
1e580 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  of autoincrement
1e590 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1e5a0 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49  .struct AutoincI
1e5b0 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49  nfo {.  AutoincI
1e5c0 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a  nfo *pNext;   /*
1e5d0 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b   Next info block
1e5e0 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68   in a list of th
1e5f0 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c  em all */.  Tabl
1e600 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
1e610 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20    /* Table this 
1e620 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72  info block refer
1e630 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44  s to */.  int iD
1e640 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
1e650 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69  /* Index in sqli
1e660 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74  te3.aDb[] of dat
1e670 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54  abase holding pT
1e680 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43  ab */.  int regC
1e690 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tr;           /*
1e6a0 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
1e6b0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77   holding the row
1e6c0 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b  id counter */.};
1e6d0 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20  ../*.** Size of 
1e6e0 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
1e6f0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
1e700 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20  TE_N_COLCACHE.# 
1e710 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
1e720 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64  COLCACHE 10.#end
1e730 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  if../*.** At lea
1e740 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
1e750 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1e760 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
1e770 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a  eated for each.*
1e780 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d  * trigger that m
1e790 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c  ay be fired whil
1e7a0 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53  e parsing an INS
1e7b0 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
1e7c0 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65  ELETE.** stateme
1e7d0 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a  nt. All such obj
1e7e0 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ects are stored 
1e7f0 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  in the linked li
1e800 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20  st headed at.** 
1e810 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
1e820 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e  g and deleted on
1e830 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  ce statement com
1e840 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65  pilation has bee
1e850 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a  n.** completed..
1e860 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62  **.** A Vdbe sub
1e870 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d  -program that im
1e880 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64  plements the bod
1e890 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73  y and WHEN claus
1e8a0 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20  e of trigger.** 
1e8b0 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67  TriggerPrg.pTrig
1e8c0 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20  ger, assuming a 
1e8d0 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  default ON CONFL
1e8e0 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a  ICT clause of.**
1e8f0 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f   TriggerPrg.orco
1e900 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  nf, is stored in
1e910 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
1e920 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c  pProgram variabl
1e930 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e  e..** The Parse.
1e940 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
1e950 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20   never contains 
1e960 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68  two entries with
1e970 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c   the same.** val
1e980 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72  ues for both pTr
1e990 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66  igger and orconf
1e9a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67  ..**.** The Trig
1e9b0 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
1e9c0 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  0] variable is s
1e9d0 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20  et to a mask of 
1e9e0 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  old.* columns.**
1e9f0 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65   accessed (or se
1ea00 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67  t to 0 for trigg
1ea10 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72  ers fired as a r
1ea20 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a  esult of INSERT.
1ea30 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
1ea40 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
1ea50 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1ea60 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
1ea70 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
1ea80 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1ea90 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
1eaa0 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
1eab0 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
1eac0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1ead0 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
1eae0 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
1eaf0 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
1eb00 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1eb10 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
1eb20 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50   Next entry in P
1eb30 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1eb40 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72   list */.  SubPr
1eb50 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
1eb60 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d     /* Program im
1eb70 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67  plementing pTrig
1eb80 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20  ger/orconf */.  
1eb90 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
1eba0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1ebb0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1ebc0 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61  olicy */.  u32 a
1ebd0 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
1ebe0 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
1ebf0 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
1ec00 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
1ec10 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
1ec20 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
1ec30 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
1ec40 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
1ec50 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
1ec60 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
1ec70 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
1ec80 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
1ec90 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f  yDbMask[(SQLITE_
1eca0 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f  MAX_ATTACHED+9)/
1ecb0 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  8];.# define DbM
1ecc0 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1ecd0 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c  (((M)[(I)/8]&(1<
1ece0 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23  <((I)&7)))!=0).#
1ecf0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1ed00 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65  ro(M)      memse
1ed10 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d  t((M),0,sizeof(M
1ed20 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1ed30 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1ed40 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28  M)[(I)/8]|=(1<<(
1ed50 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65  (I)&7)).# define
1ed60 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1ed70 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73  )   sqlite3DbMas
1ed80 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65  kAllZero(M).# de
1ed90 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
1eda0 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33  ro(M)   (sqlite3
1edb0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1edc0 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70  ==0).#else.  typ
1edd0 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
1ede0 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66  t yDbMask;.# def
1edf0 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1ee00 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28  ,I)    (((M)&(((
1ee10 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1ee20 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1ee30 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1ee40 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65    (M)=0.# define
1ee50 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1ee60 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d      (M)|=(((yDbM
1ee70 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64  ask)1)<<(I)).# d
1ee80 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1ee90 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a  ero(M)   (M)==0.
1eea0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1eeb0 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21  onZero(M)   (M)!
1eec0 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  =0.#endif../*.**
1eed0 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
1eee0 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
1eef0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1ef00 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
1ef10 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
1ef20 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
1ef30 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
1ef40 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
1ef50 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
1ef60 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
1ef70 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
1ef80 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
1ef90 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
1efa0 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
1efb0 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
1efc0 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
1efd0 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
1efe0 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
1eff0 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
1f000 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
1f010 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
1f020 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
1f030 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
1f040 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
1f050 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
1f060 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
1f070 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
1f080 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
1f090 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
1f0a0 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
1f0b0 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
1f0c0 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
1f0d0 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72  -cache.** featur
1f0e0 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
1f0f0 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
1f100 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
1f110 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
1f120 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
1f130 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
1f140 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
1f150 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
1f160 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
1f170 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
1f180 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
1f190 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
1f1a0 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
1f1b0 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
1f1c0 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
1f1d0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1f1e0 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
1f1f0 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
1f200 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
1f210 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
1f220 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
1f230 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
1f240 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
1f250 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
1f260 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
1f270 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
1f280 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1f290 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
1f2a0 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
1f2b0 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
1f2c0 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
1f2d0 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
1f2e0 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
1f2f0 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
1f300 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
1f310 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
1f320 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
1f330 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
1f340 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
1f350 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
1f360 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
1f370 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
1f380 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
1f390 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
1f3a0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
1f3b0 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
1f3c0 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
1f3d0 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
1f3e0 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
1f3f0 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
1f400 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1f410 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
1f420 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
1f430 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
1f440 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1f450 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
1f460 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
1f470 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
1f480 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
1f490 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
1f4a0 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
1f4b0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1f4c0 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
1f4d0 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
1f4e0 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
1f4f0 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
1f500 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f  .  u8 disableLoo
1f510 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65  kaside; /* Numbe
1f520 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61  r of times looka
1f530 73 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69  side has been di
1f540 73 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 6e  sabled */.  u8 n
1f550 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20  ColCache;       
1f560 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
1f570 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63  tries in aColCac
1f580 68 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  he[] */.  int nR
1f590 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1f5a0 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65  * Size of the te
1f5b0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1f5c0 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
1f5d0 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  iRangeReg;      
1f5e0 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74   /* First regist
1f5f0 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  er in temporary 
1f600 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
1f610 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
1f620 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1f630 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65  er of errors see
1f640 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b  n */.  int nTab;
1f650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1f660 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75  umber of previou
1f670 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44  sly allocated VD
1f680 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  BE cursors */.  
1f690 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
1f6a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f6b0 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
1f6c0 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
1f6d0 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20  int nOpAlloc;   
1f6e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f6f0 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65  f slots allocate
1f700 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d  d for Vdbe.aOp[]
1f710 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c   */.  int szOpAl
1f720 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79  loc;       /* By
1f730 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  tes of memory sp
1f740 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ace allocated fo
1f750 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a  r Vdbe.aOp[] */.
1f760 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20    int iSelfTab; 
1f770 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1f780 66 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  for associated w
1f790 69 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20  ith an index on 
1f7a0 65 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76  expr, or negativ
1f7b0 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
1f7c0 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74           ** of t
1f7d0 68 65 20 62 61 73 65 20 72 65 67 69 73 74 65 72  he base register
1f7e0 20 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f   during check-co
1f7f0 6e 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f  nstraint eval */
1f800 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76  .  int iCacheLev
1f810 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61  el;     /* ColCa
1f820 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61  che valid when a
1f830 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65  ColCache[].iLeve
1f840 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a  l<=iCacheLevel *
1f850 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e  /.  int iCacheCn
1f860 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e  t;       /* Coun
1f870 74 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65  ter used to gene
1f880 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d  rate aColCache[]
1f890 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20  .lru values */. 
1f8a0 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20   int nLabel;    
1f8b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f8c0 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a  of labels used *
1f8d0 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b  /.  int *aLabel;
1f8e0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
1f8f0 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61  e to hold the la
1f900 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  bels */.  ExprLi
1f910 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f  st *pConstExpr;/
1f920 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
1f930 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65  ssions */.  Toke
1f940 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
1f950 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
1f960 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
1f970 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
1f980 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  d */.  yDbMask w
1f990 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
1f9a0 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
1f9b0 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
1f9c0 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
1f9d0 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
1f9e0 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
1f9f0 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
1fa00 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
1fa10 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
1fa20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1fa30 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
1fa40 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
1fa50 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
1fa60 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
1fa70 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1fa80 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
1fa90 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
1faa0 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
1fab0 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
1fac0 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
1fad0 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
1fae0 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
1faf0 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43  ram */.#if SELEC
1fb00 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20  TTRACE_ENABLED. 
1fb10 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20   int nSelect;   
1fb20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1fb30 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  of SELECT statem
1fb40 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  ents seen */.  i
1fb50 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74  nt nSelectIndent
1fb60 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74  ;   /* How far t
1fb70 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54  o indent SELECTT
1fb80 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f  RACE() output */
1fb90 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1fba0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
1fbb0 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
1fbc0 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
1fbd0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
1fbe0 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
1fbf0 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
1fc00 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
1fc10 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
1fc20 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
1fc30 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
1fc40 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
1fc50 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
1fc60 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1fc70 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
1fc80 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50   counters */.  P
1fc90 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b  arse *pToplevel;
1fca0 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72      /* Parse str
1fcb0 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20  ucture for main 
1fcc0 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c  program (or NULL
1fcd0 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  ) */.  Table *pT
1fce0 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54  riggerTab;  /* T
1fcf0 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72  able triggers ar
1fd00 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f  e being coded fo
1fd10 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43  r */.  int addrC
1fd20 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41  rTab;       /* A
1fd30 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65  ddress of OP_Cre
1fd40 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20  ateBtree opcode 
1fd50 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  on CREATE TABLE 
1fd60 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c  */.  u32 nQueryL
1fd70 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74  oop;      /* Est
1fd80 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61   number of itera
1fd90 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79  tions of a query
1fda0 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f   (10*log2(N)) */
1fdb0 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20  .  u32 oldmask; 
1fdc0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
1fdd0 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
1fde0 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
1fdf0 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20   u32 newmask;   
1fe00 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
1fe10 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   new.* columns r
1fe20 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
1fe30 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20  8 eTriggerOp;   
1fe40 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45      /* TK_UPDATE
1fe50 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54  , TK_INSERT or T
1fe60 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38  K_DELETE */.  u8
1fe70 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20   eOrconf;       
1fe80 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
1fe90 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
1fea0 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65   for trigger ste
1feb0 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ps */.  u8 disab
1fec0 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20  leTriggers;  /* 
1fed0 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20  True to disable 
1fee0 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f  triggers */..  /
1fef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20  **********.  ** 
1ff40 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73  Fields above mus
1ff50 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
1ff60 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66   to zero.  The f
1ff70 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f  ields that follo
1ff80 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20  w,.  ** down to 
1ff90 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
1ffa0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73   the recursive s
1ffb0 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e  ection, do not n
1ffc0 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69  eed to be.  ** i
1ffd0 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68  nitialized as th
1ffe0 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62  ey will be set b
1fff0 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64  efore being used
20000 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
20010 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e  is.  ** determin
20020 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50  ed by offsetof(P
20030 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 2e  arse,aColCache).
20040 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
20050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
20090 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63    struct yColCac
200a0 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61  he {.    int iTa
200b0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
200c0 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e  * Table cursor n
200d0 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36  umber */.    i16
200e0 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
200f0 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75     /* Table colu
20100 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  mn number */.   
20110 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20   u8 tempReg;    
20120 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69         /* iReg i
20130 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65  s a temp registe
20140 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20  r that needs to 
20150 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20  be freed */.    
20160 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
20170 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67        /* Nesting
20180 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e   level */.    in
20190 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20  t iReg;         
201a0 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20      /* Reg with 
201b0 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
201c0 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f  lumn. 0 means no
201d0 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c  ne. */.    int l
201e0 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ru;             
201f0 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74   /* Least recent
20200 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61  ly used entry ha
20210 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  s the smallest v
20220 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c  alue */.  } aCol
20230 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43  Cache[SQLITE_N_C
20240 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e  OLCACHE];  /* On
20250 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
20260 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f  n cache entry */
20270 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
20280 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f  8];        /* Ho
20290 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74  lding area for t
202a0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
202b0 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e  rs */.  Token sN
202c0 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  ameToken;       
202d0 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e  /* Token with un
202e0 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61  qualified schema
202f0 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a   object name */.
20300 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
20310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
20350 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
20360 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
20370 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
20380 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
20390 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
203a0 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
203b0 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
203c0 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
203d0 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
203e0 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
203f0 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c  ffsetof(Parse,sL
20400 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65  astToken) so the
20410 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c   sLastToken fiel
20420 64 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20  d must be the.  
20430 2a 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69  ** first field i
20440 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  n the recursive 
20450 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  region..  ******
20460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
204a0 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61  **/..  Token sLa
204b0 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  stToken;       /
204c0 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e  * The last token
204d0 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56   parsed */.  ynV
204e0 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  ar nVar;        
204f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20500 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65   of '?' variable
20510 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51  s seen in the SQ
20520 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38  L so far */.  u8
20530 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20   iPkSortOrder;  
20540 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f          /* ASC o
20550 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47  r DESC for INTEG
20560 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  ER PRIMARY KEY *
20570 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20  /.  u8 explain; 
20580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20590 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50   True if the EXP
205a0 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75  LAIN flag is fou
205b0 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20  nd on the query 
205c0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
205d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
205e0 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65  BLE.  u8 declare
205f0 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  Vtab;           
20600 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64  /* True if insid
20610 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  e sqlite3_declar
20620 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e  e_vtab() */.  in
20630 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
20640 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20650 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
20660 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
20670 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69  endif.  int nHei
20680 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
20690 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
206a0 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
206b0 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
206c0 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
206d0 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
206e0 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64  .  int iSelectId
206f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
20700 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65  ID of current se
20710 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e  lect for EXPLAIN
20720 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
20730 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20   iNextSelectId; 
20740 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61         /* Next a
20750 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20  vailable select 
20760 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ID for EXPLAIN o
20770 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
20780 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b    VList *pVList;
20790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
207a0 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76  apping between v
207b0 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e  ariable names an
207c0 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56  d numbers */.  V
207d0 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
207e0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
207f0 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
20800 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
20810 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
20820 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
20830 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
20840 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
20850 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
20860 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
20870 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
20880 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
20890 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
208a0 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
208b0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
208c0 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
208d0 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
208e0 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
208f0 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
20900 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
20910 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
20920 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
20930 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
20940 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64  llbacks */.#ifnd
20950 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
20960 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f  IRTUALTABLE.  To
20970 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20  ken sArg;       
20980 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
20990 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f  ete text of a mo
209a0 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f  dule argument */
209b0 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61  .  Table **apVta
209c0 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20  bLock;       /* 
209d0 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75  Pointer to virtu
209e0 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e  al tables needin
209f0 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e  g locking */.#en
20a00 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f  dif.  Table *pZo
20a10 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20  mbieTab;        
20a20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65  /* List of Table
20a30 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65   objects to dele
20a40 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65  te after code ge
20a50 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  n */.  TriggerPr
20a60 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20  g *pTriggerPrg; 
20a70 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
20a80 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72  of coded trigger
20a90 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  s */.  With *pWi
20aa0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
20ab0 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48   /* Current WITH
20ac0 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
20ad0 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
20ae0 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20  hToFree;        
20af0 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54  /* Free this WIT
20b00 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20  H object at the 
20b10 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65  end of the parse
20b20 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69   */.};../*.** Si
20b30 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73  zes and pointers
20b40 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72 74   of various part
20b50 73 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f  s of the Parse o
20b60 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  bject..*/.#defin
20b70 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f  e PARSE_HDR_SZ o
20b80 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43  ffsetof(Parse,aC
20b90 6f 6c 43 61 63 68 65 29 20 2f 2a 20 52 65 63 75  olCache) /* Recu
20ba0 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61  rsive part w/o a
20bb0 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69  ColCache*/.#defi
20bc0 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52 53 45  ne PARSE_RECURSE
20bd0 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72  _SZ offsetof(Par
20be0 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20  se,sLastToken)  
20bf0 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70    /* Recursive p
20c00 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50  art */.#define P
20c10 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69  ARSE_TAIL_SZ (si
20c20 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53  zeof(Parse)-PARS
20c30 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a  E_RECURSE_SZ) /*
20c40 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70   Non-recursive p
20c50 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50  art */.#define P
20c60 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28  ARSE_TAIL(X) (((
20c70 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45  char*)(X))+PARSE
20c80 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a  _RECURSE_SZ)  /*
20c90 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c   Pointer to tail
20ca0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72   */../*.** Retur
20cb0 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e  n true if curren
20cc0 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71  tly inside an sq
20cd0 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
20ce0 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69  ab() call..*/.#i
20cf0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
20d00 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
20d10 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
20d20 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a  RE_VTAB 0.#else.
20d30 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
20d40 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73  LARE_VTAB (pPars
20d50 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a  e->declareVtab).
20d60 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
20d70 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
20d80 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
20d90 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c  ture can be decl
20da0 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20  ared on a stack 
20db0 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73  and used.** to s
20dc0 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41  ave the Parse.zA
20dd0 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65  uthContext value
20de0 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
20df0 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65  be restored late
20e00 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  r..*/.struct Aut
20e10 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e  hContext {.  con
20e20 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
20e30 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20  ntext;   /* Put 
20e40 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74  saved Parse.zAut
20e50 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f  hContext here */
20e60 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
20e70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
20e80 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75  * The Parse stru
20e90 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cture */.};../*.
20ea0 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67  ** Bitfield flag
20eb0 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69  s for P5 value i
20ec0 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65  n various opcode
20ed0 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  s..**.** Value c
20ee0 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f  onstraints (enfo
20ef0 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28  rced via assert(
20f00 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  )):.**    OPFLAG
20f10 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d  _LENGTHARG    ==
20f20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
20f30 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  GTH.**    OPFLAG
20f40 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d  _TYPEOFARG    ==
20f50 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
20f60 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  EOF.**    OPFLAG
20f70 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d  _BULKCSR      ==
20f80 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a   BTREE_BULKLOAD.
20f90 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45  **    OPFLAG_SEE
20fa0 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52  KEQ       == BTR
20fb0 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20  EE_SEEK_EQ.**   
20fc0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
20fd0 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f  E    == BTREE_FO
20fe0 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50  RDELETE.**    OP
20ff0 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
21000 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50  N == BTREE_SAVEP
21010 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50  OSITION.**    OP
21020 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20  FLAG_AUXDELETE  
21030 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45    == BTREE_AUXDE
21040 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE.*/.#define 
21050 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20  OPFLAG_NCHANGE  
21060 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
21070 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74  OP_Insert: Set t
21080 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
21090 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  ange */.        
210a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
210c0 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20  Also used in P2 
210d0 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44  (not P5) of OP_D
210e0 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  elete */.#define
210f0 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20   OPFLAG_EPHEM   
21100 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
21110 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65   OP_Column: Ephe
21120 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20  meral output is 
21130 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ok */.#define OP
21140 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
21150 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65     0x20    /* Se
21160 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
21170 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
21180 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
21190 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
211a0 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
211b0 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
211c0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
211d0 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
211e0 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
211f0 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
21200 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
21210 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21220 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
21230 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
21240 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
21250 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
21260 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21270 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30  _ISNOOP        0
21280 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x40    /* OP_Del
21290 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64  ete does pre-upd
212a0 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f  ate-hook only */
212b0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
212c0 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78  LENGTHARG     0x
212d0 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  40    /* OP_Colu
212e0 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
212f0 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65   length() */.#de
21300 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45  fine OPFLAG_TYPE
21310 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20  OFARG     0x80  
21320 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
21330 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70  nly used for typ
21340 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  eof() */.#define
21350 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
21360 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
21370 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20   OP_Open** used 
21380 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72  to open bulk cur
21390 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  sor */.#define O
213a0 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20  PFLAG_SEEKEQ    
213b0 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f      0x02    /* O
213c0 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20  P_Open** cursor 
213d0 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c  uses EQ seek onl
213e0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  y */.#define OPF
213f0 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20  LAG_FORDELETE   
21400 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f    0x08    /* OP_
21410 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20  Open should use 
21420 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20  BTREE_FORDELETE 
21430 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21440 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20  G_P2ISREG       
21450 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f  0x10    /* P2 to
21460 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20   OP_Open** is a 
21470 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
21480 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21490 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20  G_PERMUTE       
214a0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
214b0 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70  mpare: use the p
214c0 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64  ermutation */.#d
214d0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56  efine OPFLAG_SAV
214e0 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20  EPOSITION  0x02 
214f0 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f     /* OP_Delete/
21500 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63 75 72  Insert: save cur
21510 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69  sor pos */.#defi
21520 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  ne OPFLAG_AUXDEL
21530 45 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20  ETE     0x04    
21540 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e  /* OP_Delete: in
21550 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20  dex in a DELETE 
21560 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  op */../*. * Eac
21570 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
21580 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
21590 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
215a0 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
215b0 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
215c0 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f  rigger.. *. * Po
215d0 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
215e0 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
215f0 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
21600 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
21610 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
21620 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
21630 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
21640 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
21650 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20  esents the. *   
21660 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
21670 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
21680 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
21690 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
216a0 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
216b0 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
216c0 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
216d0 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
216e0 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
216f0 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
21700 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
21710 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
21720 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
21730 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
21740 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
21750 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
21760 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
21770 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
21780 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
21790 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
217a0 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
217b0 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
217c0 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
217d0 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
217e0 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
217f0 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
21800 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
21810 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
21820 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
21830 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
21840 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
21850 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
21860 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
21870 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
21880 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
21890 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
218a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
218b0 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
218c0 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
218d0 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
218e0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
218f0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
21900 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
21910 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
21920 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
21930 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
21940 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
21950 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
21960 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
21970 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
21980 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
21990 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
219a0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
219b0 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
219c0 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
219d0 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
219e0 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
219f0 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
21a00 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
21a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
21a30 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
21a40 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
21a50 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
21a60 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
21a70 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
21a80 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
21a90 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
21aa0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
21ab0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
21ac0 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
21ad0 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
21ae0 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
21af0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
21b00 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
21b10 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
21b20 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
21b30 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
21b40 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
21b50 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
21b60 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
21b70 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
21b80 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
21b90 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
21ba0 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
21bb0 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
21bc0 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ich..**.** If th
21bd0 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
21be0 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
21bf0 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
21c00 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
21c10 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
21c20 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
21c30 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
21c40 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
21c50 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
21c60 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
21c70 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
21c80 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
21c90 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
21ca0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
21cb0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
21cc0 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
21cd0 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
21ce0 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
21cf0 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
21d00 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20   *. * Instances 
21d10 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
21d20 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64  rStep are stored
21d30 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e   in a singly lin
21d40 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64  ked list (linked
21d50 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70  . * using the "p
21d60 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65  Next" member) re
21d70 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
21d80 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
21d90 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73  er of the. * ass
21da0 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
21db0 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
21dc0 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
21dd0 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
21de0 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
21df0 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
21e00 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
21e10 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70  m.. *. * The "op
21e20 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
21e30 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
21e40 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
21e50 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
21e60 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
21e70 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
21e80 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
21e90 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
21ea0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
21eb0 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  he. * value of "
21ec0 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
21ed0 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
21ee0 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
21ef0 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
21f00 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
21f10 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
21f20 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
21f30 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
21f40 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
21f50 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
21f60 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
21f70 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
21f80 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
21f90 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
21fa0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
21fb0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
21fc0 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
21fd0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
21fe0 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
21ff0 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
22000 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
22010 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
22020 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
22030 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
22040 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
22050 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
22060 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
22070 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
22080 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
22090 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
220a0 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
220b0 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
220c0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
220d0 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
220e0 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
220f0 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
22100 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
22110 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
22120 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
22130 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a   TK_DELETE). * z
22140 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
22150 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
22160 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
22170 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
22180 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
22190 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
221a0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
221b0 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
221c0 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
221d0 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
221e0 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ULL.. *. * (op =
221f0 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
22200 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
22210 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
22220 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
22230 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  e.. * pWhere    
22240 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
22250 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
22260 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
22270 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
22280 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
22290 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
222a0 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
222b0 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
222c0 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
222d0 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
222e0 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
222f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
22300 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
22310 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
22320 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
22330 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
22340 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
22350 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20  .. *. */.struct 
22360 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
22370 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
22380 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
22390 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
223a0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
223b0 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
223c0 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
223d0 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
223e0 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
223f0 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
22400 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
22410 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
22420 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
22430 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
22440 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
22450 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48   statement or RH
22460 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
22470 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
22480 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20   char *zTarget; 
22490 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
224a0 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
224b0 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
224c0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
224d0 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
224e0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
224f0 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
22500 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
22510 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
22520 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
22530 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f  e for UPDATE. */
22540 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
22550 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
22560 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
22570 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
22580 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
22590 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
225a0 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
225b0 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
225c0 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
225d0 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
225e0 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
225f0 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
22600 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
22610 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
22620 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
22630 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
22640 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
22650 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
22660 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
22670 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
22680 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
22690 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70  explicit..*/.typ
226a0 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69  edef struct DbFi
226b0 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72  xer DbFixer;.str
226c0 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20  uct DbFixer {.  
226d0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
226e0 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69      /* The parsi
226f0 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72  ng context.  Err
22700 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74  or messages writ
22710 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  ten here */.  Sc
22720 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
22730 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74    /* Fix items t
22740 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  o this schema */
22750 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b  .  int bVarOnly;
22760 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
22770 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66  for variable ref
22780 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a  erences only */.
22790 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
227a0 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  b;    /* Make su
227b0 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61  re all objects a
227c0 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
227d0 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
227e0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
227f0 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f  Type;  /* Type o
22800 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
22810 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
22820 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63   messages */.  c
22830 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d  onst Token *pNam
22840 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  e; /* Name of th
22850 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
22860 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
22870 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  sages */.};../*.
22880 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75  ** An objected u
22890 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  sed to accumulat
228a0 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20  e the text of a 
228b0 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a  string where we.
228c0 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73  ** do not necess
228d0 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62  arily know how b
228e0 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69  ig the string wi
228f0 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64  ll be in the end
22900 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41  ..*/.struct StrA
22910 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33  ccum {.  sqlite3
22920 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
22930 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61   Optional databa
22940 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  se for lookaside
22950 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a  .  Can be NULL *
22960 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b  /.  char *zText;
22970 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
22980 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64  string collected
22990 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33 32   so far */.  u32
229a0 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20    nAlloc;       
229b0 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73    /* Amount of s
229c0 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69  pace allocated i
229d0 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33 32  n zText */.  u32
229e0 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20    mxAlloc;      
229f0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c    /* Maximum all
22a00 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  owed allocation.
22a10 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f    0 for no mallo
22a20 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 33 32  c usage */.  u32
22a30 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20    nChar;        
22a40 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74    /* Length of t
22a50 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72  he string so far
22a60 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72   */.  u8   accEr
22a70 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54  ror;       /* ST
22a80 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20  RACCUM_NOMEM or 
22a90 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20  STRACCUM_TOOBIG 
22aa0 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66  */.  u8   printf
22ab0 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c  Flags;    /* SQL
22ac0 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73  ITE_PRINTF flags
22ad0 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65   below */.};.#de
22ae0 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f  fine STRACCUM_NO
22af0 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20  MEM   1.#define 
22b00 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20  STRACCUM_TOOBIG 
22b10 20 32 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   2.#define SQLIT
22b20 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
22b30 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65 72  L 0x01  /* Inter
22b40 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e  nal-use-only con
22b50 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64 20  verters allowed 
22b60 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
22b70 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
22b80 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20 66    0x02  /* SQL f
22b90 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
22ba0 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f  s to VXPrintf */
22bb0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
22bc0 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20  PRINTF_MALLOCED 
22bd0 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0x04  /* True if
22be0 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63 61   xText is alloca
22bf0 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64  ted space */..#d
22c00 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64  efine isMalloced
22c10 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69 6e  (X)  (((X)->prin
22c20 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45  tfFlags & SQLITE
22c30 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
22c40 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20  )!=0).../*.** A 
22c50 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
22c60 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
22c70 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65  d to communicate
22c80 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
22c90 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74  from sqlite3Init
22ca0 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68   and OP_ParseSch
22cb0 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c  ema into the sql
22cc0 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
22cd0 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
22ce0 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  uct {.  sqlite3 
22cf0 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
22d00 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e  he database bein
22d10 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
22d20 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
22d30 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20  sg;    /* Error 
22d40 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68  message stored h
22d50 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  ere */.  int iDb
22d60 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
22d70 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62  0 for main datab
22d80 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50  ase.  1 for TEMP
22d90 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48  , 2.. for ATTACH
22da0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ed */.  int rc; 
22db0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
22dc0 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65  esult code store
22dd0 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74  d here */.} Init
22de0 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72  Data;../*.** Str
22df0 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e  ucture containin
22e00 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75  g global configu
22e10 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20  ration data for 
22e20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
22e30 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73  ry..**.** This s
22e40 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f  tructure also co
22e50 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74  ntains some stat
22e60 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  e information..*
22e70 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  /.struct Sqlite3
22e80 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62  Config {.  int b
22e90 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20  Memstat;        
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22eb0 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d  True to enable m
22ec0 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a  emory status */.
22ed0 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78    int bCoreMutex
22ee0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22ef0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
22f00 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78  nable core mutex
22f10 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75  ing */.  int bFu
22f20 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  llMutex;        
22f30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
22f40 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c  ue to enable ful
22f50 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  l mutexing */.  
22f60 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20  int bOpenUri;   
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f80 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74    /* True to int
22f90 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73  erpret filenames
22fa0 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e   as URIs */.  in
22fb0 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20  t bUseCis;      
22fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fd0 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20  /* Use covering 
22fe0 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c  indices for full
22ff0 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  -scans */.  int 
23000 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20  bSmallMalloc;   
23010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23020 20 41 76 6f 69 64 20 6c 61 72 67 65 20 6d 65 6d   Avoid large mem
23030 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ory allocations 
23040 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 69 6e 74  if true */.  int
23050 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20   mxStrlen;      
23060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23070 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67  * Maximum string
23080 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74   length */.  int
23090 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20   neverCorrupt;  
230a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
230b0 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c  * Database is al
230c0 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  ways well-formed
230d0 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b   */.  int szLook
230e0 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
230f0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
23100 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
23110 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e  fer size */.  in
23120 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  t nLookaside;   
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23140 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
23150 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e  side buffer coun
23160 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74  t */.  int nStmt
23170 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  Spill;          
23180 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d 74           /* Stmt
23190 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74  -journal spill-t
231a0 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c 64  o-disk threshold
231b0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65   */.  sqlite3_me
231c0 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20  m_methods m;    
231d0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c          /* Low-l
231e0 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  evel memory allo
231f0 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65  cation interface
23200 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
23210 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65  tex_methods mute
23220 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c  x;      /* Low-l
23230 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72  evel mutex inter
23240 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
23250 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73  3_pcache_methods
23260 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c  2 pcache2;  /* L
23270 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61  ow-level page-ca
23280 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  che interface */
23290 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20  .  void *pHeap; 
232a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232b0 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f       /* Heap sto
232c0 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  rage space */.  
232d0 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20  int nHeap;      
232e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232f0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65    /* Size of pHe
23300 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ap[] */.  int mn
23310 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20  Req, mxReq;     
23320 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
23330 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20  in and max heap 
23340 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a  requests sizes *
23350 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
23360 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
23370 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20        /* mmap() 
23380 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66  space per open f
23390 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ile */.  sqlite3
233a0 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20  _int64 mxMmap;  
233b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
233c0 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20  ximum value for 
233d0 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64  szMmap */.  void
233e0 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20   *pPage;        
233f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23400 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f   Page cache memo
23410 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61  ry */.  int szPa
23420 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
23430 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
23440 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69  e of each page i
23450 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
23460 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20  nt nPage;       
23470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23480 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
23490 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  ges in pPage[] *
234a0 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72  /.  int mxParser
234b0 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20  Stack;          
234c0 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d        /* maximum
234d0 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61   depth of the pa
234e0 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20  rser stack */.  
234f0 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45  int sharedCacheE
23500 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
23510 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61    /* true if sha
23520 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65  red-cache mode e
23530 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20  nabled */.  u32 
23540 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20  szPma;          
23550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23560 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20   Maximum Sorter 
23570 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a  PMA size */.  /*
23580 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74   The above might
23590 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
235a0 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68  to non-zero.  Th
235b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64  e following need
235c0 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   to always.  ** 
235d0 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72  initially be zer
235e0 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20  o, however. */. 
235f0 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20   int isInit;    
23600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23610 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
23620 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
23630 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a  has finished */.
23640 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73    int inProgress
23650 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23660 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c      /* True whil
23670 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
23680 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a   in progress */.
23690 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69    int isMutexIni
236a0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
236b0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
236c0 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e  r mutexes are in
236d0 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
236e0 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b  nt isMallocInit;
236f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23700 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
23710 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
23720 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
23730 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20  PCacheInit;     
23740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23750 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
23760 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
23770 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69  */.  int nRefIni
23780 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  tMutex;         
23790 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
237a0 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e   of users of pIn
237b0 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c  itMutex */.  sql
237c0 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69  ite3_mutex *pIni
237d0 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f  tMutex;        /
237e0 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20  * Mutex used by 
237f0 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
23800 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ze() */.  void (
23810 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74  *xLog)(void*,int
23820 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f  ,const char*); /
23830 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c  * Function for l
23840 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64  ogging */.  void
23850 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20   *pLogArg;      
23860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23870 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
23880 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a  nt to xLog() */.
23890 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
238a0 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f  ABLE_SQLLOG.  vo
238b0 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69  id(*xSqllog)(voi
238c0 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
238d0 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20  t char*, int);. 
238e0 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72   void *pSqllogAr
238f0 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  g;.#endif.#ifdef
23900 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56   SQLITE_VDBE_COV
23910 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66  ERAGE.  /* The f
23920 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63  ollowing callbac
23930 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20  k (if not NULL) 
23940 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76  is invoked on ev
23950 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a  ery VDBE branch.
23960 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20    ** operation. 
23970 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63   Set the callbac
23980 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54  k using SQLITE_T
23990 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56  ESTCTRL_VDBE_COV
239a0 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f  ERAGE..  */.  vo
239b0 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68  id (*xVdbeBranch
239c0 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63  )(void*,int iSrc
239d0 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38  Line,u8 eThis,u8
239e0 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62   eMx);  /* Callb
239f0 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
23a00 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20  VdbeBranchArg;  
23a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a30 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
23a40 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  nt */.#endif.#if
23a50 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
23a60 53 54 41 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78  STABLE.  int (*x
23a70 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e  TestCallback)(in
23a80 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  t);        /* In
23a90 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33  voked by sqlite3
23aa0 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65  FaultSim() */.#e
23ab0 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61  ndif.  int bLoca
23ac0 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20  ltimeFault;     
23ad0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23ae0 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69   to fail localti
23af0 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20  me() calls */.  
23b00 69 6e 74 20 69 4f 6e 63 65 52 65 73 65 74 54 68  int iOnceResetTh
23b10 72 65 73 68 6f 6c 64 3b 20 20 20 20 20 20 20 20  reshold;        
23b20 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65 73    /* When to res
23b30 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74  et OP_Once count
23b40 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ers */.};../*.**
23b50 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
23b60 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73  sed inside of as
23b70 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
23b80 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68  s to indicate th
23b90 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74  at.** the assert
23ba0 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f   is only valid o
23bb0 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
23bc0 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65  database.  Inste
23bd0 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ad of:.**.**    
23be0 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a   assert( X );.**
23bf0 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a  .** One writes:.
23c00 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
23c10 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44  ( X || CORRUPT_D
23c20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55  B );.**.** CORRU
23c30 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75  PT_DB is true du
23c40 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72  ring normal oper
23c50 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f  ation.  CORRUPT_
23c60 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69  DB does not indi
23c70 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65  cate.** that the
23c80 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66   database is def
23c90 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c  initely corrupt,
23ca0 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69   only that it mi
23cb0 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a  ght be corrupt..
23cc0 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74  ** For most test
23cd0 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f   cases, CORRUPT_
23ce0 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c  DB is set to fal
23cf0 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69  se using a speci
23d00 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  al.** sqlite3_te
23d10 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54  st_control().  T
23d20 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65  his enables asse
23d30 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
23d40 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e  to prove.** thin
23d50 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61  gs that are alwa
23d60 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c  ys true for well
23d70 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
23d80 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s..*/.#define CO
23d90 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74  RRUPT_DB  (sqlit
23da0 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f  e3Config.neverCo
23db0 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  rrupt==0)../*.**
23dc0 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72   Context pointer
23dd0 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72   passed down thr
23de0 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61  ough the tree-wa
23df0 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61  lk..*/.struct Wa
23e00 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  lker {.  Parse *
23e10 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e30 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e     /* Parser con
23e40 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20  text.  */.  int 
23e50 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29  (*xExprCallback)
23e60 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
23e70 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63  ;     /* Callbac
23e80 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  k for expression
23e90 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65  s */.  int (*xSe
23ea0 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61  lectCallback)(Wa
23eb0 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20  lker*,Select*); 
23ec0 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
23ed0 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f   SELECTs */.  vo
23ee0 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  id (*xSelectCall
23ef0 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53  back2)(Walker*,S
23f00 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e  elect*);/* Secon
23f10 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  d callback for S
23f20 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20  ELECTs */.  int 
23f30 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20  walkerDepth;    
23f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f50 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
23f60 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f  of subqueries */
23f70 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20  .  u8 eCode;    
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23fa0 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69  A small processi
23fb0 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  ng code */.  uni
23fc0 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  on {            
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20         /* Extra 
23ff0 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63  data for callbac
24000 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e  k */.    NameCon
24010 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20  text *pNC;      
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24030 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e     /* Naming con
24040 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  text */.    int 
24050 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24070 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74        /* A count
24080 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
24090 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
240a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240b0 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20      /* A cursor 
240c0 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72  number */.    Sr
240d0 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
240e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240f0 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20          /* FROM 
24100 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74  clause */.    st
24110 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70  ruct SrcCount *p
24120 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20  SrcCount;       
24130 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
24140 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72  ing column refer
24150 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72  ences */.    str
24160 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43  uct CCurHint *pC
24170 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20  CurHint;        
24180 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62         /* Used b
24190 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74  y codeCursorHint
241a0 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61  () */.    int *a
241b0 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  iCol;           
241c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241d0 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66 20      /* array of 
241e0 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a  column indexes *
241f0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78  /.    struct Idx
24200 43 6f 76 65 72 20 2a 70 49 64 78 43 6f 76 65 72  Cover *pIdxCover
24210 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24220 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 69 6e 64  /* Check for ind
24230 65 78 20 63 6f 76 65 72 61 67 65 20 2a 2f 0a 20  ex coverage */. 
24240 20 20 20 73 74 72 75 63 74 20 49 64 78 45 78 70     struct IdxExp
24250 72 54 72 61 6e 73 20 2a 70 49 64 78 54 72 61 6e  rTrans *pIdxTran
24260 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
24270 43 6f 6e 76 65 72 74 20 69 6e 64 65 78 65 64 20  Convert indexed 
24280 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d 6e 20 2a  expr to column *
24290 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
242a0 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 20 20  pGroupBy;       
242b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242c0 2f 2a 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  /* GROUP BY clau
242d0 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  se */.    struct
242e0 20 48 61 76 69 6e 67 54 6f 57 68 65 72 65 43 74   HavingToWhereCt
242f0 78 20 2a 70 48 61 76 69 6e 67 43 74 78 3b 20 20  x *pHavingCtx;  
24300 20 20 20 20 2f 2a 20 48 41 56 49 4e 47 20 74 6f      /* HAVING to
24310 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 74   WHERE clause ct
24320 78 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  x */.  } u;.};..
24330 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
24340 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
24350 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
24360 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
24370 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
24380 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
24390 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
243a0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
243b0 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
243c0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
243d0 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
243e0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
243f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
24400 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
24410 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
24420 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 57  int sqlite3ExprW
24430 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
24440 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
24450 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 4e 6f  ite3SelectWalkNo
24460 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  op(Walker*, Sele
24470 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
24480 33 53 65 6c 65 63 74 57 61 6c 6b 46 61 69 6c 28  3SelectWalkFail(
24490 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
244a0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
244b0 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71 6c 69  _DEBUG.void sqli
244c0 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 41 73 73  te3SelectWalkAss
244d0 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20 53 65  ert2(Walker*, Se
244e0 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  lect*);.#endif..
244f0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64  /*.** Return cod
24500 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65  e from the parse
24510 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72  -tree walking pr
24520 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65  imitives and the
24530 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e  ir.** callbacks.
24540 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f  .*/.#define WRC_
24550 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20  Continue    0   
24560 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e  /* Continue down
24570 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a   into children *
24580 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72  /.#define WRC_Pr
24590 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a  une       1   /*
245a0 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62   Omit children b
245b0 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b  ut continue walk
245c0 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a  ing siblings */.
245d0 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72  #define WRC_Abor
245e0 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41  t       2   /* A
245f0 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20  bandon the tree 
24600 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  walk */../*.** A
24610 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
24620 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70  is structure rep
24630 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66  resents a set of
24640 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45   one or more CTE
24650 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62  s.** (common tab
24660 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20  le expressions) 
24670 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e  created by a sin
24680 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  gle WITH clause.
24690 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20  .*/.struct With 
246a0 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20  {.  int nCte;   
246b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
246d0 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54   CTEs in the WIT
246e0 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69  H clause */.  Wi
246f0 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20  th *pOuter;     
24700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24710 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48   Containing WITH
24720 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
24730 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65   */.  struct Cte
24740 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
24750 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63        /* For eac
24760 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54  h CTE in the WIT
24770 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a  H clause.... */.
24780 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
247b0 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45  his CTE */.    E
247c0 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20  xprList *pCols; 
247d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
247e0 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63  * List of explic
247f0 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c  it column names,
24800 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20   or NULL */.    
24810 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24830 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f  /* The definitio
24840 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  n of this CTE */
24850 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
24860 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20 20  *zCteErr;       
24870 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65       /* Error me
24880 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c  ssage for circul
24890 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  ar references */
248a0 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23  .  } a[1];.};..#
248b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
248c0 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  UG./*.** An inst
248d0 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65  ance of the Tree
248e0 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75  View object is u
248f0 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67  sed for printing
24900 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
24910 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72  ** data structur
24920 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62  es on sqlite3Deb
24930 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67  ugPrintf() using
24940 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65   a tree-like vie
24950 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65  w..*/.struct Tre
24960 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c  eView {.  int iL
24970 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
24980 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c    /* Which level
24990 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20   of the tree we 
249a0 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20  are on */.  u8  
249b0 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20  bLine[100];     
249c0 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74      /* Draw vert
249d0 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69  ical in column i
249e0 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20   if bLine[i] is 
249f0 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69  true */.};.#endi
24a00 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
24a10 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75  G */../*.** Assu
24a20 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20  ming zIn points 
24a30 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
24a40 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61  e of a UTF-8 cha
24a50 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e  racter,.** advan
24a60 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20  ce zIn to point 
24a70 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
24a80 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54  e of the next UT
24a90 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a  F-8 character..*
24aa0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
24ab0 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20  _SKIP_UTF8(zIn) 
24ac0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
24ad0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28           \.  if(
24ae0 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63   (*(zIn++))>=0xc
24af0 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  0 ){            
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b10 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28    \.    while( (
24b20 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78  *zIn & 0xc0)==0x
24b30 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20  80 ){ zIn++; }  
24b40 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d             \.  }
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b80 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54      \.}../*.** T
24b90 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54  he SQLITE_*_BKPT
24ba0 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73   macros are subs
24bb0 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20  titutes for the 
24bc0 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68  error codes with
24bd0 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  .** the same nam
24be0 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68  e but without th
24bf0 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20  e _BKPT suffix. 
24c00 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e   These macros in
24c10 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  voke.** routines
24c20 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65   that report the
24c30 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20   line-number on 
24c40 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20  which the error 
24c50 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73  originated.** us
24c60 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ing sqlite3_log(
24c70 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73  ).  The routines
24c80 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20   also provide a 
24c90 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65  convenient place
24ca0 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62  .** to set a deb
24cb0 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74  ugger breakpoint
24cc0 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
24cd0 52 65 70 6f 72 74 45 72 72 6f 72 28 69 6e 74 20  ReportError(int 
24ce0 69 45 72 72 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f  iErr, int lineno
24cf0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54  , const char *zT
24d00 79 70 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ype);.int sqlite
24d10 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e  3CorruptError(in
24d20 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  t);.int sqlite3M
24d30 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b  isuseError(int);
24d40 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74  .int sqlite3Cant
24d50 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a  openError(int);.
24d60 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
24d70 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69  ORRUPT_BKPT sqli
24d80 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
24d90 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
24da0 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  e SQLITE_MISUSE_
24db0 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75  BKPT sqlite3Misu
24dc0 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  seError(__LINE__
24dd0 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
24de0 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73  _CANTOPEN_BKPT s
24df0 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
24e00 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69  ror(__LINE__).#i
24e10 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
24e20 47 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4e  G.  int sqlite3N
24e30 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a  omemError(int);.
24e40 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65    int sqlite3Ioe
24e50 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74  rrnomemError(int
24e60 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
24e70 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72  CorruptPgnoError
24e80 28 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65  (int,Pgno);.# de
24e90 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  fine SQLITE_NOME
24ea0 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f  M_BKPT sqlite3No
24eb0 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  memError(__LINE_
24ec0 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
24ed0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
24ee0 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72  KPT sqlite3Ioerr
24ef0 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e  nomemError(__LIN
24f00 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51  E__).# define SQ
24f10 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e  LITE_CORRUPT_PGN
24f20 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72  O(P) sqlite3Corr
24f30 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c  uptPgnoError(__L
24f40 49 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65  INE__,(P)).#else
24f50 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
24f60 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49  _NOMEM_BKPT SQLI
24f70 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e  TE_NOMEM.# defin
24f80 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  e SQLITE_IOERR_N
24f90 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45  OMEM_BKPT SQLITE
24fa0 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64  _IOERR_NOMEM.# d
24fb0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
24fc0 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c  RUPT_PGNO(P) sql
24fd0 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
24fe0 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69  (__LINE__).#endi
24ff0 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e  f../*.** FTS3 an
25000 64 20 46 54 53 34 20 62 6f 74 68 20 72 65 71 75  d FTS4 both requ
25010 69 72 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ire virtual tabl
25020 65 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66  e support.*/.#if
25030 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
25040 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
25050 45 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  E).# undef SQLIT
25060 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20  E_ENABLE_FTS3.# 
25070 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
25080 42 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a  BLE_FTS4.#endif.
25090 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72  ./*.** FTS4 is r
250a0 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69  eally an extensi
250b0 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74  on for FTS3.  It
250c0 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e   is enabled usin
250d0 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f  g the.** SQLITE_
250e0 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72  ENABLE_FTS3 macr
250f0 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64  o.  But to avoid
25100 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c   confusion we al
25110 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53  so call.** the S
25120 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
25130 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65  4 macro to serve
25140 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   as an alias for
25150 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
25160 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  TS3..*/.#if defi
25170 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
25180 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69  E_FTS4) && !defi
25190 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
251a0 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65  E_FTS3).# define
251b0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
251c0 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TS3 1.#endif../*
251d0 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20  .** The ctype.h 
251e0 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64  header is needed
251f0 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73   for non-ASCII s
25200 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61  ystems.  It is a
25210 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79  lso.** needed by
25220 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20   FTS3 when FTS3 
25230 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74  is included in t
25240 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e  he amalgamation.
25250 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
25260 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c  (SQLITE_ASCII) |
25270 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
25280 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
25290 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28  TS3) && defined(
252a0 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
252b0 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20  ION)).# include 
252c0 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66  <ctype.h>.#endif
252d0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
252e0 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d  owing macros mim
252f0 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  ic the standard 
25300 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
25310 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20  s toupper(),.** 
25320 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e  isspace(), isaln
25330 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20  um(), isdigit() 
25340 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20  and isxdigit(), 
25350 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68  respectively. Th
25360 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73  e.** sqlite vers
25370 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
25380 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
25390 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ers, regardless 
253a0 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69  of locale..*/.#i
253b0 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49  fdef SQLITE_ASCI
253c0 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  I.# define sqlit
253d0 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28  e3Toupper(x)  ((
253e0 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70  x)&~(sqlite3Ctyp
253f0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
25400 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a  har)(x)]&0x20)).
25410 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25420 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71  Isspace(x)   (sq
25430 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
25440 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
25450 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65  ]&0x01).# define
25460 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
25470 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
25480 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
25490 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a  char)(x)]&0x06).
254a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
254b0 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71  Isalpha(x)   (sq
254c0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
254d0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
254e0 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65  ]&0x02).# define
254f0 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
25500 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
25510 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
25520 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a  char)(x)]&0x04).
25530 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25540 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71  Isxdigit(x)  (sq
25550 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
25560 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
25570 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65  ]&0x08).# define
25580 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
25590 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70  x)   (sqlite3Upp
255a0 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67  erToLower[(unsig
255b0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23  ned char)(x)]).#
255c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
255d0 73 71 75 6f 74 65 28 78 29 20 20 20 28 73 71 6c  squote(x)   (sql
255e0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
255f0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
25600 26 30 78 38 30 29 0a 23 65 6c 73 65 0a 23 20 64  &0x80).#else.# d
25610 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
25620 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65  pper(x)   touppe
25630 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
25640 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
25650 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
25660 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69     isspace((unsi
25670 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
25680 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25690 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c  salnum(x)   isal
256a0 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68  num((unsigned ch
256b0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
256c0 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
256d0 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e  x)   isalpha((un
256e0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
256f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25700 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73  3Isdigit(x)   is
25710 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
25720 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
25730 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
25740 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28  it(x)  isxdigit(
25750 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
25760 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
25770 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
25780 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e   tolower((unsign
25790 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
257a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71  efine sqlite3Isq
257b0 75 6f 74 65 28 78 29 20 20 20 28 28 78 29 3d 3d  uote(x)   ((x)==
257c0 27 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c  '"'||(x)=='\''||
257d0 28 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27  (x)=='['||(x)=='
257e0 60 27 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  `').#endif.#ifnd
257f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
25800 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
25810 47 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  GS.int sqlite3Is
25820 49 64 43 68 61 72 28 75 38 29 3b 0a 23 65 6e 64  IdChar(u8);.#end
25830 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e  if../*.** Intern
25840 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74  al function prot
25850 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71  otypes.*/.int sq
25860 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e  lite3StrICmp(con
25870 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
25880 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
25890 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
258a0 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
258b0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65  qlite3ColumnType
258c0 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b  (Column*,char*);
258d0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
258e0 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33  StrNICmp sqlite3
258f0 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73  _strnicmp..int s
25900 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74  qlite3MallocInit
25910 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
25920 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f  ite3MallocEnd(vo
25930 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  id);.void *sqlit
25940 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76  e3Malloc(u64);.v
25950 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
25960 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69  ocZero(u64);.voi
25970 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
25980 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c  ocZero(sqlite3*,
25990 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
259a0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
259b0 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
259c0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
259d0 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74  allocRawNN(sqlit
259e0 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  e3*, u64);.char 
259f0 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
25a00 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
25a10 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
25a20 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
25a30 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
25a40 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  ar*, u64);.void 
25a50 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28  *sqlite3Realloc(
25a60 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  void*, u64);.voi
25a70 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
25a80 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65  locOrFree(sqlite
25a90 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
25aa0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
25ab0 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65  DbRealloc(sqlite
25ac0 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
25ad0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
25ae0 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20  bFree(sqlite3*, 
25af0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
25b00 69 74 65 33 44 62 46 72 65 65 4e 4e 28 73 71 6c  ite3DbFreeNN(sql
25b10 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69  ite3*, void*);.i
25b20 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
25b30 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74  Size(void*);.int
25b40 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
25b50 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Size(sqlite3*, v
25b60 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
25b70 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69  ite3PageMalloc(i
25b80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25b90 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29  3PageFree(void*)
25ba0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
25bb0 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64  mSetDefault(void
25bc0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
25bd0 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69  E_UNTESTABLE.voi
25be0 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d  d sqlite3BenignM
25bf0 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20  allocHooks(void 
25c00 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20  (*)(void), void 
25c10 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64  (*)(void));.#end
25c20 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65  if.int sqlite3He
25c30 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69  apNearlyFull(voi
25c40 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79  d);../*.** On sy
25c50 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65  stems with ample
25c60 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64   stack space and
25c70 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c   that support al
25c80 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20  loca(), make.** 
25c90 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20  use of alloca() 
25ca0 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  to obtain space 
25cb0 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61  for large automa
25cc0 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79  tic objects.  By
25cd0 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74   default,.** obt
25ce0 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d  ain space from m
25cf0 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54  alloc()..**.** T
25d00 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74  he alloca() rout
25d10 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e  ine never return
25d20 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69  s NULL.  This wi
25d30 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61  ll cause code pa
25d40 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c  ths.** that deal
25d50 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61   with sqlite3Sta
25d60 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72  ckAlloc() failur
25d70 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68  es to be unreach
25d80 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  able..*/.#ifdef 
25d90 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43  SQLITE_USE_ALLOC
25da0 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  A.# define sqlit
25db0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
25dc0 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29  D,N)   alloca(N)
25dd0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25de0 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
25df0 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c  D,N)  memset(all
25e00 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20  oca(N), 0, N).# 
25e10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
25e20 61 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c  ackFree(D,P).#el
25e30 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
25e40 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
25e50 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44  (D,N)   sqlite3D
25e60 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a  bMallocRaw(D,N).
25e70 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25e80 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
25e90 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61  ,N)  sqlite3DbMa
25ea0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20  llocZero(D,N).# 
25eb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
25ec0 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
25ed0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
25ee0 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (D,P).#endif../*
25ef0 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f   Do not allow bo
25f00 74 68 20 4d 45 4d 53 59 53 35 20 61 6e 64 20 4d  th MEMSYS5 and M
25f10 45 4d 53 59 53 33 20 74 6f 20 62 65 20 64 65 66  EMSYS3 to be def
25f20 69 6e 65 64 20 74 6f 67 65 74 68 65 72 2e 20 20  ined together.  
25f30 49 66 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c 20  If they.** are, 
25f40 64 69 73 61 62 6c 65 20 4d 45 4d 53 59 53 33 0a  disable MEMSYS3.
25f50 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
25f60 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a  _ENABLE_MEMSYS5.
25f70 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
25f80 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
25f90 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28  e3MemGetMemsys5(
25fa0 76 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20 53 51  void);.#undef SQ
25fb0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
25fc0 59 53 33 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  YS3.#endif.#ifde
25fd0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
25fe0 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71  MEMSYS3.const sq
25ff0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
26000 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
26010 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23  Memsys3(void);.#
26020 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
26030 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
26040 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  T.  sqlite3_mute
26050 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
26060 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d  *sqlite3DefaultM
26070 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
26080 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
26090 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
260a0 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64  e3NoopMutex(void
260b0 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
260c0 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78  ex *sqlite3Mutex
260d0 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e  Alloc(int);.  in
260e0 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e  t sqlite3MutexIn
260f0 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20  it(void);.  int 
26100 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28  sqlite3MutexEnd(
26110 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69  void);.#endif.#i
26120 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
26130 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26  E_MUTEX_OMIT) &&
26140 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
26150 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76  _MUTEX_NOOP).  v
26160 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72  oid sqlite3Memor
26170 79 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a  yBarrier(void);.
26180 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
26190 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
261a0 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71  ier().#endif..sq
261b0 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
261c0 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69  te3StatusValue(i
261d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
261e0 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69  3StatusUp(int, i
261f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26200 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c  3StatusDown(int,
26210 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26220 74 65 33 53 74 61 74 75 73 48 69 67 68 77 61 74  te3StatusHighwat
26230 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  er(int, int);.in
26240 74 20 73 71 6c 69 74 65 33 4c 6f 6f 6b 61 73 69  t sqlite3Lookasi
26250 64 65 55 73 65 64 28 73 71 6c 69 74 65 33 2a 2c  deUsed(sqlite3*,
26260 69 6e 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63 65 73  int*);../* Acces
26270 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65  s to mutexes use
26280 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61  d by sqlite3_sta
26290 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33  tus() */.sqlite3
262a0 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50  _mutex *sqlite3P
262b0 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64  cache1Mutex(void
262c0 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  );.sqlite3_mutex
262d0 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d   *sqlite3MallocM
262e0 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66  utex(void);..#if
262f0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
26300 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 54 48 52 45  ENABLE_MULTITHRE
26310 41 44 45 44 5f 43 48 45 43 4b 53 29 20 26 26 20  ADED_CHECKS) && 
26320 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
26330 4d 55 54 45 58 5f 4f 4d 49 54 29 0a 76 6f 69 64  MUTEX_OMIT).void
26340 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72   sqlite3MutexWar
26350 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 73 71  nOnContention(sq
26360 6c 69 74 65 33 5f 6d 75 74 65 78 2a 29 3b 0a 23  lite3_mutex*);.#
26370 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
26380 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e  lite3MutexWarnOn
26390 43 6f 6e 74 65 6e 74 69 6f 6e 28 78 29 0a 23 65  Contention(x).#e
263a0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
263b0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
263c0 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73  NG_POINT.  int s
263d0 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62  qlite3IsNaN(doub
263e0 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  le);.#else.# def
263f0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  ine sqlite3IsNaN
26400 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  (X)  0.#endif../
26410 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
26420 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
26430 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  g structure hold
26440 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
26450 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74  out SQL.** funct
26460 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74  ions arguments t
26470 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61  hat are the para
26480 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72  meters to the pr
26490 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e  intf() function.
264a0 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74  .*/.struct Print
264b0 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69  fArguments {.  i
264c0 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  nt nArg;        
264d0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c          /* Total
264e0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
264f0 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55  ents */.  int nU
26500 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  sed;            
26510 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
26520 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73  arguments used s
26530 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74  o far */.  sqlit
26540 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67  e3_value **apArg
26550 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d  ;   /* The argum
26560 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b  ent values */.};
26570 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58  ..void sqlite3VX
26580 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
26590 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  , const char*, v
265a0 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71  a_list);.void sq
265b0 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72  lite3XPrintf(Str
265c0 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68  Accum*, const ch
265d0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
265e0 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
265f0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
26600 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
26610 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
26620 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
26630 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
26640 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
26650 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
26660 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
26670 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76  VE_OS_TRACE).  v
26680 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
26690 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
266a0 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
266b0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
266c0 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
266d0 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
266e0 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
266f0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
26700 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
26710 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
26720 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
26730 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  r(TreeView*, con
26740 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  st Expr*, u8);. 
26750 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
26760 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73  eViewBareExprLis
26770 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
26780 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  st ExprList*, co
26790 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
267a0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
267b0 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
267c0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
267d0 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
267e0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
267f0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
26800 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c  elect(TreeView*,
26810 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20   const Select*, 
26820 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
26830 74 65 33 54 72 65 65 56 69 65 77 57 69 74 68 28  te3TreeViewWith(
26840 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
26850 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e   With*, u8);.#en
26860 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74  dif...void sqlit
26870 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
26880 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63   **, sqlite3*, c
26890 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
268a0 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
268b0 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
268c0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
268d0 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  d sqlite3Dequote
268e0 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  (char*);.void sq
268f0 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54  lite3TokenInit(T
26900 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e  oken*,char*);.in
26910 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
26920 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
26930 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
26940 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
26950 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
26960 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
26970 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
26980 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
26990 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
269a0 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
269b0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
269c0 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
269d0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
269e0 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
269f0 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
26a00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
26a10 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
26a20 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
26a30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65  .void sqlite3Cle
26a40 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50  arTempRegCache(P
26a50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53  arse*);.#ifdef S
26a60 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
26a70 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e  sqlite3NoTempsIn
26a80 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
26a90 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78  ,int);.#endif.Ex
26aa0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
26ab0 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
26ac0 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69  t,const Token*,i
26ad0 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
26ae0 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c  e3Expr(sqlite3*,
26af0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
26b00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
26b10 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73  prAttachSubtrees
26b20 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
26b30 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
26b40 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72  pr *sqlite3PExpr
26b50 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78  (Parse*, int, Ex
26b60 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
26b70 64 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64  d sqlite3PExprAd
26b80 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  dSelect(Parse*, 
26b90 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  Expr*, Select*);
26ba0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
26bb0 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45  prAnd(sqlite3*,E
26bc0 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
26bd0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
26be0 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45  unction(Parse*,E
26bf0 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
26c00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26c10 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
26c20 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
26c30 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
26c40 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
26c50 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
26c60 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
26c70 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
26c80 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
26c90 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  *,Expr*);.ExprLi
26ca0 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
26cb0 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28  istAppendVector(
26cc0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
26cd0 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  ,IdList*,Expr*);
26ce0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26cf0 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65  rListSetSortOrde
26d00 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  r(ExprList*,int)
26d10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
26d20 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
26d30 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
26d40 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
26d50 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
26d60 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
26d70 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
26d80 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
26d90 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
26da0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
26db0 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  st*);.u32 sqlite
26dc0 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63  3ExprListFlags(c
26dd0 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b  onst ExprList*);
26de0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
26df0 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a  (sqlite3*, char*
26e00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
26e10 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nitCallback(void
26e20 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
26e30 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
26e40 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
26e50 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
26e60 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69  ,Token*,int);.#i
26e70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26e80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d  T_VIRTUALTABLE.M
26e90 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72  odule *sqlite3Pr
26ea0 61 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72  agmaVtabRegister
26eb0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
26ec0 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65  char *zName);.#e
26ed0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
26ee0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
26ef0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
26f00 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
26f10 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
26f20 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
26f30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
26f40 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
26f50 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
26f60 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
26f70 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
26f80 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
26f90 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f   sqlite3DeleteCo
26fa0 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65  lumnNames(sqlite
26fb0 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  3*,Table*);.int 
26fc0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72  sqlite3ColumnsFr
26fd0 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  omExprList(Parse
26fe0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a  *,ExprList*,i16*
26ff0 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64  ,Column**);.void
27000 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64   sqlite3SelectAd
27010 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f  dColumnTypeAndCo
27020 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  llation(Parse*,T
27030 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  able*,Select*);.
27040 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
27050 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
27060 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
27070 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
27080 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
27090 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
270a0 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
270b0 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
270c0 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
270d0 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
270e0 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
270f0 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
27100 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
27110 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
27120 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49  t,int);.#if SQLI
27130 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
27140 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20  _COLUMNS.  void 
27150 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
27160 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
27170 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29  Table*, Column*)
27180 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
27190 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
271a0 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
271b0 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  (T,C) /* no-op *
271c0 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  /.#endif.void sq
271d0 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
271e0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
271f0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
27200 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72  e3AddNotNull(Par
27210 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
27220 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72  sqlite3AddPrimar
27230 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  yKey(Parse*, Exp
27240 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
27250 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
27260 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73  ite3AddCheckCons
27270 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45  traint(Parse*, E
27280 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
27290 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
272a0 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70  ue(Parse*,ExprSp
272b0 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
272c0 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
272d0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
272e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
272f0 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
27300 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53  ken*,Token*,u8,S
27310 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
27320 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
27330 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
27340 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
27350 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
27360 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
27370 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
27380 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71  r **);.Btree *sq
27390 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
273a0 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
273b0 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65  t char*);..#ifde
273c0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
273d0 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  BLE.# define sql
273e0 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20  ite3FaultSim(X) 
273f0 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a  SQLITE_OK.#else.
27400 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75    int sqlite3Fau
27410 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64  ltSim(int);.#end
27420 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69  if..Bitvec *sqli
27430 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28  te3BitvecCreate(
27440 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
27450 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76  3BitvecTest(Bitv
27460 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
27470 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
27480 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c  NotNull(Bitvec*,
27490 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
274a0 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
274b0 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
274c0 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
274d0 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
274e0 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
274f0 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
27500 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
27510 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
27520 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66  ze(Bitvec*);.#if
27530 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
27540 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74  STABLE.int sqlit
27550 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
27560 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23  est(int,int*);.#
27570 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73  endif..RowSet *s
27580 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
27590 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
275a0 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
275b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
275c0 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a  SetClear(RowSet*
275d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
275e0 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
275f0 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
27600 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
27610 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42  (RowSet*, int iB
27620 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20  atch, i64);.int 
27630 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
27640 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29  t(RowSet*, i64*)
27650 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  ;..void sqlite3C
27660 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a  reateView(Parse*
27670 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
27680 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
27690 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
276a0 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
276b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
276c0 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
276d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
276e0 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
276f0 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
27700 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
27710 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
27720 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
27730 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
27740 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
27750 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
27760 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74  TTACHED>30.  int
27770 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
27780 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a  lZero(yDbMask);.
27790 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
277a0 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
277b0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
277c0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
277d0 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
277e0 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
277f0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
27800 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
27810 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
27820 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65   Table*);.#ifnde
27830 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
27840 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
27850 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
27860 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
27870 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
27880 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
27890 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
278a0 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
278b0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
278c0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
278d0 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
278e0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
278f0 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
27900 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
27910 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
27920 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  cList*, Select*,
27930 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a   IdList*, int);.
27940 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72  void *sqlite3Arr
27950 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74  ayAllocate(sqlit
27960 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e  e3*,void*,int,in
27970 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74  t*,int*);.IdList
27980 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41   *sqlite3IdListA
27990 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
279a0 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  IdList*, Token*)
279b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c  ;.int sqlite3IdL
279c0 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a  istIndex(IdList*
279d0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53  ,const char*);.S
279e0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
279f0 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71  rcListEnlarge(sq
27a00 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
27a10 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63  , int, int);.Src
27a20 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
27a30 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
27a40 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  e3*, SrcList*, T
27a50 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
27a60 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
27a70 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f  SrcListAppendFro
27a80 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72  mTerm(Parse*, Sr
27a90 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
27aa0 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
27ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f                To
27ad0 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  ken*, Select*, E
27ae0 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  xpr*, IdList*);.
27af0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
27b00 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72  istIndexedBy(Par
27b10 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  se *, SrcList *,
27b20 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20   Token *);.void 
27b30 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75  sqlite3SrcListFu
27b40 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53  ncArgs(Parse*, S
27b50 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
27b60 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
27b70 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28  IndexedByLookup(
27b80 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20  Parse *, struct 
27b90 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
27ba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
27bb0 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
27bc0 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  e(SrcList*);.voi
27bd0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
27be0 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61  AssignCursors(Pa
27bf0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
27c00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c  .void sqlite3IdL
27c10 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
27c20 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  3*, IdList*);.vo
27c30 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
27c40 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
27c50 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64  , SrcList*);.Ind
27c60 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63  ex *sqlite3Alloc
27c70 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73  ateIndexObject(s
27c80 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c  qlite3*,i16,int,
27c90 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
27ca0 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78  lite3CreateIndex
27cb0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
27cc0 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  oken*,SrcList*,E
27cd0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b  xprList*,int,Tok
27ce0 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
27cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
27d00 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  xpr*, int, int, 
27d10 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
27d20 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65  3DropIndex(Parse
27d30 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
27d40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
27d50 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c  lect(Parse*, Sel
27d60 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
27d70 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
27d80 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72  te3SelectNew(Par
27d90 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72  se*,ExprList*,Sr
27da0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
27db0 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  rList*,.        
27dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27dd0 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a   Expr*,ExprList*
27de0 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ,u32,Expr*);.voi
27df0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
27e00 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
27e10 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
27e20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
27e30 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
27e40 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
27e50 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
27e60 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
27e70 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27e80 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
27e90 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
27ea0 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
27eb0 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
27ec0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
27ed0 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
27ee0 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
27ef0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
27f00 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74  ERY).Expr *sqlit
27f10 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72  e3LimitWhere(Par
27f20 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
27f30 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
27f40 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  r*,char*);.#endi
27f50 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  f.void sqlite3De
27f60 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c  leteFrom(Parse*,
27f70 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a   SrcList*, Expr*
27f80 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  , ExprList*, Exp
27f90 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27fa0 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
27fb0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
27fc0 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78  st*,Expr*,int,Ex
27fd0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
27fe0 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74  WhereInfo *sqlit
27ff0 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72  e3WhereBegin(Par
28000 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
28010 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
28020 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b  rList*,u16,int);
28030 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65  .void sqlite3Whe
28040 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a  reEnd(WhereInfo*
28050 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
28060 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
28070 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
28080 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
28090 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
280a0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
280b0 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
280c0 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
280d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
280e0 65 4f 72 64 65 72 65 64 49 6e 6e 65 72 4c 6f 6f  eOrderedInnerLoo
280f0 70 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  p(WhereInfo*);.i
28100 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
28110 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66  sSorted(WhereInf
28120 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
28130 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
28140 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
28150 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
28160 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
28170 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
28180 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
28190 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e  s(WhereInfo*, in
281a0 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45  t*);.#define ONE
281b0 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20  PASS_OFF      0 
281c0 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66         /* Use of
281d0 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c   ONEPASS not all
281e0 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
281f0 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20  ONEPASS_SINGLE  
28200 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   1        /* ONE
28210 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61  PASS valid for a
28220 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61   single row upda
28230 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  te */.#define ON
28240 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32  EPASS_MULTI    2
28250 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
28260 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20  SS is valid for 
28270 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
28280 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28290 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f  rCodeLoadIndexCo
282a0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64  lumn(Parse*, Ind
282b0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
282c0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
282d0 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
282e0 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  n(Parse*, Table*
282f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
28300 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
28310 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
28320 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65 2a 2c  umnToReg(Parse*,
28330 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
28340 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
28350 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
28360 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
28370 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
28380 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
28390 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
283a0 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
283b0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
283c0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
283d0 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c  cheStore(Parse*,
283e0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
283f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28400 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65  rCachePush(Parse
28410 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28420 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72  ExprCachePop(Par
28430 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
28440 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
28450 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
28460 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28470 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
28480 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
28490 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
284a0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
284b0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
284c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
284d0 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
284e0 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
284f0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f  qlite3ExprCodeCo
28500 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  py(Parse*, Expr*
28510 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28520 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74  ite3ExprCodeFact
28530 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45  orable(Parse*, E
28540 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
28550 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
28560 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78  tInit(Parse*, Ex
28570 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
28580 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
28590 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
285a0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
285b0 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
285c0 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
285d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
285e0 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
285f0 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
28600 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
28610 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70  lite3ExprCodeExp
28620 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
28630 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
28640 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20  t, u8);.#define 
28650 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20  SQLITE_ECEL_DUP 
28660 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65       0x01  /* De
28670 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20  ep, not shallow 
28680 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e  copies */.#defin
28690 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41  e SQLITE_ECEL_FA
286a0 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20  CTOR   0x02  /* 
286b0 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  Factor out const
286c0 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65  ant terms */.#de
286d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
286e0 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20 20  _REF      0x04  
286f0 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e  /* Use ExprList.
28700 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20  u.x.iOrderByCol 
28710 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
28720 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20  E_ECEL_OMITREF  
28730 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66  0x08  /* Omit if
28740 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f   ExprList.u.x.iO
28750 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69  rderByCol */.voi
28760 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54  d sqlite3ExprIfT
28770 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  rue(Parse*, Expr
28780 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
28790 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
287a0 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78  False(Parse*, Ex
287b0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
287c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
287d0 49 66 46 61 6c 73 65 44 75 70 28 50 61 72 73 65  IfFalseDup(Parse
287e0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
287f0 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  nt);.Table *sqli
28800 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c  te3FindTable(sql
28810 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
28820 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
28830 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f  .#define LOCATE_
28840 56 49 45 57 20 20 20 20 30 78 30 31 0a 23 64 65  VIEW    0x01.#de
28850 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52  fine LOCATE_NOER
28860 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20 2a  R   0x02.Table *
28870 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
28880 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c  le(Parse*,u32 fl
28890 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ags,const char*,
288a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
288b0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
288c0 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
288d0 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73 74  se*,u32 flags,st
288e0 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
288f0 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
28900 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
28910 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
28920 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
28930 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
28940 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
28950 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
28960 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
28970 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
28980 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
28990 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
289a0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
289b0 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
289c0 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  se*,Token*);.int
289d0 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
289e0 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
289f0 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  3*, int);.char *
28a00 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
28a10 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54  oken(sqlite3*, T
28a20 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
28a30 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 50  te3ExprCompare(P
28a40 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70  arse*,Expr*, Exp
28a50 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
28a60 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
28a70 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78 70 72  Skip(Expr*, Expr
28a80 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
28a90 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70  ite3ExprListComp
28aa0 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45  are(ExprList*, E
28ab0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
28ac0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
28ad0 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72 73 65  mpliesExpr(Parse
28ae0 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  *,Expr*, Expr*, 
28af0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28b00 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
28b10 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
28b20 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
28b30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
28b40 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
28b50 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
28b60 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
28b70 33 45 78 70 72 43 6f 76 65 72 65 64 42 79 49 6e  3ExprCoveredByIn
28b80 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74 20 69  dex(Expr*, int i
28b90 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49 64 78  Cur, Index *pIdx
28ba0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75  );.int sqlite3Fu
28bb0 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72  nctionUsesThisSr
28bc0 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74  c(Expr*, SrcList
28bd0 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65  *);.Vdbe *sqlite
28be0 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29  3GetVdbe(Parse*)
28bf0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
28c00 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
28c10 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65   sqlite3PrngSave
28c20 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
28c30 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
28c40 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b  toreState(void);
28c50 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
28c60 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
28c70 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
28c80 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
28c90 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73  erifySchema(Pars
28ca0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
28cb0 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
28cc0 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73  NamedSchema(Pars
28cd0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
28ce0 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  zDb);.void sqlit
28cf0 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
28d00 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
28d10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
28d20 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
28d30 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
28d40 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
28d50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
28d60 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
28d70 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
28d80 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
28d90 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
28da0 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
28db0 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
28dc0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
28dd0 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69  nstant(Expr*);.i
28de0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
28df0 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28  ConstantNotJoin(
28e00 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
28e10 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
28e20 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72  tOrFunction(Expr
28e30 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
28e40 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
28e50 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72 73 65  tOrGroupBy(Parse
28e60 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69  *, Expr*, ExprLi
28e70 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
28e80 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73  3ExprIsTableCons
28e90 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b  tant(Expr*,int);
28ea0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
28eb0 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
28ec0 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  TS.int sqlite3Ex
28ed0 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71 75 65  prContainsSubque
28ee0 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69  ry(Expr*);.#endi
28ef0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  f.int sqlite3Exp
28f00 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a  rIsInteger(Expr*
28f10 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
28f20 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c  ite3ExprCanBeNul
28f30 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  l(const Expr*);.
28f40 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e  int sqlite3ExprN
28f50 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68  eedsNoAffinityCh
28f60 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  ange(const Expr*
28f70 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c  , char);.int sql
28f80 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73  ite3IsRowid(cons
28f90 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
28fa0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
28fb0 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72  wDelete(.    Par
28fc0 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67  se*,Table*,Trigg
28fd0 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  er*,int,int,int,
28fe0 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74  i16,u8,u8,u8,int
28ff0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
29000 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
29010 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
29020 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
29030 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  int*, int);.int 
29040 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49  sqlite3GenerateI
29050 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20  ndexKey(Parse*, 
29060 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
29070 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65  , int, int*,Inde
29080 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  x*,int);.void sq
29090 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74  lite3ResolvePart
290a0 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c  IdxLabel(Parse*,
290b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
290c0 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72  e3GenerateConstr
290d0 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65  aintChecks(Parse
290e0 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e  *,Table*,int*,in
290f0 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20  t,int,int,int,. 
29100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29120 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e      u8,u8,int,in
29130 74 2a 2c 69 6e 74 2a 29 3b 0a 23 69 66 64 65 66  t*,int*);.#ifdef
29140 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e   SQLITE_ENABLE_N
29150 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20  ULL_TRIM.  void 
29160 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65  sqlite3SetMakeRe
29170 63 6f 72 64 50 35 28 56 64 62 65 2a 2c 54 61 62  cordP5(Vdbe*,Tab
29180 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
29190 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 74 4d  fine sqlite3SetM
291a0 61 6b 65 52 65 63 6f 72 64 50 35 28 41 2c 42 29  akeRecordP5(A,B)
291b0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
291c0 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
291d0 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  rtion(Parse*,Tab
291e0 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  le*,int,int,int,
291f0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
29200 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
29210 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
29220 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
29230 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20  , int, u8, int, 
29240 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u8*, int*, int*)
29250 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
29260 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
29270 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
29280 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29290 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
292a0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
292b0 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
292c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
292d0 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
292e0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
292f0 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a  char*, i8, u8);.
29300 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71  void sqlite3Uniq
29310 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ueConstraint(Par
29320 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a  se*, int, Index*
29330 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29340 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50  owidConstraint(P
29350 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  arse*, int, Tabl
29360 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
29370 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65  e3ExprDup(sqlite
29380 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45  3*,Expr*,int);.E
29390 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
293a0 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69  ExprListDup(sqli
293b0 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  te3*,ExprList*,i
293c0 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
293d0 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28  lite3SrcListDup(
293e0 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74  sqlite3*,SrcList
293f0 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a  *,int);.IdList *
29400 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70  sqlite3IdListDup
29410 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74  (sqlite3*,IdList
29420 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
29430 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c  te3SelectDup(sql
29440 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  ite3*,Select*,in
29450 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52  t);.#if SELECTTR
29460 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64  ACE_ENABLED.void
29470 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65   sqlite3SelectSe
29480 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f  tName(Select*,co
29490 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
294a0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
294b0 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
294c0 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  A,B).#endif.void
294d0 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75   sqlite3InsertBu
294e0 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44  iltinFuncs(FuncD
294f0 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65  ef*,int);.FuncDe
29500 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
29510 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
29520 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
29530 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
29540 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
29550 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  tinFunctions(voi
29560 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
29570 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
29580 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
29590 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
295a0 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69  isterPerConnecti
295b0 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  onBuiltinFunctio
295c0 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ns(sqlite3*);.in
295d0 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
295e0 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29  heckOk(sqlite3*)
295f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
29600 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
29610 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
29620 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f   sqlite3ChangeCo
29630 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  okie(Parse*, int
29640 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
29650 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
29660 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  W) && !defined(S
29670 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
29680 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ER).void sqlite3
29690 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28  MaterializeView(
296a0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
296b0 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  Expr*, ExprList*
296c0 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e  ,Expr*,int);.#en
296d0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
296e0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
296f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
29700 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73  eginTrigger(Pars
29710 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  e*, Token*,Token
29720 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74  *,int,int,IdList
29730 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20  *,SrcList*,.    
29740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29750 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74         Expr*,int
29760 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
29770 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67  qlite3FinishTrig
29780 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
29790 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a  gerStep*, Token*
297a0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
297b0 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72  3DropTrigger(Par
297c0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
297d0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
297e0 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
297f0 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
29800 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  r*);.  Trigger *
29810 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
29820 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  xist(Parse *, Ta
29830 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  ble*, int, ExprL
29840 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b  ist*, int *pMask
29850 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
29860 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
29870 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20  (Parse *, Table 
29880 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
29890 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
298a0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
298b0 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73   *, int, ExprLis
298c0 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a  t*, int, Table *
298d0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
298e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
298f0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
29900 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
29910 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
29920 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65  (Parse *, Trigge
29930 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  r *, Table *, in
29940 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
29950 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54  void sqliteViewT
29960 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20  riggers(Parse*, 
29970 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
29980 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nt, ExprList*);.
29990 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
299a0 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28  leteTriggerStep(
299b0 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
299c0 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67  rStep*);.  Trigg
299d0 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
299e0 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70  riggerSelectStep
299f0 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
29a00 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
29a10 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
29a20 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69  rInsertStep(sqli
29a30 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  te3*,Token*, IdL
29a40 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
29a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
29a70 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69  lect*,u8);.  Tri
29a80 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
29a90 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
29aa0 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
29ab0 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  n*,ExprList*, Ex
29ac0 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67  pr*, u8);.  Trig
29ad0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
29ae0 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
29af0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
29b00 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
29b10 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
29b20 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
29b30 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f   Trigger*);.  vo
29b40 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
29b50 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
29b60 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
29b70 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33  nst char*);.  u3
29b80 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  2 sqlite3Trigger
29b90 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54  Colmask(Parse*,T
29ba0 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74  rigger*,ExprList
29bb0 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a  *,int,int,Table*
29bc0 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  ,int);.# define 
29bd0 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
29be0 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
29bf0 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70  oplevel ? (p)->p
29c00 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a  Toplevel : (p)).
29c10 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29c20 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  IsToplevel(p) ((
29c30 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30  p)->pToplevel==0
29c40 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
29c50 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73   sqlite3Triggers
29c60 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29  Exist(B,C,D,E,F)
29c70 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
29c80 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
29c90 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
29ca0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
29cb0 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69  rPtr(A,B).# defi
29cc0 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  ne sqlite3Unlink
29cd0 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
29ce0 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65  (A,B,C).# define
29cf0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
29d00 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45  rigger(A,B,C,D,E
29d10 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69  ,F,G,H,I).# defi
29d20 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
29d30 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41  wTriggerDirect(A
29d40 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65  ,B,C,D,E,F).# de
29d50 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
29d60 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a  gerList(X, Y) 0.
29d70 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29d80 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
29d90 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   p.# define sqli
29da0 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29  te3IsToplevel(p)
29db0 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
29dc0 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
29dd0 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29  k(A,B,C,D,E,F,G)
29de0 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73   0.#endif..int s
29df0 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50  qlite3JoinType(P
29e00 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
29e10 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
29e20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
29e30 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  teForeignKey(Par
29e40 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
29e50 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74  Token*, ExprList
29e60 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
29e70 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67  lite3DeferForeig
29e80 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74  nKey(Parse*, int
29e90 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
29ea0 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
29eb0 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  TION.  void sqli
29ec0 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73  te3AuthRead(Pars
29ed0 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a  e*,Expr*,Schema*
29ee0 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e  ,SrcList*);.  in
29ef0 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  t sqlite3AuthChe
29f00 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63  ck(Parse*,int, c
29f10 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
29f20 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
29f30 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
29f40 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
29f50 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74  Push(Parse*, Aut
29f60 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74  hContext*, const
29f70 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
29f80 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
29f90 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78  xtPop(AuthContex
29fa0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
29fb0 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61  e3AuthReadCol(Pa
29fc0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
29fd0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
29fe0 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20  , int);.#else.# 
29ff0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2a000 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a  thRead(a,b,c,d).
2a010 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2a020 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c  AuthCheck(a,b,c,
2a030 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f  d,e)    SQLITE_O
2a040 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  K.# define sqlit
2a050 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
2a060 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e  h(a,b,c).# defin
2a070 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
2a080 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f  textPop(a)  ((vo
2a090 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76  id)(a)).#endif.v
2a0a0 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63  oid sqlite3Attac
2a0b0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  h(Parse*, Expr*,
2a0c0 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
2a0d0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61  void sqlite3Deta
2a0e0 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
2a0f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
2a100 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c  ixInit(DbFixer*,
2a110 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f   Parse*, int, co
2a120 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2a130 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2a140 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28  lite3FixSrcList(
2a150 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73  DbFixer*, SrcLis
2a160 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2a170 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65  FixSelect(DbFixe
2a180 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
2a190 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
2a1a0 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a  (DbFixer*, Expr*
2a1b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2a1c0 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65  xExprList(DbFixe
2a1d0 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
2a1e0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72  int sqlite3FixTr
2a1f0 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65  iggerStep(DbFixe
2a200 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  r*, TriggerStep*
2a210 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2a220 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  oF(const char *z
2a230 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20  , double*, int, 
2a240 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
2a250 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63  GetInt32(const c
2a260 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  har *, int*);.in
2a270 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f  t sqlite3Atoi(co
2a280 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66 6e  nst char*);.#ifn
2a290 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a2a0 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65  UTF16.int sqlite
2a2b0 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f  3Utf16ByteLen(co
2a2c0 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c  nst void *pData,
2a2d0 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23 65 6e   int nChar);.#en
2a2e0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  dif.int sqlite3U
2a2f0 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74  tf8CharLen(const
2a300 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e   char *pData, in
2a310 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71  t nByte);.u32 sq
2a320 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f  lite3Utf8Read(co
2a330 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73  nst u8**);.LogEs
2a340 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28  t sqlite3LogEst(
2a350 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  u64);.LogEst sql
2a360 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f  ite3LogEstAdd(Lo
2a370 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69  gEst,LogEst);.#i
2a380 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a390 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c  T_VIRTUALTABLE.L
2a3a0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
2a3b0 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f  EstFromDouble(do
2a3c0 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69  uble);.#endif.#i
2a3d0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2a3e0 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
2a3f0 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20  NSTATUS) || \.  
2a400 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
2a410 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
2a420 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20  _STAT4) || \.   
2a430 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2a440 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45  EXPLAIN_ESTIMATE
2a450 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69  D_ROWS).u64 sqli
2a460 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c  te3LogEstToInt(L
2a470 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56  ogEst);.#endif.V
2a480 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c 69  List *sqlite3VLi
2a490 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c 56  stAdd(sqlite3*,V
2a4a0 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
2a4b0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73  *,int,int);.cons
2a4c0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  t char *sqlite3V
2a4d0 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c  ListNumToName(VL
2a4e0 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ist*,int);.int s
2a4f0 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65 54  qlite3VListNameT
2a500 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73  oNum(VList*,cons
2a510 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f  t char*,int);../
2a520 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f  *.** Routines to
2a530 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
2a540 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
2a550 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65  integers.  These
2a560 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64   used to.** be d
2a570 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20  efined locally, 
2a580 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74  but now we use t
2a590 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e  he varint routin
2a5a0 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63  es in the util.c
2a5b0 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74  .** file..*/.int
2a5c0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2a5d0 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t(unsigned char*
2a5e0 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74  , u64);.u8 sqlit
2a5f0 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73  e3GetVarint(cons
2a600 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2a610 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71  *, u64 *);.u8 sq
2a620 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
2a630 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2a640 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a  char *, u32 *);.
2a650 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e  int sqlite3Varin
2a660 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a  tLen(u64 v);../*
2a670 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63  .** The common c
2a680 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72  ase is for a var
2a690 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67  int to be a sing
2a6a0 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66  le byte.  They f
2a6b0 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72  ollowing.** macr
2a6c0 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f  os handle the co
2a6d0 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75  mmon case withou
2a6e0 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61  t a procedure ca
2a6f0 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c  ll, but then cal
2a700 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75  l.** the procedu
2a710 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61  re for larger va
2a720 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rints..*/.#defin
2a730 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c  e getVarint32(A,
2a740 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28  B)  \.  (u8)((*(
2a750 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42  A)<(u8)0x80)?((B
2a760 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73  )=(u32)*(A)),1:s
2a770 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
2a780 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42  2((A),(u32 *)&(B
2a790 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56  ))).#define putV
2a7a0 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
2a7b0 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29    (u8)(((u32)(B)
2a7c0 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41  <(u32)0x80)?(*(A
2a7d0 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  )=(unsigned char
2a7e0 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69  )(B)),1:\.  sqli
2a7f0 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29  te3PutVarint((A)
2a800 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67  ,(B))).#define g
2a810 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  etVarint    sqli
2a820 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65  te3GetVarint.#de
2a830 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20  fine putVarint  
2a840 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
2a850 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  nt...const char 
2a860 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66  *sqlite3IndexAff
2a870 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33  inityStr(sqlite3
2a880 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  *, Index*);.void
2a890 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66   sqlite3TableAff
2a8a0 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62  inity(Vdbe*, Tab
2a8b0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  le*, int);.char 
2a8c0 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66  sqlite3CompareAf
2a8d0 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
2a8e0 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a  pr, char aff2);.
2a8f0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
2a900 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20  AffinityOk(Expr 
2a910 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78  *pExpr, char idx
2a920 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72  _affinity);.char
2a930 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c   sqlite3TableCol
2a940 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62 6c  umnAffinity(Tabl
2a950 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73 71  e*,int);.char sq
2a960 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74  lite3ExprAffinit
2a970 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  y(Expr *pExpr);.
2a980 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36  int sqlite3Atoi6
2a990 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
2a9a0 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  64*, int, u8);.i
2a9b0 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48  nt sqlite3DecOrH
2a9c0 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68  exToI64(const ch
2a9d0 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64  ar*, i64*);.void
2a9e0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74   sqlite3ErrorWit
2a9f0 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69  hMsg(sqlite3*, i
2aa00 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
2aa10 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
2aa20 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
2aa30 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2aa40 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73  te3SystemError(s
2aa50 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
2aa60 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
2aa70 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
2aa80 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
2aa90 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
2aaa0 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
2aab0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
2aac0 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
2aad0 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
2aae0 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23  *, Token **);..#
2aaf0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2ab00 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29  E_NEED_ERR_NAME)
2ab10 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2ab20 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29  ite3ErrName(int)
2ab30 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20  ;.#endif..const 
2ab40 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
2ab50 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  Str(int);.int sq
2ab60 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
2ab70 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
2ab80 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2ab90 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69  FindCollSeq(sqli
2aba0 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e  te3*,u8 enc, con
2abb0 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43  st char*,int);.C
2abc0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
2abd0 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
2abe0 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
2abf0 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
2ac00 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
2ac10 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
2ac20 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
2ac30 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20  pExpr);.CollSeq 
2ac40 2a 73 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f  *sqlite3ExprNNCo
2ac50 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2ac60 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
2ac70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2ac80 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50  prCollSeqMatch(P
2ac90 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72  arse*,Expr*,Expr
2aca0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2acb0 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54  3ExprAddCollateT
2acc0 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72  oken(Parse *pPar
2acd0 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  se, Expr*, const
2ace0 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45   Token*, int);.E
2acf0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2ad00 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
2ad10 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
2ad20 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
2ad30 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
2ad40 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
2ad50 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
2ad60 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
2ad70 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
2ad80 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
2ad90 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
2ada0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2adb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
2adc0 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
2add0 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
2ade0 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
2adf0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2ae00 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
2ae10 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2ae20 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
2ae30 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2ae40 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
2ae50 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
2ae60 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
2ae70 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
2ae80 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
2ae90 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
2aea0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2aeb0 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
2aec0 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
2aed0 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
2aee0 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
2aef0 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69  ,u8);..const voi
2af00 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54  d *sqlite3ValueT
2af10 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ext(sqlite3_valu
2af20 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  e*, u8);.int sql
2af30 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73  ite3ValueBytes(s
2af40 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
2af50 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2af60 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69  ValueSetStr(sqli
2af70 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c  te3_value*, int,
2af80 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38   const void *,u8
2af90 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2afa0 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a            void(*
2afb0 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
2afc0 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e  sqlite3ValueSetN
2afd0 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ull(sqlite3_valu
2afe0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2aff0 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74  3ValueFree(sqlit
2b000 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69  e3_value*);.sqli
2b010 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74  te3_value *sqlit
2b020 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74  e3ValueNew(sqlit
2b030 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  e3 *);.#ifndef S
2b040 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
2b050 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
2b060 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
2b070 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
2b080 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a  nt, u8);.#endif.
2b090 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
2b0a0 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
2b0b0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
2b0c0 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
2b0d0 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
2b0e0 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
2b0f0 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
2b100 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
2b110 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
2b120 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
2b130 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2b140 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
2b150 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
2b160 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61  extern const cha
2b170 72 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41  r sqlite3StrBINA
2b180 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  RY[];.extern con
2b190 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2b1a0 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c   sqlite3UpperToL
2b1b0 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  ower[];.extern c
2b1c0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2b1d0 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d  ar sqlite3CtypeM
2b1e0 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ap[];.extern con
2b1f0 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33  st Token sqlite3
2b200 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74  IntTokens[];.ext
2b210 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73  ern SQLITE_WSD s
2b220 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
2b230 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
2b240 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65  g;.extern FuncDe
2b250 66 48 61 73 68 20 73 71 6c 69 74 65 33 42 75 69  fHash sqlite3Bui
2b260 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23  ltinFunctions;.#
2b270 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2b280 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e  IT_WSD.extern in
2b290 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67  t sqlite3Pending
2b2a0 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  Byte;.#endif.#en
2b2b0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2b2c0 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71  RootPageMoved(sq
2b2d0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
2b2e0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2b2f0 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73  ite3Reindex(Pars
2b300 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2b310 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2b320 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28  3AlterFunctions(
2b330 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2b340 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61  te3AlterRenameTa
2b350 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
2b360 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
2b370 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b  nt sqlite3GetTok
2b380 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  en(const unsigne
2b390 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29  d char *, int *)
2b3a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65  ;.void sqlite3Ne
2b3b0 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a  stedParse(Parse*
2b3c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
2b3d0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
2b3e0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
2b3f0 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65  tatements(sqlite
2b400 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2b410 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61  CodeSubselect(Pa
2b420 72 73 65 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e  rse*, Expr *, in
2b430 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2b440 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28  lite3SelectPrep(
2b450 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2b460 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
2b470 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2b480 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45  ctWrongNumTermsE
2b490 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72  rror(Parse *pPar
2b4a0 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a  se, Select *p);.
2b4b0 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68  int sqlite3Match
2b4c0 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63  SpanName(const c
2b4d0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2b4e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2b4f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
2b500 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2b510 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ExprNames(NameCo
2b520 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
2b530 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2b540 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28  veExprListNames(
2b550 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2b560 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  prList*);.void s
2b570 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
2b580 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  ectNames(Parse*,
2b590 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
2b5a0 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
2b5b0 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66  lite3ResolveSelf
2b5c0 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a  Reference(Parse*
2b5d0 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72  ,Table*,int,Expr
2b5e0 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
2b5f0 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2b600 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72  OrderGroupBy(Par
2b610 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  se*, Select*, Ex
2b620 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
2b630 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2b640 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
2b650 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
2b660 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2b670 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69  d sqlite3AlterFi
2b680 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61  nishAddColumn(Pa
2b690 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  rse *, Token *);
2b6a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2b6b0 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e  erBeginAddColumn
2b6c0 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
2b6d0 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  t *);.CollSeq *s
2b6e0 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71  qlite3GetCollSeq
2b6f0 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c  (Parse*, u8, Col
2b700 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68  lSeq *, const ch
2b710 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ar*);.char sqlit
2b720 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63  e3AffinityType(c
2b730 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29  onst char*, u8*)
2b740 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  ;.void sqlite3An
2b750 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f  alyze(Parse*, To
2b760 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ken*, Token*);.i
2b770 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65  nt sqlite3Invoke
2b780 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79  BusyHandler(Busy
2b790 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73  Handler*);.int s
2b7a0 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c  qlite3FindDb(sql
2b7b0 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
2b7c0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
2b7d0 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c  bName(sqlite3 *,
2b7e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2b7f0 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  int sqlite3Analy
2b800 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a  sisLoad(sqlite3*
2b810 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20  ,int iDB);.void 
2b820 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64  sqlite3DeleteInd
2b830 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65  exSamples(sqlite
2b840 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  3*,Index*);.void
2b850 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52   sqlite3DefaultR
2b860 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76  owEst(Index*);.v
2b870 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2b880 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73  terLikeFunctions
2b890 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
2b8a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69  .int sqlite3IsLi
2b8b0 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  keFunction(sqlit
2b8c0 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63  e3*,Expr*,int*,c
2b8d0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2b8e0 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76  te3SchemaClear(v
2b8f0 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a  oid *);.Schema *
2b900 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74  sqlite3SchemaGet
2b910 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65  (sqlite3 *, Btre
2b920 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
2b930 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73  3SchemaToIndex(s
2b940 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65  qlite3 *db, Sche
2b950 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  ma *);.KeyInfo *
2b960 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c  sqlite3KeyInfoAl
2b970 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
2b980 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2b990 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28  te3KeyInfoUnref(
2b9a0 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
2b9b0 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2b9c0 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  foRef(KeyInfo*);
2b9d0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2b9e0 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28  3KeyInfoOfIndex(
2b9f0 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b  Parse*, Index*);
2ba00 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2ba10 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33  EBUG.int sqlite3
2ba20 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62  KeyInfoIsWriteab
2ba30 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65  le(KeyInfo*);.#e
2ba40 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2ba50 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
2ba60 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
2ba70 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
2ba80 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29  id *,.  void (*)
2ba90 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2baa0 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2bab0 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
2bac0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2bad0 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
2bae0 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64  _value **), void
2baf0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2bb00 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65  text*),.  FuncDe
2bb10 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
2bb20 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71  uctor.);.void sq
2bb30 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71  lite3OomFault(sq
2bb40 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2bb50 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71  lite3OomClear(sq
2bb60 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2bb70 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69  ite3ApiExit(sqli
2bb80 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69  te3 *db, int);.i
2bb90 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  nt sqlite3OpenTe
2bba0 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65  mpDatabase(Parse
2bbb0 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
2bbc0 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53  e3StrAccumInit(S
2bbd0 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65  trAccum*, sqlite
2bbe0 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  3*, char*, int, 
2bbf0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2bc00 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
2bc10 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
2bc20 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
2bc30 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
2bc40 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63  mAppendAll(StrAc
2bc50 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
2bc60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2bc70 70 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63  ppendChar(StrAcc
2bc80 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63  um*,int,char);.c
2bc90 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
2bca0 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
2bcb0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
2bcc0 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
2bcd0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
2bce0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
2bcf0 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
2bd00 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
2bd10 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
2bd20 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
2bd30 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
2bd40 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
2bd50 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
2bd60 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
2bd70 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
2bd80 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
2bd90 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
2bda0 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
2bdb0 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65  t u8 *);..#ifnde
2bdc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  f SQLITE_OMIT_SU
2bdd0 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74  BQUERY.int sqlit
2bde0 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61  e3ExprCheckIN(Pa
2bdf0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65  rse*, Expr*);.#e
2be00 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2be10 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28  ite3ExprCheckIN(
2be20 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  x,y) SQLITE_OK.#
2be30 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2be40 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
2be50 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20  3_OR_STAT4.void 
2be60 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75  sqlite3AnalyzeFu
2be70 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
2be80 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  nt sqlite3Stat4P
2be90 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20  robeSetValue(.  
2bea0 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c    Parse*,Index*,
2beb0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a  UnpackedRecord**
2bec0 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  ,Expr*,int,int,i
2bed0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2bee0 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45  3Stat4ValueFromE
2bef0 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  xpr(Parse*, Expr
2bf00 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  *, u8, sqlite3_v
2bf10 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  alue**);.void sq
2bf20 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46  lite3Stat4ProbeF
2bf30 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  ree(UnpackedReco
2bf40 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  rd*);.int sqlite
2bf50 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c  3Stat4Column(sql
2bf60 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  ite3*, const voi
2bf70 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71  d*, int, int, sq
2bf80 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2bf90 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65  char sqlite3Inde
2bfa0 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  xColumnAffinity(
2bfb0 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
2bfc0 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
2bfd0 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
2bfe0 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
2bff0 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
2c000 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  r.*/.#ifndef SQL
2c010 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
2c020 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
2c030 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
2c040 2a 28 2a 29 28 75 36 34 29 29 3b 0a 20 20 76 6f  *(*)(u64));.  vo
2c050 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2c060 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
2c070 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e  (*)(void*));.#en
2c080 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2c090 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
2c0a0 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
2c0b0 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
2c0c0 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
2c0d0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
2c0e0 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
2c0f0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
2c100 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
2c110 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
2c120 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
2c130 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
2c140 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
2c150 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2c160 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
2c170 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2c180 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2c190 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
2c1a0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2c1b0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2c1c0 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
2c1d0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
2c1e0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
2c1f0 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
2c200 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2c210 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
2c220 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
2c230 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2c240 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
2c250 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
2c260 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
2c270 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2c280 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2c290 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
2c2a0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
2c2b0 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
2c2c0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
2c2d0 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
2c2e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2c2f0 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
2c300 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2c310 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
2c320 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2c330 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
2c340 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2c350 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20  3VtabLock(X).#  
2c360 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2c370 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
2c380 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2c390 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
2c3a0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2c3b0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c  VtabSavepoint(X,
2c3c0 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b   Y, Z) SQLITE_OK
2c3d0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2c3e0 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29  e3GetVTable(X,Y)
2c3f0 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23    ((VTable*)0).#
2c400 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
2c410 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
2c420 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
2c430 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2c440 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63  te3VtabDisconnec
2c450 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  t(sqlite3 *db, T
2c460 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74  able *p);.   int
2c470 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
2c480 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64  (sqlite3 *db, Vd
2c490 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  be*);.   int sql
2c4a0 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
2c4b0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2c4c0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2c4d0 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
2c4e0 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
2c4f0 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
2c500 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
2c510 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2c520 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
2c530 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2c540 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
2c550 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
2c560 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
2c570 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
2c580 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64  t, int);.   void
2c590 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2c5a0 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20  rtErrmsg(Vdbe*, 
2c5b0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a  sqlite3_vtab*);.
2c5c0 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
2c5d0 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
2c5e0 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  te3*, Table*);. 
2c5f0 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65    Module *sqlite
2c600 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c  3VtabCreateModul
2c610 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a  e(.     sqlite3*
2c620 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ,.     const cha
2c630 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73  r*,.     const s
2c640 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a  qlite3_module*,.
2c650 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20       void*,.    
2c660 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a   void(*)(void*).
2c670 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20     );.#  define 
2c680 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
2c690 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
2c6a0 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
2c6b0 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
2c6c0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  if.int sqlite3Vt
2c6d0 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
2c6e0 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75  Init(Parse*,Modu
2c6f0 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2c700 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
2c710 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65  ableClear(sqlite
2c720 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  3*,Module*);.voi
2c730 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
2c740 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
2c750 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
2c760 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
2c770 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2c780 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
2c790 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
2c7a0 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
2c7b0 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
2c7c0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2c7d0 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
2c7e0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2c7f0 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
2c800 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
2c810 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2c820 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
2c830 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2c840 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
2c850 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
2c860 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
2c870 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2c880 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2c890 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
2c8a0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2c8b0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
2c8c0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
2c8d0 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
2c8e0 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
2c8f0 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
2c900 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2c910 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
2c920 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
2c930 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
2c940 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
2c950 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2c960 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
2c970 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
2c980 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
2c990 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
2c9a0 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
2c9b0 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
2c9c0 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
2c9d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
2c9e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
2c9f0 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
2ca00 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
2ca10 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
2ca20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2ca30 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
2ca40 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
2ca50 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
2ca60 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
2ca70 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
2ca80 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2ca90 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
2caa0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
2cab0 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
2cac0 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
2cad0 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
2cae0 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
2caf0 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
2cb00 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
2cb10 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
2cb20 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
2cb30 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2cb40 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
2cb50 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2cb60 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2cb70 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
2cb80 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
2cb90 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
2cba0 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
2cbb0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
2cbc0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2cbd0 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
2cbe0 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
2cbf0 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
2cc00 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2cc10 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
2cc20 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
2cc30 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
2cc40 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
2cc50 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
2cc60 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
2cc70 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
2cc80 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
2cc90 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
2cca0 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
2ccb0 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  x,y).#endif../* 
2ccc0 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
2ccd0 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
2cce0 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
2ccf0 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
2cd00 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
2cd10 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
2cd20 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
2cd30 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
2cd40 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
2cd50 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
2cd60 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
2cd70 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
2cd80 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
2cd90 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2cda0 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
2cdb0 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
2cdc0 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
2cdd0 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
2cde0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
2cdf0 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
2ce00 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
2ce10 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69  lity is.** provi
2ce20 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
2ce30 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
2ce40 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
2ce50 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
2ce60 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
2ce70 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2ce80 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
2ce90 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2cea0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
2ceb0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2cec0 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
2ced0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2cee0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
2cef0 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
2cf00 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2cf10 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
2cf20 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2cf30 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
2cf40 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
2cf50 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
2cf60 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
2cf70 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
2cf80 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2cf90 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
2cfa0 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2cfb0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
2cfc0 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
2cfd0 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
2cfe0 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
2cff0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2d000 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
2d010 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
2d020 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
2d030 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2d040 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2d050 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
2d060 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2d070 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
2d080 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
2d090 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
2d0a0 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
2d0b0 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
2d0c0 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
2d0d0 73 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65  s(a)        0.#e
2d0e0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2d0f0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2d100 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
2d110 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
2d120 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
2d130 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c    int sqlite3FkL
2d140 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  ocateIndex(Parse
2d150 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49  *,Table*,FKey*,I
2d160 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23  ndex**,int**);.#
2d170 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2d180 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
2d190 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,b).  #define sq
2d1a0 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
2d1b0 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65  ex(a,b,c,d,e).#e
2d1c0 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
2d1d0 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
2d1e0 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
2d1f0 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
2d200 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
2d210 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2d220 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
2d230 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
2d240 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
2d250 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
2d260 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
2d270 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2d280 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
2d290 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
2d2a0 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
2d2b0 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
2d2c0 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
2d2d0 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
2d2e0 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20  E_UNTESTABLE.** 
2d2f0 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
2d300 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2d310 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76  E_UNTESTABLE.  v
2d320 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2d330 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
2d340 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
2d350 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
2d360 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
2d370 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2d380 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
2d390 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
2d3a0 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
2d3b0 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f  lloc().#endif../
2d3c0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  *.** Allowed ret
2d3d0 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
2d3e0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
2d3f0 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ex().*/.#define 
2d400 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
2d410 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61        1   /* Sea
2d420 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66  rch the rowid of
2d430 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64   the table */.#d
2d440 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
2d450 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20  PH          2   
2d460 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68  /* Search an eph
2d470 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f  emeral b-tree */
2d480 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2d490 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33  X_INDEX_ASC    3
2d4a0 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2d4b0 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a  ndex ASCENDING *
2d4c0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2d4d0 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20  EX_INDEX_DESC   
2d4e0 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  4   /* Existing 
2d4f0 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47  index DESCENDING
2d500 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2d510 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20  NDEX_NOOP       
2d520 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c    5   /* No tabl
2d530 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65  e available. Use
2d540 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a   comparisons */.
2d550 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c  /*.** Allowed fl
2d560 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20  ags for the 3rd 
2d570 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
2d580 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2d590 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  )..*/.#define IN
2d5a0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20  _INDEX_NOOP_OK  
2d5b0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b     0x0001  /* OK
2d5c0 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e   to return IN_IN
2d5d0 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66  DEX_NOOP */.#def
2d5e0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d  ine IN_INDEX_MEM
2d5f0 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20  BERSHIP  0x0002 
2d600 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2d610 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73  used for members
2d620 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66  hip test */.#def
2d630 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f  ine IN_INDEX_LOO
2d640 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  P        0x0004 
2d650 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2d660 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a  used as a loop *
2d670 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  /.int sqlite3Fin
2d680 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
2d690 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69  , Expr *, u32, i
2d6a0 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74  nt*, int*);..int
2d6b0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f   sqlite3JournalO
2d6c0 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20  pen(sqlite3_vfs 
2d6d0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2d6e0 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c   sqlite3_file *,
2d6f0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
2d700 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
2d710 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
2d720 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
2d730 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
2d740 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c  MIC_WRITE) \. ||
2d750 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2d760 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
2d770 4d 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74  MIC_WRITE).  int
2d780 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
2d790 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
2d7a0 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  le *);.#endif..i
2d7b0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2d7c0 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69  lIsInMemory(sqli
2d7d0 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f  te3_file *p);.vo
2d7e0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
2d7f0 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
2d800 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  _file *);..void 
2d810 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
2d820 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72  ightAndFlags(Par
2d830 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2d840 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45   *p);.#if SQLITE
2d850 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
2d860 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53  0.  int sqlite3S
2d870 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
2d880 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74  Select *);.  int
2d890 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2d8a0 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20  kHeight(Parse*, 
2d8b0 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  int);.#else.  #d
2d8c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
2d8d0 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29  ectExprHeight(x)
2d8e0 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2d8f0 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
2d900 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ght(x,y).#endif.
2d910 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34  .u32 sqlite3Get4
2d920 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b  byte(const u8*);
2d930 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74  .void sqlite3Put
2d940 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b  4byte(u8*, u32);
2d950 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2d960 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
2d970 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  TIFY.  void sqli
2d980 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
2d990 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20  cked(sqlite3 *, 
2d9a0 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f  sqlite3 *);.  vo
2d9b0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2d9c0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c  tionUnlocked(sql
2d9d0 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69  ite3 *db);.  voi
2d9e0 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2d9f0 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65  ionClosed(sqlite
2da00 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20  3 *db);.#else.  
2da10 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2da20 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
2da30 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
2da40 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2da50 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23  nUnlocked(x).  #
2da60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2da70 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78  nnectionClosed(x
2da80 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
2da90 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2daa0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2dab0 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63  erTrace(FILE*, c
2dac0 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  har *);.#endif..
2dad0 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
2dae0 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
2daf0 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
2db00 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
2db10 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
2db20 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
2db30 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
2db40 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
2db50 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
2db60 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
2db70 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
2db80 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
2db90 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  E.# define IOTRA
2dba0 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74  CE(A)  if( sqlit
2dbb0 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c  e3IoTrace ){ sql
2dbc0 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d  ite3IoTrace A; }
2dbd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
2dbe0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64  dbeIOTraceSql(Vd
2dbf0 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49  be*);.SQLITE_API
2dc00 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76   SQLITE_EXTERN v
2dc10 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43  oid (SQLITE_CDEC
2dc20 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63  L *sqlite3IoTrac
2dc30 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
2dc40 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
2dc50 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
2dc60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2dc70 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
2dc80 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2dc90 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
2dca0 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
2dcb0 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
2dcc0 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
2dcd0 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
2dce0 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
2dcf0 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
2dd00 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
2dd10 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
2dd20 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
2dd30 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
2dd40 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
2dd50 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2dd60 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
2dd70 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
2dd80 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
2dd90 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
2dda0 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
2ddb0 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
2ddc0 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
2ddd0 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
2dde0 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
2ddf0 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
2de00 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2de10 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
2de20 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
2de30 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
2de40 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
2de50 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
2de60 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
2de70 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
2de80 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
2de90 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2dea0 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
2deb0 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
2dec0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
2ded0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
2dee0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
2def0 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
2df00 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
2df10 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
2df20 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
2df30 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
2df40 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
2df50 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2df60 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
2df70 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
2df80 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
2df90 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
2dfa0 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
2dfb0 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
2dfc0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2dfd0 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
2dfe0 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
2dff0 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
2e000 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
2e010 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
2e020 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
2e030 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
2e040 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
2e050 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
2e060 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
2e070 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
2e080 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
2e090 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
2e0a0 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
2e0b0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
2e0c0 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
2e0d0 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
2e0e0 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
2e0f0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
2e100 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
2e110 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
2e120 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
2e130 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
2e140 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
2e150 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
2e160 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
2e170 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
2e180 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
2e190 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
2e1a0 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
2e1b0 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
2e1c0 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
2e1d0 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
2e1e0 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
2e1f0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
2e200 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
2e210 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
2e220 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
2e230 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
2e240 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
2e250 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
2e260 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
2e270 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
2e280 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
2e290 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
2e2a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
2e2b0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
2e2c0 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
2e2d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2e2e0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2e2f0 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
2e300 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2e310 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
2e320 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
2e330 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
2e340 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
2e350 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
2e360 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
2e370 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2e380 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70  E  0x02  /* Heap
2e390 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
2e3a0 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
2e3b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
2e3c0 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
2e3d0 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  04  /* Page cach
2e3e0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
2e3f0 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e  ../*.** Threadin
2e400 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23  g interface.*/.#
2e410 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  if SQLITE_MAX_WO
2e420 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69  RKER_THREADS>0.i
2e430 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
2e440 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72  Create(SQLiteThr
2e450 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76  ead**,void*(*)(v
2e460 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e  oid*),void*);.in
2e470 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a  t sqlite3ThreadJ
2e480 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64  oin(SQLiteThread
2e490 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64  *, void**);.#end
2e4a0 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
2e4b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42  SQLITE_ENABLE_DB
2e4c0 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65  PAGE_VTAB) || de
2e4d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
2e4e0 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  T).int sqlite3Db
2e4f0 70 61 67 65 52 65 67 69 73 74 65 72 28 73 71 6c  pageRegister(sql
2e500 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23  ite3*);.#endif.#
2e510 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2e520 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
2e530 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64  VTAB) || defined
2e540 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e  (SQLITE_TEST).in
2e550 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52  t sqlite3DbstatR
2e560 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
2e570 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
2e580 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72  qlite3ExprVector
2e590 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72  Size(Expr *pExpr
2e5a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2e5b0 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20  prIsVector(Expr 
2e5c0 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
2e5d0 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c  qlite3VectorFiel
2e5e0 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20  dSubexpr(Expr*, 
2e5f0 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
2e600 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72  te3ExprForVector
2e610 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70  Field(Parse*,Exp
2e620 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
2e630 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72  lite3VectorError
2e640 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Msg(Parse*, Expr
2e650 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  *);..#ifndef SQL
2e660 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
2e670 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e  OPTION_DIAGS.con
2e680 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65  st char **sqlite
2e690 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28  3CompileOptions(
2e6a0 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e  int *pnOpt);.#en
2e6b0 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  dif..#endif /* S
2e6c0 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a        QLITEINT_H */.