/ Hex Artifact Content
Login

Artifact 97525ef265cfca3cf39c87b73dd1e39f9260ee2f25fb0cee64bbbe26eb9f3888:


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 20 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 43  * SQLITE_DEBUG_C
3490: 4f 4c 55 4d 4e 43 41 43 48 45 20 69 73 20 73 79  OLUMNCACHE is sy
34a0: 6e 6f 6d 6f 75 73 20 77 69 74 68 20 53 51 4c 49  nomous with SQLI
34b0: 54 45 5f 44 45 42 55 47 2e 20 20 54 68 65 20 0a  TE_DEBUG.  The .
34c0: 2a 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 5f  ** SQLITE_DEBUG_
34d0: 43 4f 4c 55 4d 4e 43 41 43 48 45 20 73 79 6d 62  COLUMNCACHE symb
34e0: 6f 6c 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 74  ol only exists t
34f0: 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
3500: 65 6e 69 65 6e 74 0a 2a 2a 20 77 61 79 20 74 6f  enient.** way to
3510: 20 73 65 61 72 63 68 20 66 6f 72 20 61 6c 6c 20   search for all 
3520: 63 6f 64 65 20 74 68 61 74 20 64 65 61 6c 73 20  code that deals 
3530: 77 69 74 68 20 76 65 72 69 66 79 69 6e 67 20 63  with verifying c
3540: 6f 72 72 65 63 74 20 62 65 68 61 76 69 6f 72 0a  orrect behavior.
3550: 2a 2a 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ** of the column
3560: 20 63 61 63 68 65 2e 0a 2a 2f 0a 23 69 66 64 65   cache..*/.#ifde
3570: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
3580: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
3590: 45 42 55 47 5f 43 4f 4c 55 4d 4e 43 41 43 48 45  EBUG_COLUMNCACHE
35a0: 20 31 0a 23 65 6c 73 65 0a 23 20 75 6e 64 65 66   1.#else.# undef
35b0: 20 53 51 4c 49 54 5f 44 45 42 55 47 5f 43 4f 4c   SQLIT_DEBUG_COL
35c0: 55 4d 4e 43 41 43 48 45 0a 23 65 6e 64 69 66 0a  UMNCACHE.#endif.
35d0: 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51  ./*.** Enable SQ
35e0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
35f0: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20  AIN_COMMENTS if 
3600: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
3610: 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69  turned on..*/.#i
3620: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
3630: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3640: 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65  _COMMENTS) && de
3650: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
3660: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  UG).# define SQL
3670: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
3680: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65  IN_COMMENTS 1.#e
3690: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
36a0: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
36b0: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
36c0: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
36d0: 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f  ing.  When.** do
36e0: 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73  ing coverage tes
36f0: 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74  ting, the condit
3700: 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61  ion inside the a
3710: 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65  rgument to.** te
3720: 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62 65  stcase() must be
3730: 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20   evaluated both 
3740: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69  true and false i
3750: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
3760: 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f  t full branch co
3770: 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65 73  verage.  The tes
3780: 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73  tcase() macro is
3790: 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20   inserted.** to 
37a0: 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71  help ensure adeq
37b0: 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72 61  uate test covera
37c0: 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65  ge in places whe
37d0: 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e  re simple.** con
37e0: 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20  dition/decision 
37f0: 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61 64  coverage is inad
3800: 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61  equate.  For exa
3810: 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29  mple, testcase()
3820: 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20  .** can be used 
3830: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75  to make sure bou
3840: 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72 65  ndary values are
3850: 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a   tested.  For.**
3860: 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20   bitmask tests, 
3870: 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20 62  testcase() can b
3880: 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73  e used to make s
3890: 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20  ure each bit.** 
38a0: 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61  is significant a
38b0: 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73 74  nd used at least
38c0: 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63   once.  On switc
38d0: 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20  h statements.** 
38e0: 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63  where multiple c
38f0: 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73  ases go to the s
3900: 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ame block of cod
3910: 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a  e, testcase().**
3920: 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74   can insure that
3930: 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65   all cases are e
3940: 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a  valuated..**.*/.
3950: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f  #ifdef SQLITE_CO
3960: 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f  VERAGE_TEST.  vo
3970: 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61  id sqlite3Covera
3980: 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  ge(int);.# defin
3990: 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20 69  e testcase(X)  i
39a0: 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43  f( X ){ sqlite3C
39b0: 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f  overage(__LINE__
39c0: 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66  ); }.#else.# def
39d0: 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 0a  ine testcase(X).
39e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
39f0: 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f  e TESTONLY macro
3a00: 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c   is used to encl
3a10: 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65 63  ose variable dec
3a20: 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20  larations or.** 
3a30: 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f  other bits of co
3a40: 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65 64  de that are need
3a50: 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68  ed to support th
3a60: 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77  e arguments.** w
3a70: 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28 29  ithin testcase()
3a80: 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61   and assert() ma
3a90: 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  cros..*/.#if !de
3aa0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c  fined(NDEBUG) ||
3ab0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
3ac0: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23  COVERAGE_TEST).#
3ad0: 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59   define TESTONLY
3ae0: 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64  (X)  X.#else.# d
3af0: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3b00: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3b10: 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65  Sometimes we nee
3b20: 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74  d a small amount
3b30: 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61 73   of code such as
3b40: 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74   a variable init
3b50: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f  ialization.** to
3b60: 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74   setup for a lat
3b70: 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61 74  er assert() stat
3b80: 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f  ement.  We do no
3b90: 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65  t want this code
3ba0: 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68   to.** appear wh
3bb0: 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20 64  en assert() is d
3bc0: 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f  isabled.  The fo
3bd0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73  llowing macro is
3be0: 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73   therefore.** us
3bf0: 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68  ed to contain th
3c00: 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20  at setup code.  
3c10: 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79  The "VVA" acrony
3c20: 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  m stands for.** 
3c30: 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56  "Verification, V
3c40: 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41  alidation, and A
3c50: 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20  ccreditation".  
3c60: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
3c70: 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68  the.** code with
3c80: 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69  in VVA_ONLY() wi
3c90: 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69  ll only run duri
3ca0: 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20  ng verification 
3cb0: 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69  processes..*/.#i
3cc0: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64  fndef NDEBUG.# d
3cd0: 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58  efine VVA_ONLY(X
3ce0: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
3cf0: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a  ine VVA_ONLY(X).
3d00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
3d10: 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  e ALWAYS and NEV
3d20: 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75  ER macros surrou
3d30: 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  nd boolean expre
3d40: 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20  ssions which.** 
3d50: 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20  are intended to 
3d60: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 6f  always be true o
3d70: 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74  r false, respect
3d80: 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20  ively.  Such.** 
3d90: 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c  expressions coul
3da0: 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  d be omitted fro
3db0: 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c  m the code compl
3dc0: 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79  etely.  But they
3dd0: 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64  .** are included
3de0: 20 69 6e 20 61 20 66 65 77 20 63 61 73 65 73 20   in a few cases 
3df0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61  in order to enha
3e00: 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e  nce the resilien
3e10: 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20  ce.** of SQLite 
3e20: 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62 65  to unexpected be
3e30: 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65  havior - to make
3e40: 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d   the code "self-
3e50: 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22  healing".** or "
3e60: 64 75 63 74 69 6c 65 22 20 72 61 74 68 65 72 20  ductile" rather 
3e70: 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74  than being "brit
3e80: 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e  tle" and crashin
3e90: 67 20 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a  g at the first.*
3ea0: 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e  * hint of unplan
3eb0: 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a  ned behavior..**
3ec0: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
3ed0: 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  ds, ALWAYS and N
3ee0: 45 56 45 52 20 61 72 65 20 61 64 64 65 64 20 66  EVER are added f
3ef0: 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64  or defensive cod
3f00: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f  e..**.** When do
3f10: 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73  ing coverage tes
3f20: 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20  ting ALWAYS and 
3f30: 4e 45 56 45 52 20 61 72 65 20 68 61 72 64 2d 63  NEVER are hard-c
3f40: 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72  oded to.** be tr
3f50: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20  ue and false so 
3f60: 74 68 61 74 20 74 68 65 20 75 6e 72 65 61 63 68  that the unreach
3f70: 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73  able code they s
3f80: 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e  pecify will.** n
3f90: 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73  ot be counted as
3fa0: 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a   untested code..
3fb0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
3fc0: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3fd0: 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  EST) || defined(
3fe0: 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f  SQLITE_MUTATION_
3ff0: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41  TEST).# define A
4000: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 31  LWAYS(X)      (1
4010: 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52  ).# define NEVER
4020: 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23 65  (X)       (0).#e
4030: 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45  lif !defined(NDE
4040: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c  BUG).# define AL
4050: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28 58  WAYS(X)      ((X
4060: 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30  )?1:(assert(0),0
4070: 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  )).# define NEVE
4080: 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29 3f  R(X)       ((X)?
4090: 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29  (assert(0),1):0)
40a0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
40b0: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
40c0: 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  X).# define NEVE
40d0: 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a 23  R(X)       (X).#
40e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d  endif../*.** Som
40f0: 65 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61  e conditionals a
4100: 72 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  re optimizations
4110: 20 6f 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72   only.  In other
4120: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a   words, if the.*
4130: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61  * conditionals a
4140: 72 65 20 72 65 70 6c 61 63 65 64 20 77 69 74 68  re replaced with
4150: 20 61 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74   a constant 1 (t
4160: 72 75 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65  rue) or 0 (false
4170: 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f  ) then.** the co
4180: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
4190: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20  still obtained, 
41a0: 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e  though perhaps n
41b0: 6f 74 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a  ot as quickly..*
41c0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
41d0: 6e 67 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74  ng macros mark t
41e0: 68 65 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  hese optimizatio
41f0: 6e 73 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e  ns conditionals.
4200: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4210: 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f  SQLITE_MUTATION_
4220: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f  TEST).# define O
4230: 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45  K_IF_ALWAYS_TRUE
4240: 28 58 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e  (X)  (1).# defin
4250: 65 20 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46  e OK_IF_ALWAYS_F
4260: 41 4c 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73  ALSE(X) (0).#els
4270: 65 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46  e.# define OK_IF
4280: 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20  _ALWAYS_TRUE(X) 
4290: 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b   (X).# define OK
42a0: 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45  _IF_ALWAYS_FALSE
42b0: 28 58 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a  (X) (X).#endif..
42c0: 2f 2a 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f  /*.** Some mallo
42d0: 63 20 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f  c failures are o
42e0: 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20  nly possible if 
42f0: 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c  SQLITE_TEST_REAL
4300: 4c 4f 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a  LOC_STRESS is.**
4310: 20 64 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65   defined.  We ne
4320: 65 64 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61  ed to defend aga
4330: 69 6e 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75  inst those failu
4340: 72 65 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67  res when testing
4350: 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f   with.** SQLITE_
4360: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4370: 45 53 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27  ESS, but we don'
4380: 74 20 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61  t want the unrea
4390: 63 68 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a  chable branches.
43a0: 2a 2a 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d  ** during a norm
43b0: 61 6c 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66  al build.  The f
43c0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63  ollowing macro c
43d0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 69  an be used to di
43e0: 73 61 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74  sable tests.** t
43f0: 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 66  hat are always f
4400: 61 6c 73 65 20 65 78 63 65 70 74 20 77 68 65 6e  alse except when
4410: 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41   SQLITE_TEST_REA
4420: 4c 4c 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73  LLOC_STRESS is s
4430: 65 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  et..*/.#if defin
4440: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52  ed(SQLITE_TEST_R
4450: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23  EALLOC_STRESS).#
4460: 20 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f   define ONLY_IF_
4470: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58  REALLOC_STRESS(X
4480: 29 20 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65  )  (X).#elif !de
4490: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20  fined(NDEBUG).# 
44a0: 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52  define ONLY_IF_R
44b0: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29  EALLOC_STRESS(X)
44c0: 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30    ((X)?(assert(0
44d0: 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20  ),1):0).#else.# 
44e0: 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52  define ONLY_IF_R
44f0: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29  EALLOC_STRESS(X)
4500: 20 20 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a    (0).#endif../*
4510: 0a 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  .** Declarations
4520: 20 75 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e   used for tracin
4530: 67 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20  g the operating 
4540: 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65  system interface
4550: 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  s..*/.#if define
4560: 64 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f  d(SQLITE_FORCE_O
4570: 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69  S_TRACE) || defi
4580: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
4590: 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
45a0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
45b0: 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49   && SQLITE_OS_WI
45c0: 4e 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  N).  extern int 
45d0: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a  sqlite3OSTrace;.
45e0: 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45  # define OSTRACE
45f0: 28 58 29 20 20 20 20 20 20 20 20 20 20 69 66 28  (X)          if(
4600: 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20   sqlite3OSTrace 
4610: 29 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  ) sqlite3DebugPr
4620: 69 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20  intf X.# define 
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 0a 23 65 6c 73 65 0a 23 20 64 65 66  RACE.#else.# def
4650: 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23  ine OSTRACE(X).#
4660: 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48   undef  SQLITE_H
4670: 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e  AVE_OS_TRACE.#en
4680: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68  dif../*.** Is th
4690: 65 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65  e sqlite3ErrName
46a0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64  () function need
46b0: 65 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f  ed in the build?
46c0: 20 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20    Currently,.** 
46d0: 69 74 20 69 73 20 6e 65 65 64 65 64 20 62 79 20  it is needed by 
46e0: 22 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77  "mutex_w32.c" (w
46f0: 68 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20  hen debugging), 
4700: 22 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e  "os_win.c" (when
4710: 0a 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65  .** OSTRACE is e
4720: 6e 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20  nabled), and by 
4730: 73 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63  several "test*.c
4740: 22 20 66 69 6c 65 73 20 28 77 68 69 63 68 20 61  " files (which a
4750: 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75  re.** compiled u
4760: 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54  sing SQLITE_TEST
4770: 29 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  )..*/.#if define
4780: 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53  d(SQLITE_HAVE_OS
4790: 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e  _TRACE) || defin
47a0: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
47b0: 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
47c0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
47d0: 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  && SQLITE_OS_WIN
47e0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
47f0: 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a  E_NEED_ERR_NAME.
4800: 23 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53  #else.# undef  S
4810: 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
4820: 41 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AME.#endif../*.*
4830: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
4840: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
4850: 20 69 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65   is incompatible
4860: 20 77 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49   with SQLITE_OMI
4870: 54 5f 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66  T_EXPLAIN.*/.#if
4880: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4890: 45 58 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20  EXPLAIN.# undef 
48a0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
48b0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23  PLAIN_COMMENTS.#
48c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
48d0: 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65  urn true (non-ze
48e0: 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75 74  ro) if the input
48f0: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74   is an integer t
4900: 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  hat is too large
4910: 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32  .** to fit in 32
4920: 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63  -bits.  This mac
4930: 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
4940: 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73  e of various tes
4950: 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f  tcase().** macro
4960: 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  s to verify that
4970: 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64 20   we have tested 
4980: 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65  SQLite for large
4990: 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a  -file support..*
49a0: 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47  /.#define IS_BIG
49b0: 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e  _INT(X)  (((X)&~
49c0: 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (i64)0xffffffff)
49d0: 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  !=0)../*.** The 
49e0: 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29  macro unlikely()
49f0: 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20   is a hint that 
4a00: 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c  surrounds a bool
4a10: 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  ean.** expressio
4a20: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
4a30: 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20  y false.  Macro 
4a40: 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e  likely() surroun
4a50: 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20  ds.** a boolean 
4a60: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
4a70: 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e  is usually true.
4a80: 20 20 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f    These hints co
4a90: 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72  uld,.** in theor
4aa0: 79 2c 20 62 65 20 75 73 65 64 20 62 79 20 74 68  y, be used by th
4ab0: 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65  e compiler to ge
4ac0: 6e 65 72 61 74 65 20 62 65 74 74 65 72 20 63 6f  nerate better co
4ad0: 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65  de, but.** curre
4ae0: 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75  ntly they are ju
4af0: 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20  st comments for 
4b00: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a  human readers..*
4b10: 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79  /.#define likely
4b20: 28 58 29 20 20 20 20 28 58 29 0a 23 64 65 66 69  (X)    (X).#defi
4b30: 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20  ne unlikely(X)  
4b40: 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68  (X)..#include "h
4b50: 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ash.h".#include 
4b60: 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75  "parse.h".#inclu
4b70: 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e  de <stdio.h>.#in
4b80: 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e  clude <stdlib.h>
4b90: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e  .#include <strin
4ba0: 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61  g.h>.#include <a
4bb0: 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64  ssert.h>.#includ
4bc0: 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a  e <stddef.h>../*
4bd0: 0a 2a 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20  .** Use a macro 
4be0: 74 6f 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70  to replace memcp
4bf0: 79 28 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20  y() if compiled 
4c00: 77 69 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49  with SQLITE_INLI
4c10: 4e 45 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68  NE_MEMCPY..** Th
4c20: 69 73 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72  is allows better
4c30: 20 6d 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66   measurements of
4c40: 20 77 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20   where memcpy() 
4c50: 69 73 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e  is used when run
4c60: 6e 69 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69  ning.** cachegri
4c70: 6e 64 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61  nd.  But this ma
4c80: 63 72 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d  cro version of m
4c90: 65 6d 63 70 79 28 29 20 69 73 20 76 65 72 79 20  emcpy() is very 
4ca0: 73 6c 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68  slow so it.** sh
4cb0: 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64  ould not be used
4cc0: 20 69 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20   in production. 
4cd0: 20 54 68 69 73 20 69 73 20 61 20 70 65 72 66 6f   This is a perfo
4ce0: 72 6d 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65  rmance measureme
4cf0: 6e 74 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e  nt.** hack only.
4d00: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4d10: 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a  E_INLINE_MEMCPY.
4d20: 23 20 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28  # define memcpy(
4d30: 44 2c 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64  D,S,N) {char*xxd
4d40: 3d 28 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73  =(char*)(D);cons
4d50: 74 20 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73  t char*xxs=(cons
4d60: 74 20 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20  t char*)(S);\.  
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d80: 20 20 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e        int xxn=(N
4d90: 29 3b 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29  );while(xxn-->0)
4da0: 2a 28 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b  *(xxd++)=*(xxs++
4db0: 29 3b 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  );}.#endif../*.*
4dc0: 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66  * If compiling f
4dd0: 6f 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74  or a processor t
4de0: 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69  hat lacks floati
4df0: 6e 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74  ng point support
4e00: 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20  ,.** substitute 
4e10: 69 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61  integer for floa
4e20: 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69  ting-point.*/.#i
4e30: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
4e40: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
4e50: 23 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20  # define double 
4e60: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64  sqlite_int64.# d
4e70: 65 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69  efine float sqli
4e80: 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e  te_int64.# defin
4e90: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
4ea0: 45 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  E sqlite_int64.#
4eb0: 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42   ifndef SQLITE_B
4ec0: 49 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e  IG_DBL.#   defin
4ed0: 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  e SQLITE_BIG_DBL
4ee0: 20 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36   (((sqlite3_int6
4ef0: 34 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69  4)1)<<50).# endi
4f00: 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  f.# define SQLIT
4f10: 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
4f20: 46 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65  FUNCS 1.# define
4f30: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
4f40: 43 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c  CE 1.# undef SQL
4f50: 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e  ITE_MIXED_ENDIAN
4f60: 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75  _64BIT_FLOAT.# u
4f70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45  ndef SQLITE_HAVE
4f80: 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69  _ISNAN.#endif.#i
4f90: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4fa0: 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51  _DBL.# define SQ
4fb0: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65  LITE_BIG_DBL (1e
4fc0: 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  99).#endif../*.*
4fd0: 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  * OMIT_TEMPDB is
4fe0: 20 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c   set to 1 if SQL
4ff0: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ITE_OMIT_TEMPDB 
5000: 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30  is defined, or 0
5010: 0a 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48  .** afterward. H
5020: 61 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f  aving this macro
5030: 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61   allows us to ca
5040: 75 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c  use the C compil
5050: 65 72 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f  er.** to omit co
5060: 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20  de used by TEMP 
5070: 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d  tables without m
5080: 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61  essy #ifndef sta
5090: 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64  tements..*/.#ifd
50a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
50b0: 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d  EMPDB.#define OM
50c0: 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73  IT_TEMPDB 1.#els
50d0: 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  e.#define OMIT_T
50e0: 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a  EMPDB 0.#endif..
50f0: 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20  /*.** The "file 
5100: 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69  format" number i
5110: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
5120: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
5130: 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65   whenever.** the
5140: 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65   VDBE-level file
5150: 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e   format changes.
5160: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
5170: 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68  macros define th
5180: 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  e.** the default
5190: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72   file format for
51a0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61   new databases a
51b0: 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  nd the maximum f
51c0: 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68  ile format.** th
51d0: 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  at the library c
51e0: 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66  an read..*/.#def
51f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46  ine SQLITE_MAX_F
5200: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66  ILE_FORMAT 4.#if
5210: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
5220: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a  ULT_FILE_FORMAT.
5230: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5240: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
5250: 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  MAT 4.#endif../*
5260: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68  .** Determine wh
5270: 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61  ether triggers a
5280: 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20  re recursive by 
5290: 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63  default.  This c
52a0: 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64  an be.** changed
52b0: 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69   at run-time usi
52c0: 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  ng a pragma..*/.
52d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
52e0: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
52f0: 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69  _TRIGGERS.# defi
5300: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
5310: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
5320: 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  GERS 0.#endif../
5330: 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64  *.** Provide a d
5340: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
5350: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
5360: 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73  RE in case it is
5370: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a   not specified.*
5380: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  * on the command
5390: 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  -line.*/.#ifndef
53a0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
53b0: 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RE.# define SQLI
53c0: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a  TE_TEMP_STORE 1.
53d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
53e0: 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65   no value has be
53f0: 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  en provided for 
5400: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5410: 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66  R_THREADS, or if
5420: 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  .** SQLITE_TEMP_
5430: 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20  STORE is set to 
5440: 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d  3 (never use tem
5450: 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73  porary files), s
5460: 65 74 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f  et it.** to zero
5470: 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
5480: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c  TEMP_STORE==3 ||
5490: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
54a0: 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51  FE==0.# undef SQ
54b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
54c0: 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65  THREADS.# define
54d0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
54e0: 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e  ER_THREADS 0.#en
54f0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
5500: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5510: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5520: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5530: 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69  _THREADS 8.#endi
5540: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
5550: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5560: 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65  THREADS.# define
5570: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5580: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30  WORKER_THREADS 0
5590: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
55a0: 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
55b0: 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45  R_THREADS>SQLITE
55c0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
55d0: 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ADS.# undef SQLI
55e0: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
55f0: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5600: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5610: 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f  _THREADS SQLITE_
5620: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
5630: 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f  HREADS.#endif../
5640: 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74  *.** The default
5650: 20 69 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74   initial allocat
5660: 69 6f 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65  ion for the page
5670: 63 61 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67  cache when using
5680: 20 73 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67   separate.** pag
5690: 65 63 61 63 68 65 73 20 66 6f 72 20 65 61 63 68  ecaches for each
56a0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
56b0: 74 69 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76  tion.  A positiv
56c0: 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a  e number is the.
56d0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
56e0: 65 73 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20  es.  A negative 
56f0: 6e 75 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61  number N transla
5700: 74 69 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74  tions means that
5710: 20 61 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20   a buffer.** of 
5720: 2d 31 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73  -1024*N bytes is
5730: 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75   allocated and u
5740: 73 65 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20  sed for as many 
5750: 70 61 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c  pages as it will
5760: 20 68 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   hold..**.** The
5770: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
5780: 66 20 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73  f "20" was choos
5790: 65 6e 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74  en to minimize t
57a0: 68 65 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74  he run-time of t
57b0: 68 65 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31  he.** speedtest1
57c0: 20 74 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69   test program wi
57d0: 74 68 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68  th options: --sh
57e0: 72 69 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65  rink-memory --re
57f0: 70 72 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64  prepare.*/.#ifnd
5800: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
5810: 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a  T_PCACHE_INITSZ.
5820: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5830: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
5840: 4e 49 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a  NITSZ 20.#endif.
5850: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76  ./*.** Default v
5860: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c  alue for the SQL
5870: 49 54 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45  ITE_CONFIG_SORTE
5880: 52 52 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e  RREF_SIZE option
5890: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
58a0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54  ITE_DEFAULT_SORT
58b0: 45 52 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66  ERREF_SIZE.# def
58c0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
58d0: 4c 54 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a  LT_SORTERREF_SIZ
58e0: 45 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e  E 0x7fffffff.#en
58f0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
5900: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
5910: 6f 6e 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ons SQLITE_MMAP_
5920: 52 45 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a  READWRITE and .*
5930: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
5940: 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49  BATCH_ATOMIC_WRI
5950: 54 45 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61  TE are not compa
5960: 74 69 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61  tible with one a
5970: 6e 6f 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d  nother..** You m
5980: 75 73 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f  ust choose one o
5990: 72 20 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20  r the other (or 
59a0: 6e 65 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74  neither) but not
59b0: 20 62 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65   both..*/.#if de
59c0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41  fined(SQLITE_MMA
59d0: 50 5f 52 45 41 44 57 52 49 54 45 29 20 26 26 20  P_READWRITE) && 
59e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
59f0: 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
5a00: 49 43 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72  IC_WRITE).#error
5a10: 20 43 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68   Cannot use both
5a20: 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41   SQLITE_MMAP_REA
5a30: 44 57 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54  DWRITE and SQLIT
5a40: 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41  E_ENABLE_BATCH_A
5a50: 54 4f 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64  TOMIC_WRITE.#end
5a60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f  if../*.** GCC do
5a70: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68  es not define th
5a80: 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63  e offsetof() mac
5a90: 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65  ro so we'll have
5aa0: 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72   to do it.** our
5ab0: 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64  selves..*/.#ifnd
5ac0: 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66  ef offsetof.#def
5ad0: 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52  ine offsetof(STR
5ae0: 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28  UCTURE,FIELD) ((
5af0: 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53  int)((char*)&((S
5b00: 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49  TRUCTURE*)0)->FI
5b10: 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ELD)).#endif../*
5b20: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f  .** Macros to co
5b30: 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e  mpute minimum an
5b40: 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f  d maximum of two
5b50: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66   numbers..*/.#if
5b60: 6e 64 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e  ndef MIN.# defin
5b70: 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c  e MIN(A,B) ((A)<
5b80: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e  (B)?(A):(B)).#en
5b90: 64 69 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a  dif.#ifndef MAX.
5ba0: 23 20 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42  # define MAX(A,B
5bb0: 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28  ) ((A)>(B)?(A):(
5bc0: 42 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  B)).#endif../*.*
5bd0: 2a 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63  * Swap two objec
5be0: 74 73 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e  ts of type TYPE.
5bf0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50  .*/.#define SWAP
5c00: 28 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45  (TYPE,A,B) {TYPE
5c10: 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d   t=A; A=B; B=t;}
5c20: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f  ../*.** Check to
5c30: 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63   see if this mac
5c40: 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43  hine uses EBCDIC
5c50: 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65  .  (Yes, believe
5c60: 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74   it or.** not, t
5c70: 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d  here are still m
5c80: 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72  achines out ther
5c90: 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49  e that use EBCDI
5ca0: 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d  C.).*/.#if 'A' =
5cb0: 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e  = '\301'.# defin
5cc0: 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20  e SQLITE_EBCDIC 
5cd0: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
5ce0: 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a   SQLITE_ASCII 1.
5cf0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
5d00: 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20  tegers of known 
5d10: 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79  sizes.  These ty
5d20: 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61  pedefs might cha
5d30: 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63  nge for architec
5d40: 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74  tures.** where t
5d50: 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20  he sizes very.  
5d60: 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  Preprocessor mac
5d70: 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ros are availabl
5d80: 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a  e so that the.**
5d90: 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f   types can be co
5da0: 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66  nveniently redef
5db0: 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  ined at compile-
5dc0: 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73  type.  Like this
5dd0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  :.**.**         
5de0: 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59  cc '-DUINTPTR_TY
5df0: 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74  PE=long long int
5e00: 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ' ....*/.#ifndef
5e10: 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69   UINT32_TYPE.# i
5e20: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32  fdef HAVE_UINT32
5e30: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e40: 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f  T32_TYPE uint32_
5e50: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5e60: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
5e70: 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e  nsigned int.# en
5e80: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e90: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23  ef UINT16_TYPE.#
5ea0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
5eb0: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  16_T.#  define U
5ec0: 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31  INT16_TYPE uint1
5ed0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
5ee0: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
5ef0: 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20   unsigned short 
5f00: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
5f10: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36  if.#ifndef INT16
5f20: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
5f30: 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  VE_INT16_T.#  de
5f40: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
5f50: 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23  int16_t.# else.#
5f60: 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54    define INT16_T
5f70: 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  YPE short int.# 
5f80: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
5f90: 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a  ndef UINT8_TYPE.
5fa0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
5fb0: 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  T8_T.#  define U
5fc0: 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f  INT8_TYPE uint8_
5fd0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5fe0: 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e  ne UINT8_TYPE un
5ff0: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
6000: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
6010: 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69  ef INT8_TYPE.# i
6020: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54  fdef HAVE_INT8_T
6030: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
6040: 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c  TYPE int8_t.# el
6050: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  se.#  define INT
6060: 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68  8_TYPE signed ch
6070: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
6080: 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f  f.#ifndef LONGDO
6090: 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69  UBLE_TYPE.# defi
60a0: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
60b0: 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23  PE long double.#
60c0: 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71  endif.typedef sq
60d0: 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20  lite_int64 i64; 
60e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
60f0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6100: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c  r */.typedef sql
6110: 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20  ite_uint64 u64; 
6120: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
6130: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6140: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
6150: 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20  NT32_TYPE u32;  
6160: 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79           /* 4-by
6170: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
6180: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
6190: 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20  INT16_TYPE u16; 
61a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
61b0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
61c0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
61d0: 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20  INT16_TYPE i16; 
61e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
61f0: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
6200: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
6210: 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20  INT8_TYPE u8;   
6220: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
6230: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
6240: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
6250: 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20  INT8_TYPE i8;   
6260: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
6270: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
6280: 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51  ger */../*.** SQ
6290: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20  LITE_MAX_U32 is 
62a0: 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74  a u64 constant t
62b0: 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d  hat is the maxim
62c0: 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20  um u64 value.** 
62d0: 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72  that can be stor
62e0: 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68  ed in a u32 with
62f0: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61  out loss of data
6300: 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
6310: 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66  is 0x00000000fff
6320: 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61  fffff.  But beca
6330: 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66  use of quirks of
6340: 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c   some compilers,
6350: 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73   we.** have to s
6360: 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65  pecify the value
6370: 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74   in the less int
6380: 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68  uitive manner sh
6390: 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  own:.*/.#define 
63a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20  SQLITE_MAX_U32  
63b0: 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d  ((((u64)1)<<32)-
63c0: 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  1)../*.** The da
63d0: 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73  tatype used to s
63e0: 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f  tore estimates o
63f0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
6400: 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62  rows in a.** tab
6410: 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68  le or index.  Th
6420: 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  is is an unsigne
6430: 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20  d integer type. 
6440: 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a   For 99.9% of.**
6450: 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32   the world, a 32
6460: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20  -bit integer is 
6470: 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74  sufficient.  But
6480: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
6490: 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  r.** can be used
64a0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
64b0: 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a   if desired..*/.
64c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34  #ifdef SQLITE_64
64d0: 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64  BIT_STATS. typed
64e0: 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20  ef u64 tRowcnt; 
64f0: 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c     /* 64-bit onl
6500: 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61  y if requested a
6510: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a  t compile-time *
6520: 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66  /.#else. typedef
6530: 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20   u32 tRowcnt;   
6540: 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68   /* 32-bit is th
6550: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e  e default */.#en
6560: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d  dif../*.** Estim
6570: 61 74 65 64 20 71 75 61 6e 74 69 74 69 65 73 20  ated quantities 
6580: 75 73 65 64 20 66 6f 72 20 71 75 65 72 79 20 70  used for query p
6590: 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72  lanning are stor
65a0: 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20  ed as 16-bit.** 
65b0: 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72  logarithms.  For
65c0: 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65   quantity X, the
65d0: 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73   value stored is
65e0: 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68   10*log2(X).  Th
65f0: 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f  is.** gives a po
6600: 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20  ssible range of 
6610: 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78  values of approx
6620: 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20  imately 1.0e986 
6630: 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75  to 1e-986..** Bu
6640: 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61  t the allowed va
6650: 6c 75 65 73 20 61 72 65 20 22 67 72 61 69 6e 79  lues are "grainy
6660: 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61  ".  Not every va
6670: 6c 75 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  lue is represent
6680: 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61  able..** For exa
6690: 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73  mple, quantities
66a0: 20 31 36 20 61 6e 64 20 31 37 20 61 72 65 20 62   16 and 17 are b
66b0: 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65 64 20  oth represented 
66c0: 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f  by a LogEst.** o
66d0: 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20  f 40.  However, 
66e0: 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61  since LogEst qua
66f0: 6e 74 69 74 69 65 73 20 61 72 65 20 73 75 70 70  ntities are supp
6700: 6f 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61  ose to be estima
6710: 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63  tes,.** not exac
6720: 74 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69  t values, this i
6730: 6d 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f  mprecision is no
6740: 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a  t a problem..**.
6750: 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73  ** "LogEst" is s
6760: 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69  hort for "Logari
6770: 74 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e  thmic Estimate".
6780: 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a  .**.** Examples:
6790: 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20  .**      1 -> 0 
67a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30 20               20 
67b0: 2d 3e 20 34 33 20 20 20 20 20 20 20 20 20 20 31  -> 43          1
67c0: 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20  0000 -> 132.**  
67d0: 20 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20      2 -> 10     
67e0: 20 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36          25 -> 46
67f0: 20 20 20 20 20 20 20 20 20 20 32 35 30 30 30 20            25000 
6800: 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33  -> 146.**      3
6810: 20 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20 20   -> 16          
6820: 20 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20    100 -> 66     
6830: 20 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39     1000000 -> 19
6840: 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32  9.**      4 -> 2
6850: 30 20 20 20 20 20 20 20 20 20 20 20 31 30 30 30  0           1000
6860: 20 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31 30   -> 99        10
6870: 34 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20  48576 -> 200.** 
6880: 20 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20      10 -> 33    
6890: 20 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31         1024 -> 1
68a0: 30 30 20 20 20 20 34 32 39 34 39 36 37 32 39 36  00    4294967296
68b0: 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68   -> 320.**.** Th
68c0: 65 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20  e LogEst can be 
68d0: 6e 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69  negative to indi
68e0: 63 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20  cate fractional 
68f0: 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70  values..** Examp
6900: 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e  les:.**.**    0.
6910: 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20  5 -> -10        
6920: 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20     0.1 -> -33   
6930: 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d       0.0625 -> -
6940: 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  40.*/.typedef IN
6950: 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b  T16_TYPE LogEst;
6960: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
6970: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d  SQLITE_PTRSIZE m
6980: 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62  acro to the numb
6990: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
69a0: 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e   pointer.*/.#ifn
69b0: 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  def SQLITE_PTRSI
69c0: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
69d0: 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52  __SIZEOF_POINTER
69e0: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
69f0: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f  QLITE_PTRSIZE __
6a00: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6a10: 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28  .# elif defined(
6a20: 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66  i386)     || def
6a30: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20  ined(__i386__)  
6a40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49   || defined(_M_I
6a50: 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20  X86) ||    \.   
6a60: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41      defined(_M_A
6a70: 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  RM)   || defined
6a80: 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20  (__arm__)    || 
6a90: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23  defined(__x86).#
6aa0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ab0: 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73  _PTRSIZE 4.# els
6ac0: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
6ad0: 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20  ITE_PTRSIZE 8.# 
6ae0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
6af0: 20 54 68 65 20 75 70 74 72 20 74 79 70 65 20 69   The uptr type i
6b00: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
6b10: 74 65 67 65 72 20 6c 61 72 67 65 20 65 6e 6f 75  teger large enou
6b20: 67 68 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f 69  gh to hold a poi
6b30: 6e 74 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66 69  nter.*/.#if defi
6b40: 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f  ned(HAVE_STDINT_
6b50: 48 29 0a 20 20 74 79 70 65 64 65 66 20 75 69 6e  H).  typedef uin
6b60: 74 70 74 72 5f 74 20 75 70 74 72 3b 0a 23 65 6c  tptr_t uptr;.#el
6b70: 69 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  if SQLITE_PTRSIZ
6b80: 45 3d 3d 34 0a 20 20 74 79 70 65 64 65 66 20 75  E==4.  typedef u
6b90: 33 32 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a 20  32 uptr;.#else. 
6ba0: 20 74 79 70 65 64 65 66 20 75 36 34 20 75 70 74   typedef u64 upt
6bb0: 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
6bc0: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48   The SQLITE_WITH
6bd0: 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20  IN(P,S,E) macro 
6be0: 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
6bf0: 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74   pointer P point
6c00: 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e  s to.** somethin
6c10: 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63  g between S (inc
6c20: 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28 65  lusive) and E (e
6c30: 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a  xclusive)..**.**
6c40: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
6c50: 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20 61   S is a buffer a
6c60: 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65  nd E is a pointe
6c70: 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  r to the first b
6c80: 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65  yte after.** the
6c90: 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53   end of buffer S
6ca0: 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65  .  This macro re
6cb0: 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50 20  turns true if P 
6cc0: 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68  points to someth
6cd0: 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64  ing.** contained
6ce0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66 66   within the buff
6cf0: 65 72 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  er S..*/.#define
6d00: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6d10: 2c 53 2c 45 29 20 28 28 28 75 70 74 72 29 28 50  ,S,E) (((uptr)(P
6d20: 29 3e 3d 28 75 70 74 72 29 28 53 29 29 26 26 28  )>=(uptr)(S))&&(
6d30: 28 75 70 74 72 29 28 50 29 3c 28 75 70 74 72 29  (uptr)(P)<(uptr)
6d40: 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61  (E))).../*.** Ma
6d50: 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
6d60: 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61  e whether the ma
6d70: 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20  chine is big or 
6d80: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a  little endian,.*
6d90: 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  * and whether or
6da0: 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d   not that determ
6db0: 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74  ination is run-t
6dc0: 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74  ime or compile-t
6dd0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62  ime..**.** For b
6de0: 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c  est performance,
6df0: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
6e00: 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74 20  ade to guess at 
6e10: 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a  the byte-order.*
6e20: 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f  * using C-prepro
6e30: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20  cessor macros.  
6e40: 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75 63  If that is unsuc
6e50: 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a  cessful, or if.*
6e60: 2a 20 2d 44 53 51 4c 49 54 45 5f 42 59 54 45 4f  * -DSQLITE_BYTEO
6e70: 52 44 45 52 3d 30 20 69 73 20 73 65 74 2c 20 74  RDER=0 is set, t
6e80: 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69  hen byte-order i
6e90: 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20  s determined.** 
6ea0: 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a  at run-time..*/.
6eb0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42  #ifndef SQLITE_B
6ec0: 59 54 45 4f 52 44 45 52 0a 23 20 69 66 20 64 65  YTEORDER.# if de
6ed0: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
6ee0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
6ef0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
6f00: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6f10: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6f20: 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66  __x86_64) || def
6f30: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29  ined(__x86_64__)
6f40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58   || defined(_M_X
6f50: 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20  64)  ||    \.   
6f60: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44    defined(_M_AMD
6f70: 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  64) || defined(_
6f80: 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65  M_ARM)     || de
6f90: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6fa0: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
6fb0: 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20 20  ned(__arm__).#  
6fc0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6fd0: 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33 34  YTEORDER    1234
6fe0: 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28  .# elif defined(
6ff0: 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66  sparc)    || def
7000: 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23 20  ined(__ppc__).# 
7010: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
7020: 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32  BYTEORDER    432
7030: 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66  1.# else.#   def
7040: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
7050: 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66 0a 23  RDER 0.# endif.#
7060: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
7070: 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32 31  _BYTEORDER==4321
7080: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7090: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a  _BIGENDIAN    1.
70a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70b0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23  LITTLEENDIAN 0.#
70c0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
70d0: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
70e0: 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c 69 66  TE_UTF16BE.#elif
70f0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
7100: 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69 6e 65  R==1234.# define
7110: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
7120: 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20  N    0.# define 
7130: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
7140: 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53  IAN 1.# define S
7150: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
7160: 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  E  SQLITE_UTF16L
7170: 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65 66 20  E.#else.# ifdef 
7180: 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
7190: 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20  ION.  const int 
71a0: 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a  sqlite3one = 1;.
71b0: 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e 20  # else.  extern 
71c0: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
71d0: 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23 20  3one;.# endif.# 
71e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
71f0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
7200: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
7210: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
7220: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
7230: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
7240: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
7250: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
7260: 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51  UTF16NATIVE  (SQ
7270: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53  LITE_BIGENDIAN?S
7280: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51  QLITE_UTF16BE:SQ
7290: 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65  LITE_UTF16LE).#e
72a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73  ndif../*.** Cons
72b0: 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61  tants for the la
72c0: 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65  rgest and smalle
72d0: 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62  st possible 64-b
72e0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
72f0: 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  rs..** These mac
7300: 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  ros are designed
7310: 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74   to work correct
7320: 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69  ly on both 32-bi
7330: 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20  t and 64-bit.** 
7340: 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64  compilers..*/.#d
7350: 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e  efine LARGEST_IN
7360: 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66  T64  (0xffffffff
7370: 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66  |(((i64)0x7fffff
7380: 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e  ff)<<32)).#defin
7390: 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  e SMALLEST_INT64
73a0: 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41   (((i64)-1) - LA
73b0: 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a  RGEST_INT64)../*
73c0: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
73d0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
73e0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
73f0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
7400: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
7410: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
7420: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
7430: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
7440: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
7450: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
7460: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
7470: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
7480: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
7490: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
74a0: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
74b0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
74c0: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
74d0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
74e0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
74f0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
7500: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
7510: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
7520: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
7530: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
7540: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
7550: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
7560: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
7570: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
7580: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
7590: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
75a0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
75b0: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
75c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
75d0: 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34  ight return us 4
75e0: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a  -byte aligned.**
75f0: 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74   pointers.  In t
7600: 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76  hat case, only v
7610: 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69  erify 4-byte ali
7620: 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65  gnment..*/.#ifde
7630: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
7640: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23  ALIGNED_MALLOC.#
7650: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
7660: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
7670: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
7680: 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d  - (char*)0)&3)==
7690: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
76a0: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
76b0: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
76c0: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
76d0: 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e  r*)0)&7)==0).#en
76e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  dif../*.** Disab
76f0: 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66  le MMAP on platf
7700: 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73  orms where it is
7710: 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f   known to not wo
7720: 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rk.*/.#if define
7730: 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c  d(__OpenBSD__) |
7740: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e  | defined(__QNXN
7750: 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51  TO__).# undef SQ
7760: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7770: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
7780: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7790: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
77a0: 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d   Default maximum
77b0: 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20   size of memory 
77c0: 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d  used by memory-m
77d0: 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65  apped I/O in the
77e0: 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f   VFS.*/.#ifdef _
77f0: 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75  _APPLE__.# inclu
7800: 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74  de <TargetCondit
7810: 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66  ionals.h>.#endif
7820: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7830: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
7840: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e  if defined(__lin
7850: 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  ux__) \.  || def
7860: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20  ined(_WIN32) \. 
7870: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41   || (defined(__A
7880: 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e  PPLE__) && defin
7890: 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a  ed(__MACH__)) \.
78a0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73    || defined(__s
78b0: 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  un) \.  || defin
78c0: 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20  ed(__FreeBSD__) 
78d0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
78e0: 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20  _DragonFly__).# 
78f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
7900: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78  MAX_MMAP_SIZE 0x
7910: 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34  7fff0000  /* 214
7920: 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73  7418112 */.# els
7930: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
7940: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7950: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 0.# endif.#end
7960: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65  if../*.** The de
7970: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
7980: 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70  is zero on all p
7990: 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65  latforms.  Or, e
79a0: 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a  ven if a larger.
79b0: 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  ** default MMAP_
79c0: 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65  SIZE is specifie
79d0: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
79e0: 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  e, make sure tha
79f0: 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  t it does.** not
7a00: 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69   exceed the maxi
7a10: 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a  mum mmap size..*
7a20: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
7a30: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7a40: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
7a50: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7a60: 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 23 69  SIZE 0.#endif.#i
7a70: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
7a80: 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54  _MMAP_SIZE>SQLIT
7a90: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7aa0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  # undef SQLITE_D
7ab0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
7ac0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7ad0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7ae0: 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ZE SQLITE_MAX_MM
7af0: 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a  AP_SIZE.#endif..
7b00: 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f  /*.** Only one o
7b10: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7b20: 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f  STAT3 or SQLITE_
7b30: 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e  ENABLE_STAT4 can
7b40: 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20   be defined..** 
7b50: 50 72 69 6f 72 69 74 79 20 69 73 20 67 69 76 65  Priority is give
7b60: 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42  n to SQLITE_ENAB
7b70: 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69  LE_STAT4.  If ei
7b80: 74 68 65 72 20 61 72 65 20 64 65 66 69 6e 65 64  ther are defined
7b90: 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65  , also.** define
7ba0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7bb0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f  TAT3_OR_STAT4.*/
7bc0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
7bd0: 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e  NABLE_STAT4.# un
7be0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
7bf0: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
7c00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7c10: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
7c20: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
7c30: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7c40: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7c50: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7c60: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7c70: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
7c80: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
7c90: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7ca0: 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66  _OR_STAT4.#endif
7cb0: 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52  ../*.** SELECTTR
7cc0: 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c  ACE_ENABLED will
7cd0: 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72 20   be either 1 or 
7ce0: 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  0 depending on w
7cf0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a  hether or not.**
7d00: 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65 72   the Select quer
7d10: 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63  y generator trac
7d20: 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72  ing logic is tur
7d30: 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64  ned on..*/.#if d
7d40: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
7d50: 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45  ABLE_SELECTTRACE
7d60: 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  ).# define SELEC
7d70: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31  TTRACE_ENABLED 1
7d80: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
7d90: 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
7da0: 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LED 0.#endif../*
7db0: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
7dc0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
7dd0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
7de0: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67  callback for a g
7e10: 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64  iven sqlite hand
7e20: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  le..**.** The sq
7e30: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
7e40: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73   member of the s
7e50: 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e  qlite struct con
7e60: 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a  tains the busy.*
7e70: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  * callback for t
7e80: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
7e90: 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f  le. Each pager o
7ea0: 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71  pened via the sq
7eb0: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69  lite.** handle i
7ec0: 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74  s passed a point
7ed0: 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73  er to sqlite.bus
7ee0: 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75  yHandler. The bu
7ef0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
7f00: 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e  llback is curren
7f10: 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79  tly invoked only
7f20: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67   from within pag
7f30: 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  er.c..*/.typedef
7f40: 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64   struct BusyHand
7f50: 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b  ler BusyHandler;
7f60: 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64  .struct BusyHand
7f70: 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 42  ler {.  int (*xB
7f80: 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69 64  usyHandler)(void
7f90: 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65   *,int);  /* The
7fa0: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
7fb0: 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79 41  /.  void *pBusyA
7fc0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7fd0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
7fe0: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
7ff0: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
8000: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
8010: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
8020: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
8030: 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f  ach busy call */
8040: 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c 65  .  u8 bExtraFile
8050: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
8060: 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20       /* Include 
8070: 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73 20  sqlite3_file as 
8080: 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f 0a  callback arg */.
8090: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f  };../*.** Name o
80a0: 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74  f the master dat
80b0: 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68  abase table.  Th
80c0: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
80d0: 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20  e table.** is a 
80e0: 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68  special table th
80f0: 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d  at holds the nam
8100: 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74 65  es and attribute
8110: 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72  s of all.** user
8120: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
8130: 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ces..*/.#define 
8140: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20  MASTER_NAME     
8150: 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72    "sqlite_master
8160: 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d  ".#define TEMP_M
8170: 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c  ASTER_NAME  "sql
8180: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
8190: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74  ../*.** The root
81a0: 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73  -page of the mas
81b0: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
81c0: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  le..*/.#define M
81d0: 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20  ASTER_ROOT      
81e0: 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61   1../*.** The na
81f0: 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  me of the schema
8200: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
8210: 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28  ne SCHEMA_TABLE(
8220: 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50  x)  ((!OMIT_TEMP
8230: 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50  DB)&&(x==1)?TEMP
8240: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53  _MASTER_NAME:MAS
8250: 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a  TER_NAME)../*.**
8260: 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d   A convenience m
8270: 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e  acro that return
8280: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
8290: 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61  elements in.** a
82a0: 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66  n array..*/.#def
82b0: 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58 29  ine ArraySize(X)
82c0: 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f      ((int)(sizeo
82d0: 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d  f(X)/sizeof(X[0]
82e0: 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72  )))../*.** Deter
82f0: 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67 75  mine if the argu
8300: 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20  ment is a power 
8310: 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e  of two.*/.#defin
8320: 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58  e IsPowerOfTwo(X
8330: 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29 29  ) (((X)&((X)-1))
8340: 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ==0)../*.** The 
8350: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20  following value 
8360: 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72 20  as a destructor 
8370: 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c  means to use sql
8380: 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a  ite3DbFree()..**
8390: 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46 72   The sqlite3DbFr
83a0: 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71  ee() routine req
83b0: 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65  uires two parame
83c0: 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  ters instead of 
83d0: 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d  the.** one param
83e0: 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72 75  eter that destru
83f0: 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77  ctors normally w
8400: 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65  ant.  So we have
8410: 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a 2a   to introduce.**
8420: 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75   this magic valu
8430: 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  e that the code 
8440: 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20  knows to handle 
8450: 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e  differently.  An
8460: 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c  y.** pointer wil
8470: 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c  l work here as l
8480: 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73  ong as it is dis
8490: 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54  tinct from SQLIT
84a0: 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20  E_STATIC.** and 
84b0: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
84c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
84d0: 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28  ITE_DYNAMIC   ((
84e0: 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74  sqlite3_destruct
84f0: 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d  or_type)sqlite3M
8500: 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a  allocSize)../*.*
8510: 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d  * When SQLITE_OM
8520: 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65  IT_WSD is define
8530: 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  d, it means that
8540: 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74   the target plat
8550: 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  form does.** not
8560: 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c   support Writabl
8570: 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57  e Static Data (W
8580: 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62  SD) such as glob
8590: 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61  al and static va
85a0: 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20  riables..** All 
85b0: 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65  variables must e
85c0: 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20  ither be on the 
85d0: 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63  stack or dynamic
85e0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66  ally allocated f
85f0: 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e  rom.** the heap.
8600: 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e    When WSD is un
8610: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76  supported, the v
8620: 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74  ariable declarat
8630: 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a  ions scattered.*
8640: 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65  * throughout the
8650: 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73   SQLite code mus
8660: 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e  t become constan
8670: 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65  ts instead.  The
8680: 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d   SQLITE_WSD.** m
8690: 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
86a0: 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20   this purpose.  
86b0: 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72  And instead of r
86c0: 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76  eferencing the v
86d0: 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63  ariable.** direc
86e0: 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20  tly, we use its 
86f0: 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65  constant as a ke
8700: 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20  y to lookup the 
8710: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
8720: 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61  ed.** buffer tha
8730: 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72  t holds real var
8740: 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73  iable.  The cons
8750: 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65  tant is also the
8760: 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20   initializer.** 
8770: 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  for the run-time
8780: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
8790: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  r..**.** In the 
87a0: 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65  usual case where
87b0: 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65   WSD is supporte
87c0: 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53  d, the SQLITE_WS
87d0: 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20  D and GLOBAL.** 
87e0: 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f  macros become no
87f0: 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65  -ops and have ze
8800: 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69  ro performance i
8810: 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66  mpact..*/.#ifdef
8820: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
8830: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
8840: 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64  E_WSD const.  #d
8850: 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76  efine GLOBAL(t,v
8860: 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f  ) (*(t*)sqlite3_
8870: 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29  wsd_find((void*)
8880: 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29  &(v), sizeof(v))
8890: 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
88a0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20  te3GlobalConfig 
88b0: 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71  GLOBAL(struct Sq
88c0: 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c  lite3Config, sql
88d0: 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e  ite3Config).  in
88e0: 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e  t sqlite3_wsd_in
88f0: 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29  it(int N, int J)
8900: 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ;.  void *sqlite
8910: 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20  3_wsd_find(void 
8920: 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73  *K, int L);.#els
8930: 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  e.  #define SQLI
8940: 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  TE_WSD.  #define
8950: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20   GLOBAL(t,v) v. 
8960: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
8970: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c  GlobalConfig sql
8980: 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69  ite3Config.#endi
8990: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
89a0: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
89b0: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
89c0: 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e  ss compiler warn
89d0: 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d  ings and to.** m
89e0: 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20  ake it clear to 
89f0: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68  human readers wh
8a00: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
8a10: 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62  rameter is delib
8a20: 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74 20  erately.** left 
8a30: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
8a40: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
8a50: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
8a60: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
8a70: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
8a80: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
8a90: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
8aa0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 0a  For example the.
8ab0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
8ac0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
8ad0: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
8ae0: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
8af0: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
8b00: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
8b10: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
8b20: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
8b30: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
8b40: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
8b50: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
8b60: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
8b70: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
8b80: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
8b90: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
8ba0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
8bb0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
8bc0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
8bd0: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
8be0: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
8bf0: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
8c00: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
8c10: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
8c20: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
8c30: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
8c40: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
8c50: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
8c60: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
8c70: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
8c80: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
8c90: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
8ca0: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
8cb0: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
8cc0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
8cd0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
8ce0: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
8cf0: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
8d00: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
8d10: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
8d20: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
8d30: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
8d40: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
8d50: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
8d60: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
8d70: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
8d80: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
8d90: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
8da0: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
8db0: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
8dc0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
8dd0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
8de0: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
8df0: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
8e00: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
8e10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e20: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
8e30: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
8e40: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
8e50: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
8e60: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
8e70: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
8e80: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
8e90: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
8ea0: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
8eb0: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
8ec0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
8ed0: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
8ee0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8ef0: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
8f00: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8f10: 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74  uct FKey FKey;.t
8f20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8f30: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e  ncDestructor Fun
8f40: 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70  cDestructor;.typ
8f50: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8f60: 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70  Def FuncDef;.typ
8f70: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8f80: 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48  DefHash FuncDefH
8f90: 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ash;.typedef str
8fa0: 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73  uct IdList IdLis
8fb0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8fc0: 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74  t Index Index;.t
8fd0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
8fe0: 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53  dexSample IndexS
8ff0: 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  ample;.typedef s
9000: 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b  truct KeyClass K
9010: 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66  eyClass;.typedef
9020: 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20   struct KeyInfo 
9030: 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  KeyInfo;.typedef
9040: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
9050: 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70  e Lookaside;.typ
9060: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
9070: 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73  asideSlot Lookas
9080: 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66  ideSlot;.typedef
9090: 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d   struct Module M
90a0: 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  odule;.typedef s
90b0: 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
90c0: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74  t NameContext;.t
90d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61  ypedef struct Pa
90e0: 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64  rse Parse;.typed
90f0: 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70 64  ef struct PreUpd
9100: 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74  ate PreUpdate;.t
9110: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
9120: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
9130: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
9140: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
9150: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
9160: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
9170: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
9180: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9190: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
91a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51  ypedef struct SQ
91b0: 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74  LiteThread SQLit
91c0: 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66  eThread;.typedef
91d0: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65   struct SelectDe
91e0: 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74  st SelectDest;.t
91f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72  ypedef struct Sr
9200: 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74  cList SrcList;.t
9210: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71  ypedef struct sq
9220: 6c 69 74 65 33 5f 73 74 72 20 53 74 72 41 63 63  lite3_str StrAcc
9230: 75 6d 3b 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20  um; /* Internal 
9240: 61 6c 69 61 73 20 66 6f 72 20 73 71 6c 69 74 65  alias for sqlite
9250: 33 5f 73 74 72 20 2a 2f 0a 74 79 70 65 64 65 66  3_str */.typedef
9260: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
9270: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9280: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
9290: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
92a0: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
92b0: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
92c0: 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65  uct TreeView Tre
92d0: 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73  eView;.typedef s
92e0: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
92f0: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
9300: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
9310: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
9320: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
9330: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
9340: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
9350: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
9360: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
9370: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9380: 74 20 55 70 73 65 72 74 20 55 70 73 65 72 74 3b  t Upsert Upsert;
9390: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
93a0: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
93b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
93c0: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
93d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
93e0: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
93f0: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
9400: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
9410: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9420: 57 69 6e 64 6f 77 20 57 69 6e 64 6f 77 3b 0a 74  Window Window;.t
9430: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
9440: 74 68 20 57 69 74 68 3b 0a 0a 0a 2f 2a 0a 2a 2a  th With;.../*.**
9450: 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
9460: 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
9470: 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
9480: 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
9490: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
94a0: 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
94b0: 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
94c0: 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
94d0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
94e0: 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
94f0: 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
9500: 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
9510: 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
9520: 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
9530: 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
9540: 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
9550: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 42  .#ifdef SQLITE_B
9560: 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74 79  ITMASK_TYPE.  ty
9570: 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54  pedef SQLITE_BIT
9580: 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61 73  MASK_TYPE Bitmas
9590: 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  k;.#else.  typed
95a0: 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a  ef u64 Bitmask;.
95b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
95c0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  e number of bits
95d0: 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20   in a Bitmask.  
95e0: 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74  "BMS" means "Bit
95f0: 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23  Mask Size"..*/.#
9600: 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e  define BMS  ((in
9610: 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73  t)(sizeof(Bitmas
9620: 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  k)*8))../*.** A 
9630: 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  bit in a Bitmask
9640: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  .*/.#define MASK
9650: 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d  BIT(n)   (((Bitm
9660: 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  ask)1)<<(n)).#de
9670: 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e  fine MASKBIT32(n
9680: 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e  ) (((unsigned in
9690: 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69  t)1)<<(n)).#defi
96a0: 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20 20  ne ALLBITS      
96b0: 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f  ((Bitmask)-1)../
96c0: 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74  * A VList object
96d0: 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69   records a mappi
96e0: 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d  ng between param
96f0: 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f  eters/variables/
9700: 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20  wildcards.** in 
9710: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
9720: 74 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c  t (such as $abc,
9730: 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20   @pqr, or :xyz) 
9740: 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a  and the integer.
9750: 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  ** variable numb
9760: 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
9770: 74 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65  th that paramete
9780: 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d  r.  See the form
9790: 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a  at description.*
97a0: 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  * on the sqlite3
97b0: 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69  VListAdd() routi
97c0: 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f  ne for more info
97d0: 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73  rmation.  A VLis
97e0: 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a  t is really.** j
97f0: 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20  ust an array of 
9800: 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70  integers..*/.typ
9810: 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a  edef int VList;.
9820: 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75  ./*.** Defer sou
9830: 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64  rcing vdbe.h and
9840: 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61   btree.h until a
9850: 66 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e  fter the "u8" an
9860: 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65  d.** "BusyHandle
9870: 72 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62  r" typedefs. vdb
9880: 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65  e.h also require
9890: 73 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f  s a few of the o
98a0: 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72  paque.** pointer
98b0: 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e   types (i.e. Fun
98c0: 63 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62  cDef) defined ab
98d0: 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ove..*/.#include
98e0: 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c   "btree.h".#incl
98f0: 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e  ude "vdbe.h".#in
9900: 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a  clude "pager.h".
9910: 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65  #include "pcache
9920: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73  .h".#include "os
9930: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75  .h".#include "mu
9940: 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53  tex.h"../* The S
9950: 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41  QLITE_EXTRA_DURA
9960: 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BLE compile-time
9970: 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20   option used to 
9980: 73 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a  set the default.
9990: 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73  ** synchronous s
99a0: 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e  etting to EXTRA.
99b0: 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65    It is no longe
99c0: 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a  r supported..*/.
99d0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58  #ifdef SQLITE_EX
99e0: 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61  TRA_DURABLE.# wa
99f0: 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45  rning Use SQLITE
9a00: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9a10: 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f  NOUS=3 instead o
9a20: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
9a30: 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20  URABLE.# define 
9a40: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9a50: 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e  YNCHRONOUS 3.#en
9a60: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
9a70: 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c  lt synchronous l
9a80: 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  evels..**.** Not
9a90: 65 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74  e that (for hist
9aa0: 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74  orcal reasons) t
9ab0: 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f  he PAGER_SYNCHRO
9ac0: 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69  NOUS_* macros di
9ad0: 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  ffer.** from the
9ae0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9af0: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75  SYNCHRONOUS valu
9b00: 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20  e by 1..**.**   
9b10: 20 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59          PAGER_SY
9b20: 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20  NCHRONOUS       
9b30: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9b40: 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20  OUS.**   OFF    
9b50: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b70: 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20   0.**   NORMAL  
9b80: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
9b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ba0: 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20  1.**   FULL     
9bb0: 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20       3          
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
9bd0: 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20  .**   EXTRA     
9be0: 20 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20      4           
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a                3.
9c00: 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d  **.** The "PRAGM
9c10: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73  A synchronous" s
9c20: 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73  tatement also us
9c30: 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65  es the zero-base
9c40: 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e  d numbers..** In
9c50: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
9c60: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9c70: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
9c80: 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69  r all external i
9c90: 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64  nterfaces.** and
9ca0: 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76   the one-based v
9cb0: 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69  alues are used i
9cc0: 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69  nternally..*/.#i
9cd0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
9ce0: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9cf0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9d00: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9d10: 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69  NOUS 2.#endif.#i
9d20: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
9d30: 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f  AULT_WAL_SYNCHRO
9d40: 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51  NOUS.# define SQ
9d50: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c  LITE_DEFAULT_WAL
9d60: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c  _SYNCHRONOUS SQL
9d70: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9d80: 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a  HRONOUS.#endif..
9d90: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
9da0: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
9db0: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
9dc0: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
9dd0: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
9de0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
9df0: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
9e00: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
9e10: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
9e20: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
9e30: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
9e40: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
9e50: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
9e60: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
9e70: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
9e80: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
9e90: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
9ea0: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
9eb0: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
9ec0: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
9ed0: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
9ee0: 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20  r *zDbSName;    
9ef0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
9f00: 73 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68  s database. (sch
9f10: 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69  ema name, not fi
9f20: 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72  lename) */.  Btr
9f30: 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
9f40: 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20    /* The B*Tree 
9f50: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68  structure for th
9f60: 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  is database file
9f70: 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f   */.  u8 safety_
9f80: 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f  level;     /* Ho
9f90: 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20  w aggressive at 
9fa0: 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20  syncing data to 
9fb0: 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79  disk */.  u8 bSy
9fc0: 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ncSet;         /
9fd0: 2a 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d  * True if "PRAGM
9fe0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22  A synchronous=N"
9ff0: 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f   has been run */
a000: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
a010: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
a020: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
a030: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
a040: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
a050: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
a060: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
a070: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
a080: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
a090: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
a0a0: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
a0b0: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
a0c0: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
a0d0: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
a0e0: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
a0f0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
a100: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
a110: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
a120: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
a130: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
a140: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
a150: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
a160: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
a170: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
a180: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
a190: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
a1a0: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
a1b0: 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20  t..**.** Schema 
a1c0: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f  objects are auto
a1d0: 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f  matically deallo
a1e0: 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c  cated when the l
a1f0: 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a  ast Btree that.*
a200: 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65  * references the
a210: 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  m is destroyed. 
a220: 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d    The TEMP Schem
a230: 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72  a is manually fr
a240: 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  eed by.** sqlite
a250: 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20  3_close()..*.** 
a260: 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65  A thread must be
a270: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
a280: 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f   on the correspo
a290: 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f  nding Btree in o
a2a0: 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73  rder.** to acces
a2b0: 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74  s Schema content
a2c0: 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20  .  This implies 
a2d0: 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20  that the thread 
a2e0: 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20  must also be.** 
a2f0: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
a300: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63  on the sqlite3 c
a310: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
a320: 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20  r that owns the 
a330: 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20  Btree..** For a 
a340: 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c  TEMP Schema, onl
a350: 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  y the connection
a360: 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72   mutex is requir
a370: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63  ed..*/.struct Sc
a380: 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68  hema {.  int sch
a390: 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a  ema_cookie;   /*
a3a0: 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   Database schema
a3b0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
a3c0: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
a3d0: 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69  .  int iGenerati
a3e0: 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72  on;     /* Gener
a3f0: 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20  ation counter.  
a400: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
a410: 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a   each change */.
a420: 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20    Hash tblHash; 
a430: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61         /* All ta
a440: 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  bles indexed by 
a450: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69  name */.  Hash i
a460: 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  dxHash;        /
a470: 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e  * All (named) in
a480: 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79  dices indexed by
a490: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
a4a0: 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20  trigHash;       
a4b0: 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  /* All triggers 
a4c0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a4d0: 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61  */.  Hash fkeyHa
a4e0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
a4f0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79   foreign keys by
a500: 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
a510: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c  e name */.  Tabl
a520: 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20  e *pSeqTab;     
a530: 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73   /* The sqlite_s
a540: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73  equence table us
a550: 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d  ed by AUTOINCREM
a560: 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65  ENT */.  u8 file
a570: 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a  _format;      /*
a580: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76   Schema format v
a590: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  ersion for this 
a5a0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  file */.  u8 enc
a5b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
a5c0: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
a5d0: 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74  used by this dat
a5e0: 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73  abase */.  u16 s
a5f0: 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20  chemaFlags;     
a600: 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61  /* Flags associa
a610: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63  ted with this sc
a620: 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61  hema */.  int ca
a630: 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f  che_size;      /
a640: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
a650: 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20  s to use in the 
a660: 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cache */.};../*.
a670: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
a680: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
a690: 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
a6a0: 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
a6b0: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
a6c0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
a6d0: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
a6e0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
a6f0: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
a700: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a710: 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
a720: 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f  fine DbHasAnyPro
a730: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28  perty(D,I,P)  ((
a740: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
a750: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
a760: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
a770: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
a780: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
a790: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a7a0: 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29  schemaFlags|=(P)
a7b0: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
a7c0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a7d0: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
a7e0: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
a7f0: 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
a800: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
a810: 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d  or the DB.pSchem
a820: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
a830: 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68  **.** The DB_Sch
a840: 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69  emaLoaded flag i
a850: 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20  s set after the 
a860: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
a870: 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64  has been.** read
a880: 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68   into internal h
a890: 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ash tables..**.*
a8a0: 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  * DB_UnresetView
a8b0: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65  s means that one
a8c0: 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68   or more views h
a8d0: 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ave column names
a8e0: 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65   that.** have be
a8f0: 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20  en filled out.  
a900: 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  If the schema ch
a910: 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c  anges, these col
a920: 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a  umn names might.
a930: 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73  ** changes and s
a940: 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20  o the view will 
a950: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74  need to be reset
a960: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ..*/.#define DB_
a970: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20  SchemaLoaded    
a980: 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73  0x0001  /* The s
a990: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c  chema has been l
a9a0: 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  oaded */.#define
a9b0: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
a9c0: 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53      0x0002  /* S
a9d0: 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64  ome views have d
a9e0: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
a9f0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  mes */.#define D
aa00: 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20  B_Empty         
aa10: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65    0x0004  /* The
aa20: 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28   file is empty (
aa30: 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20  length 0 bytes) 
aa40: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 52 65  */.#define DB_Re
aa50: 73 65 74 57 61 6e 74 65 64 20 20 20 20 20 30 78  setWanted     0x
aa60: 30 30 30 38 20 20 2f 2a 20 52 65 73 65 74 20 74  0008  /* Reset t
aa70: 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e  he schema when n
aa80: 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a 2f  SchemaLock==0 */
aa90: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
aaa0: 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  er of different 
aab0: 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20  kinds of things 
aac0: 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69  that can be limi
aad0: 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65  ted.** using the
aae0: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29   sqlite3_limit()
aaf0: 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23   interface..*/.#
ab00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
ab10: 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49  LIMIT (SQLITE_LI
ab20: 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MIT_WORKER_THREA
ab30: 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f  DS+1)../*.** Loo
ab40: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73  kaside malloc is
ab50: 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d   a set of fixed-
ab60: 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61  size buffers tha
ab70: 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a  t can be used.**
ab80: 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c   to satisfy smal
ab90: 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f  l transient memo
aba0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
abb0: 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63  quests for objec
abc0: 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
abd0: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
abe0: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
abf0: 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65  ection.  The use
ac00: 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65   of.** lookaside
ac10: 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73   malloc provides
ac20: 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70   a significant p
ac30: 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e  erformance enhan
ac40: 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f  cement.** (appro
ac50: 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69  x 10%) by avoidi
ac60: 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c  ng numerous mall
ac70: 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73  oc/free requests
ac80: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
ac90: 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  * SQL statements
aca0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b  ..**.** The Look
acb0: 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20  aside structure 
acc0: 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74  holds configurat
acd0: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
ace0: 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f  about the.** loo
acf0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75  kaside malloc su
ad00: 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61  bsystem.  Each a
ad10: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
ad20: 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a  allocation in.**
ad30: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73   the lookaside s
ad40: 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72  ubsystem is stor
ad50: 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed on a linked l
ad60: 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65  ist of Lookaside
ad70: 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e  Slot.** objects.
ad80: 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  .**.** Lookaside
ad90: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
ada0: 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f   only allowed fo
adb0: 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61  r objects that a
adc0: 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a  re associated.**
add0: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
ade0: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
adf0: 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20  ection.  Hence, 
ae00: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
ae10: 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20  on cannot.** be 
ae20: 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73  stored in lookas
ae30: 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73  ide because in s
ae40: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
ae50: 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f   the schema info
ae60: 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68  rmation.** is sh
ae70: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
ae80: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
ae90: 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72  tions.  Therefor
aea0: 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  e, while parsing
aeb0: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  .** schema infor
aec0: 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b  mation, the Look
aed0: 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66  aside.bEnabled f
aee0: 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73  lag is cleared s
aef0: 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73  o that.** lookas
af00: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
af10: 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20  are not used to 
af20: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63  construct the sc
af30: 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f  hema objects..*/
af40: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
af50: 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62  e {.  u32 bDisab
af60: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
af70: 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68   Only operate th
af80: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e  e lookaside when
af90: 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73   zero */.  u16 s
afa0: 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  z;              
afb0: 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
afc0: 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74  ch buffer in byt
afd0: 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c  es */.  u8 bMall
afe0: 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  oced;           
aff0: 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72  /* True if pStar
b000: 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
b010: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
b020: 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f 74 3b   */.  u32 nSlot;
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b040: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b 61   Number of looka
b050: 73 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c 6f 63  side slots alloc
b060: 61 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 61 6e  ated */.  u32 an
b070: 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20  Stat[3];        
b080: 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31    /* 0: hits.  1
b090: 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20  : size misses.  
b0a0: 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a  2: full misses *
b0b0: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
b0c0: 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a 20 4c  t *pInit;   /* L
b0d0: 69 73 74 20 6f 66 20 62 75 66 66 65 72 73 20 6e  ist of buffers n
b0e0: 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
b0f0: 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64  ed */.  Lookasid
b100: 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20  eSlot *pFree;   
b110: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c  /* List of avail
b120: 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  able buffers */.
b130: 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20    void *pStart; 
b140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
b150: 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c  st byte of avail
b160: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63  able memory spac
b170: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e  e */.  void *pEn
b180: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
b190: 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73  * First byte pas
b1a0: 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62  t end of availab
b1b0: 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73  le space */.};.s
b1c0: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
b1d0: 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64  lot {.  Lookasid
b1e0: 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20  eSlot *pNext;   
b1f0: 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20   /* Next buffer 
b200: 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66  in the list of f
b210: 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d  ree buffers */.}
b220: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20  ;../*.** A hash 
b230: 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d  table for built-
b240: 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  in function defi
b250: 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69  nitions.  (Appli
b260: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a  cation-defined.*
b270: 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20  * functions use 
b280: 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20  a regular table 
b290: 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e  table from hash.
b2a0: 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65  h.).**.** Hash e
b2b0: 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75  ach FuncDef stru
b2c0: 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f  cture into one o
b2d0: 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73  f the FuncDefHas
b2e0: 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20  h.a[] slots..** 
b2f0: 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f  Collisions are o
b300: 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e  n the FuncDef.u.
b310: 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a  pHash chain..*/.
b320: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b330: 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73  UNC_HASH_SZ 23.s
b340: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
b350: 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61  h {.  FuncDef *a
b360: 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53  [SQLITE_FUNC_HAS
b370: 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20  H_SZ];       /* 
b380: 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  Hash table for f
b390: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
b3a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
b3b0: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
b3c0: 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74  N./*.** Informat
b3d0: 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20  ion held in the 
b3e0: 22 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61  "sqlite3" databa
b3f0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  se connection ob
b400: 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a  ject and used.**
b410: 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20   to manage user 
b420: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a  authentication..
b430: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
b440: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
b450: 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  th sqlite3_usera
b460: 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69  uth;.struct sqli
b470: 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20  te3_userauth {. 
b480: 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20   u8 authLevel;  
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b4a0: 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e  * Current authen
b4b0: 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a  tication level *
b4c0: 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b  /.  int nAuthPW;
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4e0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
b4f0: 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65   zAuthPW in byte
b500: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  s */.  char *zAu
b510: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b520: 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64       /* Password
b530: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
b540: 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20  icate */.  char 
b550: 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20  *zAuthUser;     
b560: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72           /* User
b570: 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75   name used to au
b580: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b  thenticate */.};
b590: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
b5a0: 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f  ues for sqlite3_
b5b0: 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76  userauth.authLev
b5c0: 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  el */.#define UA
b5d0: 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20  UTH_Unknown     
b5e0: 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  0     /* Authent
b5f0: 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20  ication not yet 
b600: 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69  checked */.#defi
b610: 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20  ne UAUTH_Fail   
b620: 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73       1     /* Us
b630: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
b640: 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66  n failed */.#def
b650: 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20  ine UAUTH_User  
b660: 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41        2     /* A
b670: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
b680: 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f  a normal user */
b690: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41  .#define UAUTH_A
b6a0: 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20  dmin       3    
b6b0: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b6c0: 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74  d as an administ
b6d0: 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e  rator */../* Fun
b6e0: 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79  ctions used only
b6f0: 20 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69   by user authori
b700: 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a  zation logic */.
b710: 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41  int sqlite3UserA
b720: 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63  uthTable(const c
b730: 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
b740: 65 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c  e3UserAuthCheckL
b750: 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ogin(sqlite3*,co
b760: 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a  nst char*,u8*);.
b770: 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72  void sqlite3User
b780: 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33  AuthInit(sqlite3
b790: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
b7a0: 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65  CryptFunc(sqlite
b7b0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
b7c0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
b7d0: 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
b7e0: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b7f0: 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  CATION */../*.**
b800: 20 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65   typedef for the
b810: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63   authorization c
b820: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
b830: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
b840: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b850: 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66  CATION.  typedef
b860: 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78   int (*sqlite3_x
b870: 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  auth)(void*,int,
b880: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b890: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
b8a0: 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ar*,.           
b8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8c0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
b8d0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
b8e0: 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69  else.  typedef i
b8f0: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
b900: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
b910: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b920: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b930: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
b940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b950: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a    const char*);.
b960: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
b970: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
b980: 45 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69  ECATED./* This i
b990: 73 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54  s an extra SQLIT
b9a0: 45 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68  E_TRACE macro th
b9b0: 61 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65  at indicates "le
b9c0: 67 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a  gacy" tracing.**
b9d0: 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66   in the style of
b9e0: 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
b9f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
ba00: 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20  TE_TRACE_LEGACY 
ba10: 20 30 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66   0x80.#else.#def
ba20: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
ba30: 5f 4c 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69  _LEGACY  0.#endi
ba40: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
ba50: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
ba60: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
ba70: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
ba80: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
ba90: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
baa0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
bab0: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
bac0: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
bad0: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
bae0: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
baf0: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
bb00: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
bb10: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
bb20: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
bb30: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
bb40: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
bb50: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
bb60: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
bb70: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
bb80: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
bb90: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
bba0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
bbb0: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
bbc0: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bbe0: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
bbf0: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc10: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
bc20: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
bc30: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  in use */.  u32 
bc40: 6d 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  mDbFlags;       
bc50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61            /* fla
bc60: 67 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e 74  gs recording int
bc70: 65 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20  ernal state */. 
bc80: 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20   u32 flags;     
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bca0: 2a 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c 65  * flags settable
bcb0: 20 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65 65   by pragmas. See
bcc0: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20   below */.  i64 
bcd0: 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20  lastRowid;      
bce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57            /* ROW
bcf0: 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e  ID of most recen
bd00: 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62  t insert (see ab
bd10: 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a  ove) */.  i64 sz
bd20: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
bd30: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
bd40: 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74  lt mmap_size set
bd50: 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53  ting */.  u32 nS
bd60: 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20  chemaLock;      
bd70: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
bd80: 74 20 72 65 73 65 74 20 74 68 65 20 73 63 68 65  t reset the sche
bd90: 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f  ma when non-zero
bda0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
bdb0: 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20  nt openFlags;   
bdc0: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73      /* Flags pas
bdd0: 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76  sed to sqlite3_v
bde0: 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20  fs.xOpen() */.  
bdf0: 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20  int errCode;    
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
be10: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
be20: 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f  or code (SQLITE_
be30: 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d  *) */.  int errM
be40: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
be50: 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c        /* & resul
be60: 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69  t codes with thi
be70: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
be80: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73  ng */.  int iSys
be90: 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20  Errno;          
bea0: 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76        /* Errno v
beb0: 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73  alue from last s
bec0: 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20  ystem error */. 
bed0: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bef0: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
bf00: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
bf10: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
bf20: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
bf30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
bf40: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
bf50: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf70: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
bf80: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
bf90: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
bfa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
bfb0: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
bfc0: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
bfd0: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bff0: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
c000: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
c010: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ailure */.  u8 b
c020: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20  BenignMalloc;   
c030: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
c040: 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73  not require OOMs
c050: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
c060: 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20   dfltLockMode;  
c070: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c080: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d  efault locking-m
c090: 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64  ode for attached
c0a0: 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64   dbs */.  signed
c0b0: 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61   char nextAutova
c0c0: 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76  c;      /* Autov
c0d0: 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72  ac setting after
c0e0: 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a   VACUUM if >=0 *
c0f0: 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45  /.  u8 suppressE
c100: 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
c110: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75    /* Do not issu
c120: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  e error messages
c130: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
c140: 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
c150: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
c160: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66  alue to return f
c170: 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f  or s3_vtab_on_co
c180: 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38  nflict() */.  u8
c190: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
c1a0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
c1b0: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
c1c0: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
c1d0: 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d  s a TS */.  u8 m
c1e0: 54 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20  Trace;          
c1f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72            /* zer
c200: 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45  o or more SQLITE
c210: 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a  _TRACE flags */.
c220: 20 20 75 38 20 6e 6f 53 68 61 72 65 64 43 61 63    u8 noSharedCac
c230: 68 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  he;             
c240: 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73 68  /* True if no sh
c250: 61 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b 65  ared-cache backe
c260: 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c  nds */.  u8 nSql
c270: 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  Exec;           
c280: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c290: 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53   of pending OP_S
c2a0: 71 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20 2a  qlExec opcodes *
c2b0: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
c2c0: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
c2d0: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
c2e0: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
c2f0: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
c300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c310: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
c320: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
c330: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
c340: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c360: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
c370: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
c380: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
c390: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
c3a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
c3b0: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
c3c0: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
c3d0: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
c3e0: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
c3f0: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
c400: 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  mits */.  int nM
c410: 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20  axSorterMmap;   
c420: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
c430: 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f  um size of regio
c440: 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72  ns mapped by sor
c450: 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ter */.  struct 
c460: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
c470: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
c480: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
c490: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
c4a0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
c4b0: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
c4c0: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
c4d0: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
c4e0: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
c4f0: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
c500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c510: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
c520: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
c530: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
c540: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
c550: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
c560: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
c570: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
c580: 75 6e 73 69 67 6e 65 64 20 6f 72 70 68 61 6e 54  unsigned orphanT
c590: 72 69 67 67 65 72 20 3a 20 31 3b 20 2f 2a 20 4c  rigger : 1; /* L
c5a0: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
c5b0: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
c5c0: 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 6e  rigger */.    un
c5d0: 73 69 67 6e 65 64 20 69 6d 70 6f 73 74 65 72 54  signed imposterT
c5e0: 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20 42 75 69  able : 1; /* Bui
c5f0: 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65  lding an imposte
c600: 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  r table */.    u
c610: 6e 73 69 67 6e 65 64 20 72 65 6f 70 65 6e 4d 65  nsigned reopenMe
c620: 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a 20 41 54  mdb : 1;   /* AT
c630: 54 41 43 48 20 69 73 20 72 65 61 6c 6c 79 20 61  TACH is really a
c640: 20 72 65 6f 70 65 6e 20 75 73 69 6e 67 20 4d 65   reopen using Me
c650: 6d 44 42 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b  mDB */.  } init;
c660: 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69  .  int nVdbeActi
c670: 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ve;             
c680: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44   /* Number of VD
c690: 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75  BEs currently ru
c6a0: 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e  nning */.  int n
c6b0: 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20 20  VdbeRead;       
c6c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c6d0: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
c6e0: 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20  Es that read or 
c6f0: 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  write */.  int n
c700: 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20 20  VdbeWrite;      
c710: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c720: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
c730: 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e 64  Es that read and
c740: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
c750: 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20 20  nVdbeExec;      
c760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c770: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
c780: 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28  lls to VdbeExec(
c790: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73  ) */.  int nVDes
c7a0: 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20  troy;           
c7b0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c7c0: 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73  f active OP_VDes
c7d0: 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
c7e0: 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73  */.  int nExtens
c7f0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
c800: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c810: 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e  loaded extension
c820: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45  s */.  void **aE
c830: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
c840: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
c850: 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20   shared library 
c860: 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e 74  handles */.  int
c870: 20 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c 76   (*xTrace)(u32,v
c880: 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a  oid*,void*,void*
c890: 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20  );     /* Trace 
c8a0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
c8b0: 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20  id *pTraceArg;  
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8d0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c8e0: 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65  ent to the trace
c8f0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c900: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
c910: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
c920: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
c930: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
c940: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
c950: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c970: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
c980: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
c990: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74  .  void *pCommit
c9a0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
c9b0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c9c0: 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62   to xCommitCallb
c9d0: 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  ack() */.  int (
c9e0: 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  *xCommitCallback
c9f0: 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20  )(void*);    /* 
ca00: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
ca10: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
ca20: 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67  id *pRollbackArg
ca30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ca40: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
ca50: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
ca60: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
ca70: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
ca80: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
ca90: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
caa0: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
cab0: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
cac0: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
cad0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
cae0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
caf0: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
cb00: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20  _int64);.#ifdef 
cb10: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
cb20: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76  EUPDATE_HOOK.  v
cb30: 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41  oid *pPreUpdateA
cb40: 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rg;          /* 
cb50: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
cb60: 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  o xPreUpdateCall
cb70: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28  back */.  void (
cb80: 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  *xPreUpdateCallb
cb90: 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73  ack)(   /* Regis
cba0: 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  tered using sqli
cbb0: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
cbc0: 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64  ok() */.    void
cbd0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  *,sqlite3*,int,c
cbe0: 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20  har const*,char 
cbf0: 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69  const*,sqlite3_i
cc00: 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nt64,sqlite3_int
cc10: 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64  64.  );.  PreUpd
cc20: 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b  ate *pPreUpdate;
cc30: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
cc40: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72  xt for active pr
cc50: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
cc60: 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k */.#endif /* S
cc70: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
cc80: 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23  UPDATE_HOOK */.#
cc90: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
cca0: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
ccb0: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
ccc0: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
ccd0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
cce0: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
ccf0: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
cd00: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
cd10: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
cd20: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
cd30: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
cd40: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
cd50: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
cd60: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
cd70: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
cd80: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
cd90: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
cda0: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
cdb0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
cdc0: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
cdd0: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
cde0: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
cdf0: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
ce00: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
ce10: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
ce20: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
ce30: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
ce40: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
ce50: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
ce60: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
ce70: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
ce80: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
ce90: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
cea0: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
ceb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
cec0: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
ced0: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
cee0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
cef0: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
cf00: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
cf10: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
cf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cf30: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
cf40: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
cf50: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
cf60: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
cf70: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
cf80: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
cf90: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
cfa0: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
cfb0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
cfc0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
cfd0: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
cfe0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
cff0: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
d000: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
d010: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
d020: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
d030: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
d040: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
d050: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
d060: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d070: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d080: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
d090: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
d0a0: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
d0b0: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
d0c0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
d0d0: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
d0e0: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
d0f0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
d100: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
d110: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
d120: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
d130: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
d140: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
d150: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
d160: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
d170: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
d180: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
d190: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
d1a0: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
d1b0: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
d1c0: 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f          /* Disco
d1d0: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
d1e0: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
d1f0: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
d200: 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20    Hash aFunc;   
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d220: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
d230: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
d240: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
d250: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
d260: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
d270: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
d280: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
d290: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
d2a0: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
d2b0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
d2c0: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
d2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
d2e0: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
d2f0: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
d300: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
d310: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
d320: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
d330: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
d340: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
d350: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
d360: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
d370: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
d380: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
d390: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d3b0: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
d3c0: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
d3d0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
d3e0: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
d3f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d400: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
d410: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
d420: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
d430: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
d440: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d450: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
d460: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
d470: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
d480: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
d490: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
d4a0: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
d4b0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
d4c0: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
d4d0: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
d4e0: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
d4f0: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
d500: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23  in DbFree() */.#
d510: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
d520: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
d530: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
d540: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
d550: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
d560: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
d570: 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78  ASTER.  ** mutex
d580: 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33  , not by sqlite3
d590: 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65  .mutex. They are
d5a0: 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e   used by code in
d5b0: 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a   notify.c..  **.
d5c0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c    ** When X.pUnl
d5d0: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ockConnection==Y
d5e0: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
d5f0: 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66  t X is waiting f
d600: 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c  or Y to.  ** unl
d610: 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63  ock so that it c
d620: 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a  an proceed..  **
d630: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c  .  ** When X.pBl
d640: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
d650: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
d660: 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74  that something t
d670: 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a  hat X tried.  **
d680: 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63   tried to do rec
d690: 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74  ently failed wit
d6a0: 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  h an SQLITE_LOCK
d6b0: 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20  ED error due to 
d6c0: 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20  locks.  ** held 
d6d0: 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  by Y..  */.  sql
d6e0: 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43  ite3 *pBlockingC
d6f0: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f  onnection; /* Co
d700: 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61  nnection that ca
d710: 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  used SQLITE_LOCK
d720: 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ED */.  sqlite3 
d730: 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  *pUnlockConnecti
d740: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  on;           /*
d750: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77   Connection to w
d760: 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20  atch for unlock 
d770: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f  */.  void *pUnlo
d780: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
d790: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
d7a0: 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63  gument to xUnloc
d7b0: 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69  kNotify */.  voi
d7c0: 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66  d (*xUnlockNotif
d7d0: 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29  y)(void **, int)
d7e0: 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74  ;  /* Unlock not
d7f0: 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ify callback */.
d800: 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74    sqlite3 *pNext
d810: 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20  Blocked;        
d820: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20  /* Next in list 
d830: 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63  of all blocked c
d840: 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65  onnections */.#e
d850: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
d860: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
d870: 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33  CATION.  sqlite3
d880: 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20  _userauth auth; 
d890: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61         /* User a
d8a0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e  uthentication in
d8b0: 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e  formation */.#en
d8c0: 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20  dif.};../*.** A 
d8d0: 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65  macro to discove
d8e0: 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  r the encoding o
d8f0: 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  f a database..*/
d900: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
d910: 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61  ENC(db) ((db)->a
d920: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65  Db[0].pSchema->e
d930: 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  nc).#define ENC(
d940: 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29  db)        ((db)
d950: 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ->enc)../*.** Po
d960: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
d970: 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c  r the sqlite3.fl
d980: 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ags..**.** Value
d990: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
d9a0: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
d9b0: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51  t()):.**      SQ
d9c0: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
d9d0: 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c     == PAGER_FULL
d9e0: 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51  FSYNC.**      SQ
d9f0: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
da00: 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54  nc == PAGER_CKPT
da10: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
da20: 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53     SQLITE_CacheS
da30: 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52  pill    == PAGER
da40: 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a  _CACHE_SPILL.*/.
da50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
da60: 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78  riteSchema    0x
da70: 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20  00000001  /* OK 
da80: 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45  to update SQLITE
da90: 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69  _MASTER */.#defi
daa0: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
dab0: 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30  FileFmt  0x00000
dac0: 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e  002  /* Create n
dad0: 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ew databases in 
dae0: 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66  format 1 */.#def
daf0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43  ine SQLITE_FullC
db00: 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30  olNames   0x0000
db10: 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75  0004  /* Show fu
db20: 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ll column names 
db30: 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65  on SELECT */.#de
db40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
db50: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
db60: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
db70: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
db80: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
db90: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
dba0: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30  llFSync  0x00000
dbb0: 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  010  /* Use full
dbc0: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
dbd0: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
dbe0: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
dbf0: 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32  ll     0x0000002
dc00: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c  0  /* OK to spil
dc10: 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f  l pager cache */
dc20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dc30: 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30  ShortColNames  0
dc40: 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68  x00000040  /* Sh
dc50: 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73  ow short columns
dc60: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
dc70: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
dc80: 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ws      0x000000
dc90: 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77  80  /* Count row
dca0: 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53  s changed by INS
dcb0: 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20  ERT, */.        
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f    /*   DELETE, o
dcf0: 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74  r UPDATE and ret
dd00: 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  urn */.         
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd30: 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20   /*   the count 
dd40: 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  using a callback
dd50: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
dd60: 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b  ITE_NullCallback
dd70: 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f     0x00000100  /
dd80: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  * Invoke the cal
dd90: 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68  lback once if th
dda0: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ddd0: 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69  *   result set i
dde0: 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  s empty */.#defi
ddf0: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
de00: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30  Checks   0x00000
de10: 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  200  /* Do not e
de20: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
de30: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
de40: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
de50: 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30  ncommit   0x0000
de60: 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e  0400  /* READ UN
de70: 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61  COMMITTED in sha
de80: 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65  red-cache */.#de
de90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b  fine SQLITE_NoCk
dea0: 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30  ptOnClose  0x000
deb0: 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65  00800  /* No che
dec0: 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65  ckpoint on close
ded0: 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65  ()/DETACH */.#de
dee0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
def0: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
df00: 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  01000  /* Revers
df10: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
df20: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
df30: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
df40: 73 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20  s    0x00002000 
df50: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
df60: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
df70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
df80: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
df90: 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e  x00004000  /* En
dfa0: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
dfb0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
dfc0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dfd0: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
dfe0: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45  0x00008000  /* E
dff0: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
e000: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
e010: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
e020: 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30  tension  0x00010
e030: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
e040: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
e050: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e060: 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30  LoadExtFunc    0
e070: 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e  x00020000  /* En
e080: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
e090: 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a  ion() SQL func *
e0a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e0b0: 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20  _EnableTrigger  
e0c0: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54  0x00040000  /* T
e0d0: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72  rue to enable tr
e0e0: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
e0f0: 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  e SQLITE_DeferFK
e100: 73 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30  s       0x000800
e110: 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c  00  /* Defer all
e120: 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
e130: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e140: 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20  E_QueryOnly     
e150: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
e160: 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65  Disable database
e170: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
e180: 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53  ine SQLITE_CellS
e190: 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30  izeCk     0x0020
e1a0: 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62  0000  /* Check b
e1b0: 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20  tree cell sizes 
e1c0: 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69  on load */.#defi
e1d0: 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f  ne SQLITE_Fts3To
e1e0: 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30  kenizer  0x00400
e1f0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66  000  /* Enable f
e200: 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29  ts3_tokenizer(2)
e210: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e220: 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20  TE_EnableQPSG   
e230: 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a    0x00800000  /*
e240: 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53   Query Planner S
e250: 74 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74  tability Guarant
e260: 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ee*/.#define SQL
e270: 49 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20  ITE_TriggerEQP  
e280: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
e290: 2a 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45  * Show trigger E
e2a0: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
e2b0: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
e2c0: 49 54 45 5f 52 65 73 65 74 44 61 74 61 62 61 73  ITE_ResetDatabas
e2d0: 65 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f  e  0x02000000  /
e2e0: 2a 20 52 65 73 65 74 20 74 68 65 20 64 61 74 61  * Reset the data
e2f0: 62 61 73 65 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67  base */../* Flag
e300: 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64  s used only if d
e310: 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 69 66 64  ebugging */.#ifd
e320: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
e330: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
e340: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
e350: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62  08000000  /* Deb
e360: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
e370: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
e380: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
e390: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 31  beListing    0x1
e3a0: 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  0000000  /* Debu
e3b0: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
e3c0: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
e3d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
e3e0: 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78 32  beTrace      0x2
e3f0: 30 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0000000  /* True
e400: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
e410: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
e420: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
e430: 64 64 6f 70 54 72 61 63 65 20 30 78 34 30 30 30  ddopTrace 0x4000
e440: 30 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  0000  /* Trace s
e450: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
e460: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
e470: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ne SQLITE_VdbeEQ
e480: 50 20 20 20 20 20 20 20 20 30 78 38 30 30 30 30  P        0x80000
e490: 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58  000  /* Debug EX
e4a0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e4b0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
e4c0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
e4d0: 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62   for sqlite3.mDb
e4e0: 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  Flags.*/.#define
e4f0: 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68   DBFLAG_SchemaCh
e500: 61 6e 67 65 20 20 20 30 78 30 30 30 31 20 20 2f  ange   0x0001  /
e510: 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61  * Uncommitted Ha
e520: 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73  sh table changes
e530: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c   */.#define DBFL
e540: 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  AG_PreferBuiltin
e550: 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65    0x0002  /* Pre
e560: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
e570: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
e580: 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75  fine DBFLAG_Vacu
e590: 75 6d 20 20 20 20 20 20 20 20 20 30 78 30 30 30  um         0x000
e5a0: 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20  4  /* Currently 
e5b0: 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23  in a VACUUM */.#
e5c0: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53 63  define DBFLAG_Sc
e5d0: 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30  hemaKnownOk  0x0
e5e0: 30 30 38 20 20 2f 2a 20 53 63 68 65 6d 61 20 69  008  /* Schema i
e5f0: 73 20 6b 6e 6f 77 6e 20 74 6f 20 62 65 20 76 61  s known to be va
e600: 6c 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69  lid */../*.** Bi
e610: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
e620: 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65  3.dbOptFlags fie
e630: 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ld that are used
e640: 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
e650: 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
e660: 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
e670: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e  OPTIMIZATIONS,..
e680: 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a  .) interface to.
e690: 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64  ** selectively d
e6a0: 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f  isable various o
e6b0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f  ptimizations..*/
e6c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e6d0: 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30  QueryFlattener 0
e6e0: 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79  x0001   /* Query
e6f0: 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23   flattening */.#
e700: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
e710: 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30  lumnCache    0x0
e720: 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  002   /* Column 
e730: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
e740: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
e750: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
e760: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
e770: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
e780: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
e790: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
e7a0: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
e7b0: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23  t factoring */.#
e7c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
e7d0: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
e7e0: 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  010   /* DISTINC
e7f0: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
e800: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e810: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
e820: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76   0x0020   /* Cov
e830: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
e840: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e850: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
e860: 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f  in 0x0040   /* O
e870: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
e880: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
e890: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61  efine SQLITE_Tra
e8a0: 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30 30  nsitive     0x00
e8b0: 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69  80   /* Transiti
e8c0: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ve constraints *
e8d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e8e0: 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20  _OmitNoopJoin   
e8f0: 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74  0x0100   /* Omit
e900: 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69   unused tables i
e910: 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69  n joins */.#defi
e920: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f  ne SQLITE_CountO
e930: 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30 20  fView    0x0200 
e940: 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f    /* The count-o
e950: 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74  f-view optimizat
e960: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
e970: 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74  QLITE_CursorHint
e980: 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  s    0x0400   /*
e990: 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69   Add OP_CursorHi
e9a0: 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64  nt opcodes */.#d
e9b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
e9c0: 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30 38  t34         0x08
e9d0: 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54  00   /* Use STAT
e9e0: 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20  3 or STAT4 data 
e9f0: 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65 78 70  */.   /* TH3 exp
ea00: 65 63 74 73 20 74 68 65 20 53 74 61 74 33 34 20  ects the Stat34 
ea10: 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20 74 6f   ^^^^^^ value to
ea20: 20 62 65 20 30 78 30 38 30 30 2e 20 20 44 6f 6e   be 0x0800.  Don
ea30: 27 74 20 63 68 61 6e 67 65 20 69 74 20 2a 2f 0a  't change it */.
ea40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
ea50: 75 73 68 44 6f 77 6e 20 20 20 20 20 20 20 30 78  ushDown       0x
ea60: 31 30 30 30 20 20 20 2f 2a 20 54 68 65 20 70 75  1000   /* The pu
ea70: 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d 69 7a 61  sh-down optimiza
ea80: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
ea90: 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69 66 79 4a  SQLITE_SimplifyJ
eaa0: 6f 69 6e 20 20 20 30 78 32 30 30 30 20 20 20 2f  oin   0x2000   /
eab0: 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46 54 20 4a  * Convert LEFT J
eac0: 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f 0a 23  OIN to JOIN */.#
ead0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
eae0: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
eaf0: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
eb00: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
eb10: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
eb20: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
eb30: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
eb40: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
eb50: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
eb60: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
eb70: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
eb80: 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d  , mask)  (((db)-
eb90: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
eba0: 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  k))!=0).#define 
ebb0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
ebc0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
ebd0: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
ebe0: 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a  gs&(mask))==0)..
ebf0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
ec00: 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61  e if it OK to fa
ec10: 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78  ctor constant ex
ec20: 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74  pressions into t
ec30: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
ec40: 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61  n.** code. The a
ec50: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72  rgument is a Par
ec60: 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68  se object for th
ec70: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
ec80: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e  ..*/.#define Con
ec90: 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28  stFactorOk(P) ((
eca0: 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f  P)->okConstFacto
ecb0: 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  r)../*.** Possib
ecc0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
ecd0: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
ece0: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
ecf0: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
ed00: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
ed10: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
ed20: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
ed30: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
ed40: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
ed50: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
ed60: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
ed70: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
ed80: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
ed90: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
eda0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
edb0: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
edc0: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
edd0: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
ede0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
edf0: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
ee00: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
ee10: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
ee20: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
ee30: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
ee40: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
ee50: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
ee60: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
ee70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ee80: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
ee90: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
eea0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
eeb0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
eec0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eed0: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
eee0: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
eef0: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
ef00: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
ef10: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
ef20: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
ef30: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
ef40: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
ef50: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
ef60: 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20  re.  For global 
ef70: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
ef80: 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72 28 29  ns (ex: substr()
ef90: 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28 29  , max(), count()
efa0: 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  ).** a pointer t
efb0: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
efc0: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
efd0: 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
efe0: 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a  nctions object..
eff0: 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65  ** For per-conne
f000: 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f  ction applicatio
f010: 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
f020: 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72 20 74  ons, a pointer t
f030: 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  o this.** struct
f040: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
f050: 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68 61 73  he db->aHash has
f060: 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  h table..**.** T
f070: 68 65 20 75 2e 70 48 61 73 68 20 66 69 65 6c 64  he u.pHash field
f080: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
f090: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73  global built-ins
f0a0: 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74 72 75  .  The u.pDestru
f0b0: 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73  ctor.** field is
f0c0: 20 75 73 65 64 20 62 79 20 70 65 72 2d 63 6f 6e   used by per-con
f0d0: 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65 66 20  nection app-def 
f0e0: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74  functions..*/.st
f0f0: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
f100: 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20 20 20   i8 nArg;       
f110: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f120: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
f130: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
f140: 64 20 2a 2f 0a 20 20 75 33 32 20 66 75 6e 63 46  d */.  u32 funcF
f150: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
f160: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
f170: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
f180: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
f190: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
f1a0: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
f1b0: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
f1c0: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
f1d0: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
f1e0: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
f1f0: 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63 29 28   void (*xSFunc)(
f200: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f210: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
f220: 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f  ue**); /* func o
f230: 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20  r agg-step */.  
f240: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
f250: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
f260: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
f270: 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66 69 6e        /* Agg fin
f280: 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76 6f 69 64  alizer */.  void
f290: 20 28 2a 78 56 61 6c 75 65 29 28 73 71 6c 69 74   (*xValue)(sqlit
f2a0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2c0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 67 67    /* Current agg
f2d0: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 76 6f 69 64   value */.  void
f2e0: 20 28 2a 78 49 6e 76 65 72 73 65 29 28 73 71 6c   (*xInverse)(sql
f2f0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
f300: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
f310: 2a 29 3b 20 2f 2a 20 69 6e 76 65 72 73 65 20 61  *); /* inverse a
f320: 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 63 6f 6e  gg-step */.  con
f330: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
f340: 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66    /* SQL name of
f350: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a   the function. *
f360: 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
f370: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
f380: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
f390: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
f3a0: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
f3b0: 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63  hash */.    Func
f3c0: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
f3d0: 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65  tructor;   /* Re
f3e0: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20  ference counted 
f3f0: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
f400: 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  ion */.  } u;.};
f410: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
f420: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
f430: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
f440: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
f450: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
f460: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
f470: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
f480: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
f490: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
f4a0: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
f4b0: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
f4c0: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
f4d0: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
f4e0: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
f4f0: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
f500: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
f510: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
f520: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
f530: 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  is set to.** the
f540: 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44   number of FuncD
f550: 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74  ef objects creat
f560: 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20  ed (either 1 or 
f570: 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  3, depending on 
f580: 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f  whether.** or no
f590: 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
f5a0: 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49  encoding is SQLI
f5b0: 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e  TE_ANY). The Fun
f5c0: 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72  cDef.pDestructor
f5d0: 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61  .** member of ea
f5e0: 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75  ch of the new Fu
f5f0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
f600: 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f   set to point to
f610: 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a   the allocated.*
f620: 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  * FuncDestructor
f630: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74  ..**.** Thereaft
f640: 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20  er, when one of 
f650: 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  the FuncDef obje
f660: 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20  cts is deleted, 
f670: 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a  the reference.**
f680: 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f   count on this o
f690: 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65  bject is decreme
f6a0: 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65  nted. When it re
f6b0: 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73  aches 0, the des
f6c0: 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e  tructor.** is in
f6d0: 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75  voked and the Fu
f6e0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72  ncDestructor str
f6f0: 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f  ucture freed..*/
f700: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74  .struct FuncDest
f710: 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e  ructor {.  int n
f720: 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  Ref;.  void (*xD
f730: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
f740: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
f750: 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ta;.};../*.** Po
f760: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
f770: 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e  r FuncDef.flags.
f780: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
f790: 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50  _LENGTH and _TYP
f7a0: 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75  EOF.** values mu
f7b0: 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  st correspond to
f7c0: 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
f7d0: 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
f7e0: 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20  EOFARG.  And.** 
f7f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
f800: 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68 65  TANT must be the
f810: 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45 5f   same as SQLITE_
f820: 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20 20  DETERMINISTIC.  
f830: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
f840: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
f850: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
f860: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a  verify this..**.
f870: 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
f880: 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
f890: 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
f8a0: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
f8b0: 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e  _MINMAX    ==  N
f8c0: 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
f8d0: 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   == SF_MinMaxAgg
f8e0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
f8f0: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d  UNC_LENGTH    ==
f900: 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41    OPFLAG_LENGTHA
f910: 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  RG.**     SQLITE
f920: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 20  _FUNC_TYPEOF    
f930: 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ==  OPFLAG_TYPEO
f940: 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49  FARG.**     SQLI
f950: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f960: 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45 54    ==  SQLITE_DET
f970: 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d 20  ERMINISTIC from 
f980: 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20 53  the API.**     S
f990: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
f9a0: 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e 20  SK   depends on 
f9b0: 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63 72  SQLITE_UTF* macr
f9c0: 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f  os in the API.*/
f9d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f9e0: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
f9f0: 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  0003 /* SQLITE_U
fa00: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
fa10: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
fa20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fa30: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
fa40: 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61  x0004 /* Candida
fa50: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
fa60: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
fa70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fa80: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
fa90: 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73  008 /* Case-sens
faa0: 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20  itive LIKE-type 
fab0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
fac0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fad0: 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30 20  EPHEM    0x0010 
fae0: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
faf0: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
fb00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fb10: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
fb20: 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65  0x0020 /* sqlite
fb30: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
fb40: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
fb50: 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  d*/.#define SQLI
fb60: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
fb70: 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74   0x0040 /* Built
fb80: 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e  -in length() fun
fb90: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fba0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
fbb0: 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20  EOF   0x0080 /* 
fbc0: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
fbd0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
fbe0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fbf0: 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31 30  C_COUNT    0x010
fc00: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
fc10: 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65  unt(*) aggregate
fc20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fc30: 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45  TE_FUNC_COALESCE
fc40: 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74   0x0200 /* Built
fc50: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
fc60: 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64  r ifnull() */.#d
fc70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fc80: 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30  C_UNLIKELY 0x040
fc90: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
fca0: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
fcb0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fcc0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fcd0: 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73  T 0x0800 /* Cons
fce0: 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65  tant inputs give
fcf0: 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70   a constant outp
fd00: 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ut */.#define SQ
fd10: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
fd20: 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75     0x1000 /* Tru
fd30: 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20  e for min() and 
fd40: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73  max() aggregates
fd50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fd60: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
fd70: 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77   0x2000 /* "Slow
fd80: 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20   Change". Value 
fd90: 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20  constant during 
fda0: 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a.              
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdc0: 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20        ** single 
fdd0: 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68  query - might ch
fde0: 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a  ange over time *
fdf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fe00: 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20 30  _FUNC_AFFINITY 0
fe10: 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x4000 /* Built-i
fe20: 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66 75 6e  n affinity() fun
fe30: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fe40: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f 46 46   SQLITE_FUNC_OFF
fe50: 53 45 54 20 20 20 30 78 38 30 30 30 20 2f 2a 20  SET   0x8000 /* 
fe60: 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65 5f  Built-in sqlite_
fe70: 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69 6f  offset() functio
fe80: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fe90: 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 20  ITE_FUNC_WINDOW 
fea0: 20 30 78 31 30 30 30 30 20 2f 2a 20 42 75 69 6c   0x10000 /* Buil
feb0: 74 2d 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79  t-in window-only
fec0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
fed0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fee0: 5f 57 49 4e 44 4f 57 5f 53 49 5a 45 20 20 30 78  _WINDOW_SIZE  0x
fef0: 32 30 30 30 30 20 20 2f 2a 20 52 65 71 75 69 72  20000  /* Requir
ff00: 65 73 20 70 61 72 74 69 74 69 6f 6e 20 73 69 7a  es partition siz
ff10: 65 20 61 73 20 61 72 67 2e 20 2a 2f 0a 0a 2f 2a  e as arg. */../*
ff20: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
ff30: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
ff40: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
ff50: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
ff60: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
ff70: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
ff80: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
ff90: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
ffa0: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
ffb0: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
ffc0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
ffd0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
ffe0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
fff0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
10000 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
10010 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
10020 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
10030 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
10040 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
10050 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
10060 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
10070 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
10080 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
10090 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
100a0 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
100b0 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
100c0 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
100d0 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
100e0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a  he function. If.
100f0 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
10100 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
10110 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
10120 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
10130 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
10140 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
10150 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10160 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
10170 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
10180 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
10190 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
101a0 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
101b0 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a  **   DFUNCTION(z
101c0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
101d0 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
101e0 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
101f0 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
10200 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
10210 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
10220 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73   and.**     adds
10230 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
10240 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20  _SLOCHNG flag.  
10250 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20  Used for date & 
10260 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  time functions.*
10270 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69  *     and functi
10280 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f  ons like sqlite_
10290 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63  version() that c
102a0 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e  an change, but n
102b0 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20  ot during.**    
102c0 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e   a single query.
102d0 20 20 54 68 65 20 69 41 72 67 20 69 73 20 69 67    The iArg is ig
102e0 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65 72  nored.  The user
102f0 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79 73 20  -data is always 
10300 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20  set.**     to a 
10310 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
10320 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
10330 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
10340 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45 28  .**   PURE_DATE(
10350 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10360 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
10370 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72 20 22  *     Used for "
10380 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65 20  pure" date/time 
10390 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73 20  functions, this 
103a0 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44 46  macro is like DF
103b0 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65  UNCTION.**     e
103c0 78 63 65 70 74 20 74 68 61 74 20 69 74 20 64 6f  xcept that it do
103d0 65 73 20 73 65 74 20 74 68 65 20 53 51 4c 49 54  es set the SQLIT
103e0 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
103f0 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73 0a  flags.  iArg is.
10400 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20 61  **     ignored a
10410 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  nd the user-data
10420 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63 74   for these funct
10430 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20 61  ions is set to a
10440 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74 72  n .**     arbitr
10450 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69  ary non-NULL poi
10460 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
10470 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
10480 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47  used..**.**   AG
10490 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
104a0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
104b0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
104c0 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
104d0 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
104e0 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
104f0 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
10500 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
10510 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
10520 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
10530 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
10540 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
10550 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
10560 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
10570 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
10580 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
10590 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
105a0 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54 49 4f 4e  *.**   WFUNCTION
105b0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
105c0 72 67 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  rg, xStep, xFina
105d0 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65  l, xValue, xInve
105e0 72 73 65 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  rse).**     Used
105f0 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
10600 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10610 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
10620 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
10630 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
10640 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
10650 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
10660 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
10670 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
10680 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
10690 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
106a0 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
106b0 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
106c0 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
106d0 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
106e0 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
106f0 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10700 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
10710 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
10720 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
10730 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68   zName.**     th
10740 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
10750 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
10760 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
10770 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20  a call to C.**  
10780 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
10790 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
107a0 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
107b0 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
107c0 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
107d0 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
107e0 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
107f0 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
10800 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
10810 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
10820 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
10830 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
10840 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
10850 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
10860 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
10870 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10880 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10890 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
108a0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
108b0 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
108c0 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
108d0 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
108e0 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
108f0 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
10900 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10910 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10920 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
10930 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10940 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10950 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
10960 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10970 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10980 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10990 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
109a0 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
109b0 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
109c0 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28  efine DFUNCTION(
109d0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
109e0 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
109f0 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10a00 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
10a10 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20  LITE_UTF8, \.   
10a20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  0, 0, xFunc, 0, 
10a30 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10a40 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52 45  } }.#define PURE
10a50 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
10a60 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10a70 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10a80 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
10a90 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
10aa0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10ab0 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64  TANT, \.   (void
10ac0 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  *)&sqlite3Config
10ad0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10ae0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10af0 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54   }.#define FUNCT
10b00 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
10b10 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10b20 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
10b30 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
10b40 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
10b50 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10b60 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10b70 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
10b80 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
10b90 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10ba0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10bb0 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10bc0 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
10bd0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10be0 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
10bf0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10c00 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10c10 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NG|SQLITE_UTF8|(
10c20 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
10c30 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
10c40 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  pArg, 0, xFunc, 
10c50 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10c60 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
10c70 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
10c80 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
10c90 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10ca0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10cb0 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
10cc0 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
10cd0 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
10ce0 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10cf0 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
10d00 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
10d10 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
10d20 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61  tep, xFinal, xVa
10d30 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  lue) \.  {nArg, 
10d40 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
10d50 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10d60 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10d70 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
10d80 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
10d90 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c 23 7a 4e  nal,xValue,0,#zN
10da0 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
10db0 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61  e AGGREGATE2(zNa
10dc0 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
10dd0 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
10de0 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
10df0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10e00 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
10e10 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
10e20 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20  xtraFlags, \.   
10e30 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
10e40 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
10e50 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30  ,xFinal,xFinal,0
10e60 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 23  ,#zName, {0}}..#
10e70 64 65 66 69 6e 65 20 57 41 47 47 52 45 47 41 54  define WAGGREGAT
10e80 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
10e90 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
10ea0 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78  Final, xValue, x
10eb0 49 6e 76 65 72 73 65 29 20 5c 0a 20 20 7b 6e 41  Inverse) \.  {nA
10ec0 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
10ed0 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
10ee0 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
10ef0 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
10f00 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
10f10 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 78  ,xFinal,xValue,x
10f20 49 6e 76 65 72 73 65 2c 23 7a 4e 61 6d 65 2c 20  Inverse,#zName, 
10f30 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20  {0}}../*.** All 
10f40 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e  current savepoin
10f50 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
10f60 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73   a linked list s
10f70 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71  tarting at.** sq
10f80 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
10f90 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
10fa0 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ent in the list 
10fb0 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  is the most rece
10fc0 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73  ntly.** opened s
10fd0 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f  avepoint. Savepo
10fe0 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74  ints are added t
10ff0 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68  o the list by th
11000 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76  e vdbe.** OP_Sav
11010 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
11020 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61  on..*/.struct Sa
11030 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72  vepoint {.  char
11040 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d  /* Savepoint nam
11070 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  e (nul-terminate
11080 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  d) */.  i64 nDef
11090 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
110a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
110b0 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
110c0 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20  d fk violations 
110d0 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
110e0 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
110f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11100 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69  er of deferred i
11110 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65  mm fk. */.  Save
11120 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20  point *pNext;   
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11140 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f  /* Parent savepo
11150 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a  int (if any) */.
11160 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
11170 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64  llowing are used
11180 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70   as the second p
11190 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
111a0 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a  te3Savepoint(),.
111b0 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31  ** and as the P1
111c0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
111d0 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
111e0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64  struction..*/.#d
111f0 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
11200 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65  BEGIN      0.#de
11210 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
11220 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66  ELEASE    1.#def
11230 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f  ine SAVEPOINT_RO
11240 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a  LLBACK   2.../*.
11250 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d  ** Each SQLite m
11260 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74  odule (virtual t
11270 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29  able definition)
11280 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
11290 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
112a0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
112b0 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64  tructure, stored
112c0 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e   in the sqlite3.
112d0 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20  aModule.** hash 
112e0 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  table..*/.struct
112f0 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73   Module {.  cons
11300 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
11310 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20   *pModule;      
11320 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69   /* Callback poi
11330 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  nters */.  const
11340 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11360 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74  /* Name passed t
11370 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
11380 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  ) */.  void *pAu
11390 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
113a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
113b0 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72  Aux passed to cr
113c0 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
113d0 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
113e0 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  oy)(void *);    
113f0 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c          /* Modul
11400 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  e destructor fun
11410 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65  ction */.  Table
11420 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20   *pEpoTab;      
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62  /* Eponymous tab
11450 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75  le for this modu
11460 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
11470 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
11480 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  t each column of
11490 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73   an SQL table is
114a0 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74   held in an inst
114b0 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
114c0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
114d0 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20  ruct Column {.  
114e0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
114f0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
11500 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74   column, \000, t
11510 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a  hen the type */.
11520 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20    Expr *pDflt;  
11530 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61     /* Default va
11540 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
11550 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  mn */.  char *zC
11560 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c  oll;     /* Coll
11570 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
11580 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68   If NULL, use th
11590 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  e default */.  u
115a0 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20  8 notNull;      
115b0 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66  /* An OE_ code f
115c0 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f  or handling a NO
115d0 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
115e0 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  t */.  char affi
115f0 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  nity;   /* One o
11600 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
11610 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20  _... values */. 
11620 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20   u8 szEst;      
11630 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
11640 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20  ize of value in 
11650 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a  this column. siz
11660 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20  eof(INT)==1 */. 
11670 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20   u8 colFlags;   
11680 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f    /* Boolean pro
11690 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f  perties.  See CO
116a0 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62  LFLAG_ defines b
116b0 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  elow */.};../* A
116c0 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
116d0 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67  r Column.colFlag
116e0 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s:.*/.#define CO
116f0 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30  LFLAG_PRIMKEY  0
11700 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75  x0001    /* Colu
11710 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68  mn is part of th
11720 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
11730 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
11740 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32  _HIDDEN   0x0002
11750 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20      /* A hidden 
11760 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74  column in a virt
11770 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ual table */.#de
11780 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53  fine COLFLAG_HAS
11790 54 59 50 45 20 20 30 78 30 30 30 34 20 20 20 20  TYPE  0x0004    
117a0 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c  /* Type name fol
117b0 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  lows column name
117c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
117d0 4c 41 47 5f 55 4e 49 51 55 45 20 20 20 30 78 30  LAG_UNIQUE   0x0
117e0 30 30 38 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  008    /* Column
117f0 20 64 65 66 20 63 6f 6e 74 61 69 6e 73 20 22 55   def contains "U
11800 4e 49 51 55 45 22 20 6f 72 20 22 50 4b 22 20 2a  NIQUE" or "PK" *
11810 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
11820 47 5f 53 4f 52 54 45 52 52 45 46 20 30 78 30 30  G_SORTERREF 0x00
11830 31 30 20 20 20 2f 2a 20 55 73 65 20 73 6f 72 74  10   /* Use sort
11840 65 72 2d 72 65 66 73 20 77 69 74 68 20 74 68 69  er-refs with thi
11850 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a  s column */../*.
11860 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20  ** A "Collating 
11870 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66  Sequence" is def
11880 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
11890 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
118a0 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
118b0 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c  e. Conceptually,
118c0 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71   a collating seq
118d0 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f  uence consists o
118e0 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20  f a name and.** 
118f0 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75  a comparison rou
11900 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65  tine that define
11910 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74  s the order of t
11920 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a  hat sequence..**
11930 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78  .** If CollSeq.x
11940 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20  Cmp is NULL, it 
11950 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  means that the.*
11960 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
11970 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65  ence is undefine
11980 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c  d.  Indices buil
11990 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65  t on an undefine
119a0 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  d.** collating s
119b0 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20  equence may not 
119c0 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74  be read or writt
119d0 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  en..*/.struct Co
119e0 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a  llSeq {.  char *
119f0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
11a00 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
11a10 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11a20 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64  e, UTF-8 encoded
11a30 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
11a40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
11a50 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e  ext encoding han
11a60 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a  dled by xCmp() *
11a70 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b  /.  void *pUser;
11a80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
11a90 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
11aa0 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  Cmp() */.  int (
11ab0 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74  *xCmp)(void*,int
11ac0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
11ad0 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29  nt, const void*)
11ae0 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29  ;.  void (*xDel)
11af0 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73  (void*);  /* Des
11b00 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65  tructor for pUse
11b10 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
11b20 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20   sort order can 
11b30 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72  be either ASC or
11b40 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e   DESC..*/.#defin
11b50 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20  e SQLITE_SO_ASC 
11b60 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74        0  /* Sort
11b70 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
11b80 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  der */.#define S
11b90 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20  QLITE_SO_DESC   
11ba0 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e     1  /* Sort in
11bb0 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
11bc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
11bd0 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20  TE_SO_UNDEFINED 
11be0 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72  -1 /* No sort or
11bf0 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f  der specified */
11c00 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61  ../*.** Column a
11c10 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a  ffinity types..*
11c20 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20  *.** These used 
11c30 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63  to have mnemonic
11c40 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66   name like 'i' f
11c50 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  or SQLITE_AFF_IN
11c60 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27  TEGER and.** 't'
11c70 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
11c80 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61  TEXT.  But we ca
11c90 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20  n save a little 
11ca0 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76  space and improv
11cb0 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61  e.** the speed a
11cc0 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65   little by numbe
11cd0 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20  ring the values 
11ce0 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a  consecutively..*
11cf0 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20  *.** But rather 
11d00 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20  than start with 
11d10 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e  0 or 1, we begin
11d20 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61 74   with 'A'.  That
11d30 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75   way,.** when mu
11d40 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20  ltiple affinity 
11d50 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74  types are concat
11d60 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74  enated into a st
11d70 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64  ring and.** used
11d80 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61   as the P4 opera
11d90 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65  nd, they will be
11da0 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a   more readable..
11db0 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20  **.** Note also 
11dc0 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63  that the numeric
11dd0 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70   types are group
11de0 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74  ed together so t
11df0 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66  hat testing.** f
11e00 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70  or a numeric typ
11e10 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  e is a single co
11e20 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74  mparison.  And t
11e30 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73 20  he BLOB type is 
11e40 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  first..*/.#defin
11e50 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f  e SQLITE_AFF_BLO
11e60 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69 6e  B     'A'.#defin
11e70 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  e SQLITE_AFF_TEX
11e80 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69 6e  T     'B'.#defin
11e90 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  e SQLITE_AFF_NUM
11ea0 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69 6e  ERIC  'C'.#defin
11eb0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  e SQLITE_AFF_INT
11ec0 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69 6e  EGER  'D'.#defin
11ed0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  e SQLITE_AFF_REA
11ee0 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66 69  L     'E'..#defi
11ef0 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65  ne sqlite3IsNume
11f00 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20  ricAffinity(X)  
11f10 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ((X)>=SQLITE_AFF
11f20 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a  _NUMERIC)../*.**
11f30 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
11f40 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b  MASK values mask
11f50 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66  s off the signif
11f60 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e  icant bits of an
11f70 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c  .** affinity val
11f80 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ue..*/.#define S
11f90 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20  QLITE_AFF_MASK  
11fa0 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41     0x47../*.** A
11fb0 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61  dditional bit va
11fc0 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  lues that can be
11fd0 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66   ORed with an af
11fe0 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a  finity without.*
11ff0 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61  * changing the a
12000 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54  ffinity..**.** T
12010 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  he SQLITE_NOTNUL
12020 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62  L flag is a comb
12030 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45  ination of NULLE
12040 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c  Q and JUMPIFNULL
12050 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61  ..** It causes a
12060 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69  n assert() to fi
12070 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  re if either ope
12080 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72  rand to a compar
12090 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72  ison.** operator
120a0 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73   is NULL.  It is
120b0 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69   added to certai
120c0 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  n comparison ope
120d0 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f  rators to.** pro
120e0 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72  ve that the oper
120f0 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20  ands are always 
12100 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65  NOT NULL..*/.#de
12110 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50  fine SQLITE_KEEP
12120 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f  NULL     0x08  /
12130 2a 20 55 73 65 64 20 62 79 20 76 65 63 74 6f 72  * Used by vector
12140 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65   == or <> */.#de
12150 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
12160 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f  IFNULL   0x10  /
12170 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
12180 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
12190 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
121a0 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
121b0 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x20  /* Store 
121c0 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
121d0 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
121e0 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
121f0 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
12200 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
12210 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
12220 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20  SQLITE_NOTNULL  
12230 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73      0x90  /* Ass
12240 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64  ert that operand
12250 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c  s are never NULL
12260 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62   */../*.** An ob
12270 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
12280 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
12290 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61   each virtual ta
122a0 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a  ble present in.*
122b0 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  * the database s
122c0 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  chema..**.** If 
122d0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
122e0 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74  ema is shared, t
122f0 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65  hen there is one
12300 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
12310 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66  s.** structure f
12320 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65  or each database
12330 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c   connection (sql
12340 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73  ite3*) that uses
12350 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73   the shared.** s
12360 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62  chema. This is b
12370 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61  ecause each data
12380 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12390 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e  requires its own
123a0 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61   unique.** insta
123b0 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  nce of the sqlit
123c0 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
123d0 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
123e0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
123f0 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
12400 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62  on. sqlite3_vtab
12410 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f  * handles can no
12420 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77  t be shared betw
12430 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  een.** database 
12440 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65  connections, eve
12450 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20  n when the rest 
12460 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  of the in-memory
12470 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68   database.** sch
12480 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61  ema is shared, a
12490 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  s the implementa
124a0 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65  tion often store
124b0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  s the database.*
124c0 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  * connection han
124d0 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74  dle passed to it
124e0 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63   via the xConnec
124f0 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29  t() or xCreate()
12500 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e   method.** durin
12510 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
12520 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69   internally. Thi
12530 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
12540 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79  ction handle may
12550 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64  .** then be used
12560 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20   by the virtual 
12570 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
12580 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72  tion to access r
12590 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69  eal tables.** wi
125a0 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
125b0 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
125c0 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
125d0 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a  f the callers.**
125e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
125f0 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
12600 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
12610 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
12620 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
12630 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f   as that used to
12640 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65   execute SQL ope
12650 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76  rations on the v
12660 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  irtual table..**
12670 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f  .** All VTable o
12680 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72  bjects that corr
12690 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67  espond to a sing
126a0 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68  le table in a sh
126b0 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ared.** database
126c0 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74   schema are init
126d0 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ially stored in 
126e0 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f  a linked-list po
126f0 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74  inted to by.** t
12700 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
12710 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65   member variable
12720 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
12730 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65  nding Table obje
12740 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73  ct..** When an s
12750 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
12760 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65   operation is re
12770 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73  quired to access
12780 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
12790 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68  table, it search
127a0 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20  es the list for 
127b0 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20  the VTable that 
127c0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
127d0 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  he.** database c
127e0 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20  onnection doing 
127f0 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f  the preparing so
12800 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63   as to use the c
12810 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65  orrect.** sqlite
12820 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69  3_vtab* handle i
12830 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  n the compiled q
12840 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  uery..**.** When
12850 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61   an in-memory Ta
12860 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65  ble object is de
12870 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70  leted (for examp
12880 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73  le when the.** s
12890 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72  chema is being r
128a0 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65  eloaded for some
128b0 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54   reason), the VT
128c0 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65  able objects are
128d0 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20   not.** deleted 
128e0 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
128f0 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
12900 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
12910 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61  t()ed.** immedia
12920 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
12930 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
12940 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
12950 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
12960 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
12970 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
12980 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
12990 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
129a0 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
129b0 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
129c0 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
129d0 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
129e0 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e  isconnected.** n
129f0 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65  ext time a state
12a00 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64  ment is prepared
12a10 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69   using said sqli
12a20 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f  te3*. This is do
12a30 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64  ne.** to avoid d
12a40 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69  eadlock issues i
12a50 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c  nvolving multipl
12a60 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  e sqlite3.mutex 
12a70 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65  mutexes..** Refe
12a80 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62  r to comments ab
12a90 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c  ove function sql
12aa0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
12ab0 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  st() for an.** e
12ac0 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f  xplanation as to
12ad0 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20   why it is safe 
12ae0 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20  to add an entry 
12af0 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44  to an sqlite3.pD
12b00 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73  isconnect.** lis
12b10 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e  t without holdin
12b20 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  g the correspond
12b30 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ing sqlite3.mute
12b40 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  x mutex..**.** T
12b50 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62  he memory for ob
12b60 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79  jects of this ty
12b70 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c  pe is always all
12b80 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c  ocated by.** sql
12b90 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20  ite3DbMalloc(), 
12ba0 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  using the connec
12bb0 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72  tion handle stor
12bc0 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20  ed in VTable.db 
12bd0 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  as.** the first 
12be0 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
12bf0 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
12c00 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
12c10 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
12c20 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12c30 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12c40 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
12c50 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
12c60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
12c70 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
12c80 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
12c90 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
12ca0 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
12cb0 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
12cc0 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
12cd0 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
12ce0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12cf0 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
12d00 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
12d10 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
12d20 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
12d30 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
12d40 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
12d50 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
12d60 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
12d70 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
12d80 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
12d90 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
12da0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
12db0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
12dc0 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
12dd0 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
12de0 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  * The schema for
12df0 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20   each SQL table 
12e00 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70 72  and view is repr
12e10 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
12e20 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61  y.** by an insta
12e30 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
12e40 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
12e50 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
12e60 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
12e70 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
12e80 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
12e90 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
12ea0 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
12eb0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
12ec0 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
12ed0 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
12ee0 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
12ef0 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
12f00 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
12f10 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
12f20 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
12f30 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
12f40 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
12f50 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
12f60 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
12f70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
12f80 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
12f90 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
12fa0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
12fb0 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
12fc0 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
12fd0 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
12fe0 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
12ff0 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  umn */.  ExprLis
13000 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a  t *pCheck;    /*
13010 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   All CHECK const
13020 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20  raints */.      
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75   /*   ... also u
13050 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61  sed as column na
13060 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45  me list in a VIE
13070 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  W */.  int tnum;
13080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
13090 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66  oot BTree page f
130a0 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  or this table */
130b0 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20  .  u32 nTabRef; 
130c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
130d0 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
130e0 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
130f0 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20   u32 tabFlags;  
13100 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
13110 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
13120 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
13130 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
13140 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
13150 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
13160 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36  e rowid */.  i16
13170 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20   nCol;          
13180 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
13190 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
131a0 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
131b0 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f   nRowLogEst;   /
131c0 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73  * Estimated rows
131d0 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d   in table - from
131e0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
131f0 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
13200 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a  szTabRow;     /*
13210 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
13220 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f  of each table ro
13230 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69  w in bytes */.#i
13240 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
13250 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f  LE_COSTMULT.  Lo
13260 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20  gEst costMult;  
13270 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69     /* Cost multi
13280 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20  plier for using 
13290 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65  this table */.#e
132a0 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e  ndif.  u8 keyCon
132b0 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  f;          /* W
132c0 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73  hat to do in cas
132d0 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20  e of uniqueness 
132e0 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65  conflict on iPKe
132f0 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
13300 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
13310 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c  BLE.  int addCol
13320 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66  Offset;    /* Of
13330 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54  fset in CREATE T
13340 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64  ABLE stmt to add
13350 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f   a new column */
13360 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
13370 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
13380 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
13390 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20  ModuleArg;      
133a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
133b0 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f  uments to the mo
133c0 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  dule */.  char *
133d0 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f  *azModuleArg;  /
133e0 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73  * 0: module 1: s
133f0 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61  chema 2: vtab na
13400 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f  me 3...: args */
13410 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
13420 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  le;     /* List 
13430 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  of VTable object
13440 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  s. */.#endif.  T
13450 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
13460 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74  ;   /* List of t
13470 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69  riggers stored i
13480 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53  n pSchema */.  S
13490 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
134a0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68      /* Schema th
134b0 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73  at contains this
134c0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c   table */.  Tabl
134d0 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20  e *pNextZombie; 
134e0 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20   /* Next on the 
134f0 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62  Parse.pZombieTab
13500 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
13510 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
13520 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46  s for Table.tabF
13530 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f  lags..**.** TF_O
13540 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73  OOHidden applies
13550 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69   to tables or vi
13560 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69 64  ew that have hid
13570 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74  den columns that
13580 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64   are.** followed
13590 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63   by non-hidden c
135a0 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65  olumns.  Example
135b0 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55  :  "CREATE VIRTU
135c0 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47  AL TABLE x USING
135d0 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44  .** vtab1(a HIDD
135e0 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65  EN, b);".  Since
135f0 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69   "b" is a non-hi
13600 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20  dden column but 
13610 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a  "a" is hidden,.*
13620 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64  * the TF_OOOHidd
13630 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75  en attribute wou
13640 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73  ld apply in this
13650 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62   case.  Such tab
13660 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73  les require.** s
13670 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
13680 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72  during INSERT pr
13690 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65  ocessing..*/.#de
136a0 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79  fine TF_Readonly
136b0 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
136c0 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73    /* Read-only s
136d0 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23  ystem table */.#
136e0 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65  define TF_Epheme
136f0 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30 32  ral       0x0002
13700 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65      /* An epheme
13710 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ral table */.#de
13720 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61  fine TF_HasPrima
13730 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20 20  ryKey   0x0004  
13740 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
13750 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
13760 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
13770 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30 30  ncrement   0x000
13780 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20  8    /* Integer 
13790 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61  primary key is a
137a0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a  utoincrement */.
137b0 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53 74  #define TF_HasSt
137c0 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30 31  at1        0x001
137d0 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45  0    /* nRowLogE
137e0 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c 69  st set from sqli
137f0 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65 66  te_stat1 */.#def
13800 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  ine TF_WithoutRo
13810 77 69 64 20 20 20 20 30 78 30 30 32 30 20 20 20  wid    0x0020   
13820 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50   /* No rowid.  P
13830 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
13840 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  e key */.#define
13850 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
13860 69 64 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a  id  0x0040    /*
13870 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65   No user-visible
13880 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20   "rowid" column 
13890 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f  */.#define TF_OO
138a0 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78  OHidden       0x
138b0 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f  0080    /* Out-o
138c0 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63  f-Order hidden c
138d0 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  olumns */.#defin
138e0 65 20 54 46 5f 53 74 61 74 73 55 73 65 64 20 20  e TF_StatsUsed  
138f0 20 20 20 20 20 30 78 30 31 30 30 20 20 20 20 2f       0x0100    /
13900 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  * Query planner 
13910 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63 74  decisions affect
13920 65 64 20 62 79 0a 20 20 20 20 20 20 20 20 20 20  ed by.          
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13940 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49 6e             ** In
13950 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b  dex.aiRowLogEst[
13960 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66  ] values */.#def
13970 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c  ine TF_HasNotNul
13980 6c 20 20 20 20 20 20 30 78 30 32 30 30 20 20 20  l      0x0200   
13990 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54   /* Contains NOT
139a0 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
139b0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74  s */../*.** Test
139c0 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20   to see whether 
139d0 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69  or not a table i
139e0 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
139f0 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64  e.  This is.** d
13a00 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73  one as a macro s
13a10 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62  o that it will b
13a20 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20  e optimized out 
13a30 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20  when virtual.** 
13a40 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73  table support is
13a50 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
13a60 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e  e build..*/.#ifn
13a70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13a80 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
13a90 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
13aa0 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6e  (X)      ((X)->n
13ab0 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73 65  ModuleArg).#else
13ac0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
13ad0 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23  tual(X)      0.#
13ae0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
13af0 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
13b00 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   if a column is 
13b10 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e  hidden.  IsOrdin
13b20 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
13b30 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ).** only works 
13b40 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20  for non-virtual 
13b50 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79  tables (ordinary
13b60 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77   tables and view
13b70 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77  s) and is.** alw
13b80 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73  ays false unless
13b90 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48   SQLITE_ENABLE_H
13ba0 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73  IDDEN_COLUMNS is
13bb0 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a   defined.  The.*
13bc0 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  * IsHiddenColumn
13bd0 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65  () macro is gene
13be0 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a  ral purpose..*/.
13bf0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
13c00 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
13c10 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66  _COLUMNS).#  def
13c20 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
13c30 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28  mn(X)         ((
13c40 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
13c50 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
13c60 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
13c70 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
13c80 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63  lumn(X) (((X)->c
13c90 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
13ca0 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65  G_HIDDEN)!=0).#e
13cb0 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  lif !defined(SQL
13cc0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
13cd0 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65  TABLE).#  define
13ce0 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
13cf0 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29  X)         (((X)
13d00 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
13d10 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
13d20 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
13d30 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
13d40 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20  n(X) 0.#else.#  
13d50 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
13d60 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
13d70 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f   0.#  define IsO
13d80 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
13d90 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  umn(X) 0.#endif.
13da0 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61  ../* Does the ta
13db0 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64  ble have a rowid
13dc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52   */.#define HasR
13dd0 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58  owid(X)     (((X
13de0 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
13df0 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d  _WithoutRowid)==
13e00 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62  0).#define Visib
13e10 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58 29  leRowid(X) (((X)
13e20 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
13e30 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d  NoVisibleRowid)=
13e40 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  =0)../*.** Each 
13e50 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
13e60 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73  traint is an ins
13e70 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
13e80 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
13e90 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67  ..**.** A foreig
13ea0 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61  n key is associa
13eb0 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62  ted with two tab
13ec0 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22  les.  The "from"
13ed0 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65   table is.** the
13ee0 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
13ef0 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e  ains the REFEREN
13f00 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20  CES clause that 
13f10 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65  creates the fore
13f20 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65  ign.** key.  The
13f30 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74   "to" table is t
13f40 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
13f50 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45   named in the RE
13f60 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e  FERENCES clause.
13f70 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69  .** Consider thi
13f80 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a  s example:.**.**
13f90 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
13fa0 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20  E ex1(.**       
13fb0 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
13fc0 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20  Y KEY,.**       
13fd0 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52  b INTEGER CONSTR
13fe0 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e  AINT fk1 REFEREN
13ff0 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20  CES ex2(x).**   
14000 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66    );.**.** For f
14010 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22  oreign key "fk1"
14020 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  , the from-table
14030 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68   is "ex1" and th
14040 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65  e to-table is "e
14050 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65  x2"..** Equivale
14060 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20  nt names:.**.** 
14070 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d      from-table =
14080 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a  = child-table.**
14090 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20         to-table 
140a0 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a  == parent-table.
140b0 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52  **.** Each REFER
140c0 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e  ENCES clause gen
140d0 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e  erates an instan
140e0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
140f0 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
14100 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68   which is attach
14110 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74  ed to the from-t
14120 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61  able.  The to-ta
14130 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69  ble need not exi
14140 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66  st when.** the f
14150 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65  rom-table is cre
14160 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74  ated.  The exist
14170 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74  ence of the to-t
14180 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63  able is not chec
14190 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c  ked..**.** The l
141a0 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e  ist of all paren
141b0 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62  ts for child Tab
141c0 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20  le X is held at 
141d0 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41  X.pFKey..**.** A
141e0 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69   list of all chi
141f0 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c  ldren for a tabl
14200 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68  e named Z (which
14210 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20   might not even 
14220 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c  exist).** is hel
14230 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79  d in Schema.fkey
14240 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68  Hash with a hash
14250 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74   key of Z..*/.st
14260 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61  ruct FKey {.  Ta
14270 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20  ble *pFrom;     
14280 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e  /* Table contain
14290 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43  ing the REFERENC
142a0 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20  ES clause (aka: 
142b0 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79  Child) */.  FKey
142c0 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a   *pNextFrom;  /*
142d0 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20   Next FKey with 
142e0 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f  the same in pFro
142f0 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f  m. Next parent o
14300 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61  f pFrom */.  cha
14310 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f  r *zTo;        /
14320 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20  * Name of table 
14330 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69  that the key poi
14340 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72  nts to (aka: Par
14350 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ent) */.  FKey *
14360 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e  pNextTo;    /* N
14370 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d  ext with the sam
14380 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c  e zTo. Next chil
14390 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46  d of zTo. */.  F
143a0 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20  Key *pPrevTo;   
143b0 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74   /* Previous wit
143c0 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a  h the same zTo *
143d0 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  /.  int nCol;   
143e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
143f0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
14400 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45  is key */.  /* E
14410 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37  V: R-30323-21917
14420 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72   */.  u8 isDefer
14430 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72  red;       /* Tr
14440 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
14450 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66   checking is def
14460 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49  erred till COMMI
14470 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f  T */.  u8 aActio
14480 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  n[2];        /* 
14490 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e  ON DELETE and ON
144a0 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c   UPDATE actions,
144b0 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f   respectively */
144c0 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72  .  Trigger *apTr
144d0 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67  igger[2];/* Trig
144e0 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e  gers for aAction
144f0 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  [] actions */.  
14500 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b  struct sColMap {
14510 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67        /* Mapping
14520 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70   of columns in p
14530 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  From to columns 
14540 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e  in zTo */.    in
14550 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20  t iFrom;        
14560 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
14570 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20  column in pFrom 
14580 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f  */.    char *zCo
14590 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
145a0 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  Name of column i
145b0 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20  n zTo.  If NULL 
145c0 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  use PRIMARY KEY 
145d0 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20  */.  } aCol[1]; 
145e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
145f0 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
14600 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73   of nCol columns
14610 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51   */.};../*.** SQ
14620 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61  Lite supports ma
14630 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79  ny different way
14640 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63  s to resolve a c
14650 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
14660 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72  or.  ROLLBACK pr
14670 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
14680 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  hat a constraint
14690 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61   violation.** ca
146a0 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69  uses the operati
146b0 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f  on in process to
146c0 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68   fail and for th
146d0 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
146e0 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72  ction.** to be r
146f0 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f  olled back.  ABO
14700 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  RT processing me
14710 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ans the operatio
14720 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20  n in process.** 
14730 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72  fails and any pr
14740 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d  ior changes from
14750 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74   that one operat
14760 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f  ion are backed o
14770 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74  ut,.** but the t
14780 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
14790 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  t rolled back.  
147a0 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20  FAIL processing 
147b0 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68  means that.** th
147c0 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
147d0 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e  rogress stops an
147e0 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72  d returns an err
147f0 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72  or code.  But pr
14800 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64  ior.** changes d
14810 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f  ue to the same o
14820 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74  peration are not
14830 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20   backed out and 
14840 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f  no rollback.** o
14850 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d  ccurs.  IGNORE m
14860 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61  eans that the pa
14870 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61  rticular row tha
14880 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e  t caused the con
14890 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
148a0 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64   is not inserted
148b0 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72   or updated.  Pr
148c0 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
148d0 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a  es and no error.
148e0 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  ** is returned. 
148f0 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74   REPLACE means t
14900 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20  hat preexisting 
14910 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68  database rows th
14920 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55  at caused.** a U
14930 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
14940 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72   violation are r
14950 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74  emoved so that t
14960 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72  he new insert or
14970 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70  .** update can p
14980 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73  roceed.  Process
14990 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e  ing continues an
149a0 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65  d no error is re
149b0 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45  ported..**.** RE
149c0 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c  STRICT, SETNULL,
149d0 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74   and CASCADE act
149e0 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20  ions apply only 
149f0 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e  to foreign keys.
14a00 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20  .** RESTRICT is 
14a10 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52  the same as ABOR
14a20 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20  T for IMMEDIATE 
14a30 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64  foreign keys and
14a40 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20   the.** same as 
14a50 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46  ROLLBACK for DEF
14a60 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54  ERRED keys.  SET
14a70 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20  NULL means that 
14a80 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
14a90 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ey is set to NUL
14aa0 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e  L.  CASCADE mean
14ab0 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20  s that a DELETE 
14ac0 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65  or UPDATE of the
14ad0 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74  .** referenced t
14ae0 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70  able row is prop
14af0 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20  agated into the 
14b00 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74  row that holds t
14b10 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65  he.** foreign ke
14b20 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  y..**.** The fol
14b30 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20  lowing symbolic 
14b40 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20  values are used 
14b50 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20  to record which 
14b60 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f  type.** of actio
14b70 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64  n to take..*/.#d
14b80 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20  efine OE_None   
14b90 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69    0   /* There i
14ba0 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20  s no constraint 
14bb0 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66  to check */.#def
14bc0 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  ine OE_Rollback 
14bd0 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20  1   /* Fail the 
14be0 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f  operation and ro
14bf0 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73  llback the trans
14c00 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
14c10 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20  e OE_Abort    2 
14c20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68    /* Back out ch
14c30 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20  anges but do no 
14c40 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63  rollback transac
14c50 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
14c60 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20  OE_Fail     3   
14c70 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72  /* Stop the oper
14c80 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20  ation but leave 
14c90 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65  all prior change
14ca0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  s */.#define OE_
14cb0 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20  Ignore   4   /* 
14cc0 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72  Ignore the error
14cd0 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20  . Do not do the 
14ce0 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
14cf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
14d00 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44  eplace  5   /* D
14d10 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72  elete existing r
14d20 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49  ecord, then do I
14d30 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
14d40 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 55 70  */.#define OE_Up
14d50 64 61 74 65 20 20 20 36 20 20 20 2f 2a 20 50 72  date   6   /* Pr
14d60 6f 63 65 73 73 20 61 73 20 61 20 44 4f 20 55 50  ocess as a DO UP
14d70 44 41 54 45 20 69 6e 20 61 6e 20 75 70 73 65 72  DATE in an upser
14d80 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
14d90 52 65 73 74 72 69 63 74 20 37 20 20 20 2f 2a 20  Restrict 7   /* 
14da0 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d  OE_Abort for IMM
14db0 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62  EDIATE, OE_Rollb
14dc0 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ack for DEFERRED
14dd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
14de0 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f 2a 20 53  etNull  8   /* S
14df0 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
14e00 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  ey value to NULL
14e10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
14e20 65 74 44 66 6c 74 20 20 39 20 20 20 2f 2a 20 53  etDflt  9   /* S
14e30 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
14e40 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20  ey value to its 
14e50 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69  default */.#defi
14e60 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 31  ne OE_Cascade  1
14e70 30 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68  0  /* Cascade th
14e80 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
14e90 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20  fine OE_Default 
14ea0 20 31 31 20 20 2f 2a 20 44 6f 20 77 68 61 74 65   11  /* Do whate
14eb0 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  ver the default 
14ec0 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f  action is */.../
14ed0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
14ee0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
14ef0 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  g structure is p
14f00 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72  assed as the fir
14f10 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74  st.** argument t
14f20 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79  o sqlite3VdbeKey
14f30 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75  Compare and is u
14f40 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74  sed to control t
14f50 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
14f60 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65   of the two inde
14f70 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  x keys..**.** No
14f80 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64  te that aSortOrd
14f90 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d  er[] and aColl[]
14fa0 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73   have nField+1 s
14fb0 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20  lots.  There.** 
14fc0 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73  are nField slots
14fd0 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73   for the columns
14fe0 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65   of an index the
14ff0 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74  n one extra slot
15000 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69  .** for the rowi
15010 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  d at the end..*/
15020 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20  .struct KeyInfo 
15030 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20  {.  u32 nRef;   
15040 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15050 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20  r of references 
15060 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20  to this KeyInfo 
15070 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65  object */.  u8 e
15080 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
15090 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
150a0 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51   - one of the SQ
150b0 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73  LITE_UTF* values
150c0 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46 69   */.  u16 nKeyFi
150d0 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  eld;      /* Num
150e0 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d  ber of key colum
150f0 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ns in the index 
15100 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69 65  */.  u16 nAllFie
15110 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74 61  ld;      /* Tota
15120 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75  l columns, inclu
15130 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f 74  ding key plus ot
15140 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  hers */.  sqlite
15150 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
15160 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   The database co
15170 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  nnection */.  u8
15180 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
15190 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20    /* Sort order 
151a0 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e  for each column.
151b0 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61   */.  CollSeq *a
151c0 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c  Coll[1];  /* Col
151d0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
151e0 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66  for each term of
151f0 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a   the key */.};..
15200 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63  /*.** This objec
15210 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64  t holds a record
15220 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20   which has been 
15230 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
15240 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69  individual.** fi
15250 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75  elds, for the pu
15260 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20  rposes of doing 
15270 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a  a comparison..**
15280 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20  .** A record is 
15290 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  an object that c
152a0 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
152b0 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61  ore fields of da
152c0 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61  ta..** Records a
152d0 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  re used to store
152e0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
152f0 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
15300 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  to store.** the 
15310 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e  key of an index.
15320 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e    A blob encodin
15330 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73  g of a record is
15340 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74   created by.** t
15350 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
15360 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56   opcode of the V
15370 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73  DBE and is disas
15380 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a  sembled by the.*
15390 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  * OP_Column opco
153a0 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73  de..**.** An ins
153b0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
153c0 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61  ject serves as a
153d0 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67   "key" for doing
153e0 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20   a search on.** 
153f0 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e  an index b+tree.
15400 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65   The goal of the
15410 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69   search is to fi
15420 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  nd the entry tha
15430 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74  t.** is closed t
15440 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69  o the key descri
15450 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65  bed by this obje
15460 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74  ct.  This object
15470 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a   might hold.** j
15480 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20  ust a prefix of 
15490 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75  the key.  The nu
154a0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
154b0 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b  s given by.** pK
154c0 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a  eyInfo->nField..
154d0 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64  **.** The r1 and
154e0 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74   r2 fields are t
154f0 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74  he values to ret
15500 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20  urn if this key 
15510 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  is less than.** 
15520 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
15530 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72  a key in the btr
15540 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ee, respectively
15550 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72  .  These are nor
15560 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20  mally.** -1 and 
15570 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  +1 respectively,
15580 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e   but might be in
15590 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64  verted to +1 and
155a0 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65   -1 if the b-tre
155b0 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20  e.** is in DESC 
155c0 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  order..**.** The
155d0 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20   key comparison 
155e0 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c  functions actual
155f0 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c  ly return defaul
15600 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66  t_rc when they f
15610 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73  ind.** an equals
15620 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65   comparison.  de
15630 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
15640 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49  -1, 0, or +1.  I
15650 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d  f there are.** m
15660 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20  ultiple entries 
15670 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69  in the b-tree wi
15680 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20  th the same key 
15690 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69  (when only looki
156a0 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72  ng.** at the fir
156b0 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  st pKeyInfo->nFi
156c0 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61  elds,) then defa
156d0 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65  ult_rc can be se
156e0 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61  t to -1 to.** ca
156f0 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74  use the search t
15700 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20  o find the last 
15710 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20  match, or +1 to 
15720 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
15730 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20   to.** find the 
15740 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a  first match..**.
15750 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61  ** The key compa
15760 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  rison functions 
15770 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20  will set eqSeen 
15780 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20  to true if they 
15790 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20  ever.** get and 
157a0 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68  equal results wh
157b0 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69  en comparing thi
157c0 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61  s structure to a
157d0 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a   b-tree record..
157e0 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f  ** When default_
157f0 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63  rc!=0, the searc
15800 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f  h might end up o
15810 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d  n the record imm
15820 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f  ediately.** befo
15830 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74  re the first mat
15840 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c  ch or immediatel
15850 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74  y after the last
15860 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20   match.  The.** 
15870 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c  eqSeen field wil
15880 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68  l indicate wheth
15890 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61  er or not an exa
158a0 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20  ct match exists 
158b0 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65  in the.** b-tree
158c0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
158d0 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
158e0 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
158f0 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
15900 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
15910 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
15920 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20  Mem *aMem;      
15930 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f      /* Values */
15940 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
15950 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15960 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
15970 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64  pMem[] */.  i8 d
15980 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20  efault_rc;      
15990 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
159a0 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65  sult if keys are
159b0 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65   equal */.  u8 e
159c0 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
159d0 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65  /* Error detecte
159e0 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70  d by xRecordComp
159f0 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20  are (CORRUPT or 
15a00 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72  NOMEM) */.  i8 r
15a10 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1;              
15a20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
15a30 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68 73  rn if (lhs < rhs
15a40 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20  ) */.  i8 r2;   
15a50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
15a60 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66  lue to return if
15a70 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a   (lhs > rhs) */.
15a80 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20    u8 eqSeen;    
15a90 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
15aa0 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d   an equality com
15ab0 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e  parison has been
15ac0 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a   seen */.};.../*
15ad0 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64  .** Each SQL ind
15ae0 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ex is represente
15af0 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61  d in memory by a
15b00 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
15b10 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
15b20 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
15b30 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  The columns of t
15b40 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72  he table that ar
15b50 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  e to be indexed 
15b60 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a  are described.**
15b70 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e   by the aiColumn
15b80 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73  [] field of this
15b90 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72   structure.  For
15ba0 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73   example, suppos
15bb0 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65  e.** we have the
15bc0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65   following table
15bd0 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a   and index:.**.*
15be0 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
15bf0 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63  LE Ex1(c1 int, c
15c00 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b  2 int, c3 text);
15c10 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49  .**     CREATE I
15c20 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28  NDEX Ex2 ON Ex1(
15c30 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e  c3,c1);.**.** In
15c40 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63   the Table struc
15c50 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20  ture describing 
15c60 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63  Ex1, nCol==3 bec
15c70 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a  ause there are.*
15c80 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20  * three columns 
15c90 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
15ca0 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75  n the Index stru
15cb0 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
15cc0 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e  .** Ex2, nColumn
15cd0 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74  ==2 since 2 of t
15ce0 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  he 3 columns of 
15cf0 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e  Ex1 are indexed.
15d00 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
15d10 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c   aiColumn is {2,
15d20 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30   0}.  aiColumn[0
15d30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65  ]==2 because the
15d40 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  .** first column
15d50 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
15d60 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c3) has an index
15d70 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f   of 2 in Ex1.aCo
15d80 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f  l[]..** The seco
15d90 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  nd column to be 
15da0 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73  indexed (c1) has
15db0 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69   an index of 0 i
15dc0 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c  n.** Ex1.aCol[],
15dd0 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c   hence Ex2.aiCol
15de0 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a  umn[1]==0..**.**
15df0 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72   The Index.onErr
15e00 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69  or field determi
15e10 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
15e20 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63  ot the indexed c
15e30 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62  olumns.** must b
15e40 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61  e unique and wha
15e50 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20  t to do if they 
15e60 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49  are not.  When I
15e70 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f  ndex.onError=OE_
15e80 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e  None,.** it mean
15e90 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20  s this is not a 
15ea0 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f  unique index.  O
15eb0 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61  therwise it is a
15ec0 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a   unique index.**
15ed0 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f   and the value o
15ee0 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  f Index.onError 
15ef0 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69  indicate the whi
15f00 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ch conflict reso
15f10 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69  lution.** algori
15f20 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68  thm to employ wh
15f30 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70  enever an attemp
15f40 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73  t is made to ins
15f50 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65  ert a non-unique
15f60 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a  .** element..**.
15f70 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67  ** While parsing
15f80 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
15f90 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  or CREATE INDEX 
15fa0 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64  statement in ord
15fb0 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74  er to.** generat
15fc0 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20  e VDBE code (as 
15fd0 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69  opposed to parsi
15fe0 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d  ng one read from
15ff0 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   an sqlite_maste
16000 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61  r.** table as pa
16010 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e  rt of parsing an
16020 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
16030 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e  se schema), tran
16040 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a  sient instances.
16050 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
16060 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61  ture may be crea
16070 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ted. In this cas
16080 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d  e the Index.tnum
16090 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20   variable is.** 
160a0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
160b0 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56  e address of a V
160c0 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c  DBE instruction,
160d0 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20   not a database 
160e0 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28  page.** number (
160f0 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20  it cannot - the 
16100 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73  database page is
16110 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75   not allocated u
16120 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a  ntil the VDBE.**
16130 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63   program is exec
16140 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65  uted). See conve
16150 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64  rtToWithoutRowid
16160 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61  Table() for deta
16170 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ils..*/.struct I
16180 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndex {.  char *z
16190 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
161a0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
161b0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36  s index */.  i16
161c0 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20   *aiColumn;     
161d0 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63        /* Which c
161e0 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
161f0 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20  by this index.  
16200 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f  1st is 0 */.  Lo
16210 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73  gEst *aiRowLogEs
16220 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41  t;     /* From A
16230 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77  NALYZE: Est. row
16240 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61  s selected by ea
16250 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54  ch column */.  T
16260 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20  able *pTable;   
16270 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53          /* The S
16280 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  QL table being i
16290 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72  ndexed */.  char
162a0 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
162b0 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
162c0 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
162d0 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
162e0 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
162f0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
16300 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e    /* The next in
16310 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
16320 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62  ith the same tab
16330 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  le */.  Schema *
16340 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
16350 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
16360 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78  ining this index
16370 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
16380 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
16390 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * for each colum
163a0 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46  n: True==DESC, F
163b0 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63  alse==ASC */.  c
163c0 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f  onst char **azCo
163d0 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ll;     /* Array
163e0 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65   of collation se
163f0 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72  quence names for
16400 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72   index */.  Expr
16410 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b   *pPartIdxWhere;
16420 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
16430 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c  ause for partial
16440 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78   indices */.  Ex
16450 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72  prList *aColExpr
16460 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  ;      /* Column
16470 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
16480 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
16490 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42             /* DB
164a0 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67   Page containing
164b0 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e   root of this in
164c0 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  dex */.  LogEst 
164d0 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20  szIdxRow;       
164e0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61    /* Estimated a
164f0 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20  verage row size 
16500 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31  in bytes */.  u1
16510 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20  6 nKeyCol;      
16520 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16530 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d   of columns form
16540 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20  ing the key */. 
16550 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   u16 nColumn;   
16560 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16570 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ber of columns s
16580 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64  tored in the ind
16590 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72  ex */.  u8 onErr
165a0 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  or;             
165b0 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45   /* OE_Abort, OE
165c0 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c  _Ignore, OE_Repl
165d0 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20  ace, or OE_None 
165e0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64  */.  unsigned id
165f0 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a  xType:2;      /*
16600 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50   1==UNIQUE, 2==P
16610 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43  RIMARY KEY, 0==C
16620 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20  REATE INDEX */. 
16630 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64   unsigned bUnord
16640 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65  ered:1;   /* Use
16650 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20   this index for 
16660 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73  == or IN queries
16670 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67   only */.  unsig
16680 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a  ned uniqNotNull:
16690 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55  1;  /* True if U
166a0 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
166b0 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d  LL for all colum
166c0 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ns */.  unsigned
166d0 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20   isResized:1;   
166e0 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69   /* True if resi
166f0 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20  zeIndexObject() 
16700 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
16710 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
16720 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a  Covering:1;   /*
16730 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73   True if this is
16740 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65   a covering inde
16750 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  x */.  unsigned 
16760 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20  noSkipScan:1;   
16770 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f  /* Do not try to
16780 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69   use skip-scan i
16790 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69  f true */.  unsi
167a0 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31 3b  gned hasStat1:1;
167b0 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67       /* aiRowLog
167c0 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65 20  Est values come 
167d0 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
167e0 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  1 */.  unsigned 
167f0 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20 20 20  bNoQuery:1;     
16800 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 74 68  /* Do not use th
16810 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70 74 69  is index to opti
16820 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a 2f 0a  mize queries */.
16830 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
16840 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
16850 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c  AT4.  int nSampl
16860 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
16870 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  * Number of elem
16880 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b  ents in aSample[
16890 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70  ] */.  int nSamp
168a0 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  leCol;          
168b0 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78  /* Size of Index
168c0 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e  Sample.anEq[] an
168d0 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f  d so on */.  tRo
168e0 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20  wcnt *aAvgEq;   
168f0 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65        /* Average
16900 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20   nEq values for 
16910 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d  keys not in aSam
16920 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61  ple */.  IndexSa
16930 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20  mple *aSample;  
16940 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20    /* Samples of 
16950 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65  the left-most ke
16960 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  y */.  tRowcnt *
16970 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20  aiRowEst;       
16980 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
16990 69 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f  ic stat1 data fo
169a0 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  r this index */.
169b0 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73    tRowcnt nRowEs
169c0 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f  t0;        /* No
169d0 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75  n-logarithmic nu
169e0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
169f0 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e  the index */.#en
16a00 64 69 66 0a 20 20 42 69 74 6d 61 73 6b 20 63 6f  dif.  Bitmask co
16a10 6c 4e 6f 74 49 64 78 65 64 3b 20 20 20 20 20 2f  lNotIdxed;     /
16a20 2a 20 30 20 66 6f 72 20 75 6e 69 6e 64 65 78 65  * 0 for unindexe
16a30 64 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 54 61  d columns in pTa
16a40 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  b */.};../*.** A
16a50 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
16a60 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a  r Index.idxType.
16a70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
16a80 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46  E_IDXTYPE_APPDEF
16a90 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65        0   /* Cre
16aa0 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
16ab0 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69  E INDEX */.#defi
16ac0 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
16ad0 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20  E_UNIQUE      1 
16ae0 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20    /* Implements 
16af0 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
16b00 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  int */.#define S
16b10 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
16b20 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a  IMARYKEY  2   /*
16b30 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20   Is the PRIMARY 
16b40 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c  KEY for the tabl
16b50 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  e */../* Return 
16b60 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20  true if index X 
16b70 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  is a PRIMARY KEY
16b80 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
16b90 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e  e IsPrimaryKeyIn
16ba0 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64  dex(X)  ((X)->id
16bb0 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44  xType==SQLITE_ID
16bc0 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
16bd0 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  )../* Return tru
16be0 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
16bf0 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a  a UNIQUE index *
16c00 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71  /.#define IsUniq
16c10 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20 20  ueIndex(X)      
16c20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f  ((X)->onError!=O
16c30 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20  E_None)../* The 
16c40 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d  Index.aiColumn[]
16c50 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d   values are norm
16c60 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20 69 6e  ally positive in
16c70 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74  teger.  But.** t
16c80 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 6e 65  here are some ne
16c90 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 74 68  gative values th
16ca0 61 74 20 68 61 76 65 20 73 70 65 63 69 61 6c 20  at have special 
16cb0 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66  meaning:.*/.#def
16cc0 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20 20 20  ine XN_ROWID    
16cd0 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e 64   (-1)     /* Ind
16ce0 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74  exed column is t
16cf0 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  he rowid */.#def
16d00 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20 20 20  ine XN_EXPR     
16d10 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e 64   (-2)     /* Ind
16d20 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61  exed column is a
16d30 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  n expression */.
16d40 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70  ./*.** Each samp
16d50 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  le stored in the
16d60 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
16d70 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  ble is represent
16d80 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20  ed in memory.** 
16d90 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72  using a structur
16da0 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20  e of this type. 
16db0 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
16dc0 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66  on at the top of
16dd0 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e   the.** analyze.
16de0 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f  c source file fo
16df0 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
16e00 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
16e10 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  uct IndexSample 
16e20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20  {.  void *p;    
16e30 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
16e40 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f   to sampled reco
16e50 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  rd */.  int n;  
16e60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
16e70 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62  e of record in b
16e80 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  ytes */.  tRowcn
16e90 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45  t *anEq;    /* E
16ea0 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
16eb0 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79  ws where the key
16ec0 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d   equals this sam
16ed0 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
16ee0 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73   *anLt;    /* Es
16ef0 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
16f00 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c  s where key is l
16f10 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
16f20 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
16f30 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45  t *anDLt;   /* E
16f40 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  st. number of di
16f50 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73  stinct keys less
16f60 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
16f70 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  e */.};../*.** E
16f80 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67  ach token coming
16f90 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65   out of the lexe
16fa0 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  r is an instance
16fb0 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75   of.** this stru
16fc0 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61  cture.  Tokens a
16fd0 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  re also used as 
16fe0 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65  part of an expre
16ff0 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  ssion..**.** Not
17000 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20  e if Token.z==0 
17010 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61  then Token.dyn a
17020 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75  nd Token.n are u
17030 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20  ndefined and.** 
17040 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64  may contain rand
17050 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e  om values.  Do n
17060 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75  ot make any assu
17070 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f  mptions about To
17080 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54  ken.dyn.** and T
17090 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65  oken.n when Toke
170a0 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63  n.z==0..*/.struc
170b0 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73  t Token {.  cons
170c0 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f  t char *z;     /
170d0 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f  * Text of the to
170e0 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74  ken.  Not NULL-t
170f0 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20  erminated! */.  
17100 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20  unsigned int n; 
17110 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17120 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
17130 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a  is token */.};..
17140 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
17150 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
17160 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
17170 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
17180 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
17190 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54  ode for a SELECT
171a0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
171b0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
171c0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70  ns..**.** If Exp
171d0 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c  r.op==TK_AGG_COL
171e0 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55  UMN or TK_AGG_FU
171f0 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72  NCTION then Expr
17200 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a  .pAggInfo is a.*
17210 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  * pointer to thi
17220 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
17230 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66  e Expr.iColumn f
17240 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65  ield is the inde
17250 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  x in.** AggInfo.
17260 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66  aCol[] or AggInf
17270 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66  o.aFunc[] of inf
17280 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
17290 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
172a0 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64  ode for that nod
172b0 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f  e..**.** AggInfo
172c0 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67  .pGroupBy and Ag
172d0 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70  gInfo.aFunc.pExp
172e0 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64  r point to field
172f0 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20  s within the.** 
17300 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20  original Select 
17310 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
17320 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c  escribes the SEL
17330 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
17340 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20  These.** fields 
17350 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
17360 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61  e freed when dea
17370 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67  llocating the Ag
17380 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e  gInfo structure.
17390 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e  .*/.struct AggIn
173a0 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74  fo {.  u8 direct
173b0 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Mode;          /
173c0 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69  * Direct renderi
173d0 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61  ng mode means ta
173e0 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79  ke data directly
173f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17400 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72             ** fr
17410 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  om source tables
17420 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f   rather than fro
17430 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a  m accumulators *
17440 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e  /.  u8 useSortin
17450 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49  gIdx;       /* I
17460 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72  n direct mode, r
17470 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72  eference the sor
17480 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65  ting index rathe
17490 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
174a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
174b0 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  han the source t
174c0 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  able */.  int so
174d0 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
174e0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
174f0 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e  er of the sortin
17500 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
17510 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b   sortingIdxPTab;
17520 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
17530 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d  umber of pseudo-
17540 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  table */.  int n
17550 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
17560 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17570 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
17580 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
17590 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52    int mnReg, mxR
175a0 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e  eg;       /* Ran
175b0 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  ge of registers 
175c0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43  allocated for aC
175d0 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a  ol and aFunc */.
175e0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
175f0 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65  upBy;     /* The
17600 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65   group by clause
17610 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
17620 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a  Info_col {    /*
17630 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   For each column
17640 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20   used in source 
17650 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61  tables */.    Ta
17660 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
17670 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65         /* Source
17680 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
17690 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
176a0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
176b0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
176c0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
176d0 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
176e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
176f0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74  olumn number wit
17700 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  hin the source t
17710 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
17720 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20  iSorterColumn;  
17730 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
17740 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72  umber in the sor
17750 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
17760 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
17770 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
17780 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
17790 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
177a0 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78  ulator */.    Ex
177b0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
177c0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72         /* The or
177d0 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f  iginal expressio
177e0 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a  n */.  } *aCol;.
177f0 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20    int nColumn;  
17800 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17810 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72  ber of used entr
17820 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f  ies in aCol[] */
17830 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61  .  int nAccumula
17840 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  tor;       /* Nu
17850 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
17860 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67  that show throug
17870 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  h to the output.
17880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17890 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64             ** Ad
178a0 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
178b0 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61   are used only a
178c0 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  s parameters to.
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67            ** agg
178f0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
17900 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
17910 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a  Info_func {   /*
17920 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67   For each aggreg
17930 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ate function */.
17940 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17960 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64  Expression encod
17970 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
17980 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20   */.    FuncDef 
17990 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
179a0 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74   /* The aggregat
179b0 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  e function imple
179c0 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
179d0 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
179e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
179f0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
17a00 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
17a10 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  lator */.    int
17a20 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   iDistinct;     
17a30 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72        /* Ephemer
17a40 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f  al table used to
17a50 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43   enforce DISTINC
17a60 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b  T */.  } *aFunc;
17a70 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20  .  int nFunc;   
17a80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17a90 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
17aa0 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b  in aFunc[] */.};
17ab0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
17ac0 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20  type ynVar is a 
17ad0 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
17ae0 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72  either 16-bit or
17af0 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61   32-bit..** Usua
17b00 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74  lly it is 16-bit
17b10 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54  s.  But if SQLIT
17b20 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
17b30 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72  UMBER is greater
17b40 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77  .** than 32767 w
17b50 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69  e have to make i
17b60 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69  t 32-bit.  16-bi
17b70 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62  t is preferred b
17b80 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65  ecause.** it use
17b90 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e  s less memory in
17ba0 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74   the Expr object
17bb0 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67  , which is a big
17bc0 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20   memory user.** 
17bd0 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  in systems with 
17be0 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64  lots of prepared
17bf0 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e   statements.  An
17c00 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f  d few applicatio
17c10 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20  ns.** need more 
17c20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72  than about 10 or
17c30 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20   20 variables.  
17c40 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65  But some extreme
17c50 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74   users want.** t
17c60 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20  o have prepared 
17c70 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
17c80 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61  over 32767 varia
17c90 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68  bles, and for th
17ca0 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e  em.** the option
17cb0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61   is available (a
17cc0 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e  t compile-time).
17cd0 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
17ce0 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
17cf0 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65  ER<=32767.typede
17d00 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c  f i16 ynVar;.#el
17d10 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79  se.typedef int y
17d20 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  nVar;.#endif../*
17d30 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66  .** Each node of
17d40 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
17d50 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  n the parse tree
17d60 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
17d70 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
17d80 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  ture..**.** Expr
17d90 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64  .op is the opcod
17da0 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70  e. The integer p
17db0 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65  arser token code
17dc0 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20  s are reused.** 
17dd0 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e  as opcodes here.
17de0 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   For example, th
17df0 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73  e parser defines
17e00 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20   TK_GE to be an 
17e10 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20  integer.** code 
17e20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
17e30 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20   ">=" operator. 
17e40 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65  This same intege
17e50 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64  r code is reused
17e60 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74  .** to represent
17e70 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61   the greater-tha
17e80 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70  n-or-equal-to op
17e90 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78  erator in the ex
17ea0 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65  pression.** tree
17eb0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
17ec0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
17ed0 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f  SQL literal (TK_
17ee0 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41  INTEGER, TK_FLOA
17ef0 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f  T, TK_BLOB,.** o
17f00 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68  r TK_STRING), th
17f10 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
17f20 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20  ntains the text 
17f30 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72  of the SQL liter
17f40 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78  al. If.** the ex
17f50 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61  pression is a va
17f60 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41  riable (TK_VARIA
17f70 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  BLE), then Expr.
17f80 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
17f90 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  he.** variable n
17fa0 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  ame. Finally, if
17fb0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17fc0 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
17fd0 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29  on (TK_FUNCTION)
17fe0 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74  ,.** then Expr.t
17ff0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
18000 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  e name of the fu
18010 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78  nction..**.** Ex
18020 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78  pr.pRight and Ex
18030 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65  pr.pLeft are the
18040 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
18050 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  subexpressions o
18060 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70  f a.** binary op
18070 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f  erator. Either o
18080 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55  r both may be NU
18090 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78  LL..**.** Expr.x
180a0 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74  .pList is a list
180b0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66   of arguments if
180c0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
180d0 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
180e0 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78  on,.** a CASE ex
180f0 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49  pression or an I
18100 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  N expression of 
18110 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
18120 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29  IN (<y>, <z>...)
18130 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65  "..** Expr.x.pSe
18140 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20  lect is used if 
18150 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
18160 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f  s a sub-select o
18170 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
18180 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22  of.** the form "
18190 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54  <lhs> IN (SELECT
181a0 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45   ...)". If the E
181b0 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20  P_xIsSelect bit 
181c0 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a  is set in the.**
181d0 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
181e0 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53  , then Expr.x.pS
181f0 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20  elect is valid. 
18200 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e  Otherwise, Expr.
18210 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61  x.pList is.** va
18220 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78  lid..**.** An ex
18230 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
18240 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44  form ID or ID.ID
18250 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c   refers to a col
18260 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a  umn in a table..
18270 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72  ** For such expr
18280 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70  essions, Expr.op
18290 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f   is set to TK_CO
182a0 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54  LUMN and Expr.iT
182b0 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69  able is.** the i
182c0 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75  nteger cursor nu
182d0 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63  mber of a VDBE c
182e0 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
182f0 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64  o that table and
18300 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  .** Expr.iColumn
18310 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   is the column n
18320 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70  umber for the sp
18330 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20  ecific column.  
18340 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73  If the.** expres
18350 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20  sion is used as 
18360 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61  a result in an a
18370 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c  ggregate SELECT,
18380 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c   then the.** val
18390 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65  ue is also store
183a0 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41  d in the Expr.iA
183b0 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  gg column in the
183c0 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68   aggregate so th
183d0 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20  at.** it can be 
183e0 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61  accessed after a
183f0 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72  ll aggregates ar
18400 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a  e computed..**.*
18410 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
18420 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e  ion is an unboun
18430 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65  d variable marke
18440 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61  r (a question ma
18450 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20  rk.** character 
18460 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69  '?' in the origi
18470 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68  nal SQL) then th
18480 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f  e Expr.iTable ho
18490 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a  lds the index.**
184a0 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74   number for that
184b0 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   variable..**.**
184c0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
184d0 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79  on is a subquery
184e0 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75   then Expr.iColu
184f0 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  mn holds an inte
18500 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ger.** register 
18510 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e  number containin
18520 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  g the result of 
18530 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49  the subquery.  I
18540 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72  f the.** subquer
18550 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61  y gives a consta
18560 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20  nt result, then 
18570 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49  iTable is -1.  I
18580 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a  f the subquery.*
18590 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72  * gives a differ
185a0 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69  ent answer at di
185b0 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75  fferent times du
185c0 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70  ring statement p
185d0 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65  rocessing.** the
185e0 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20  n iTable is the 
185f0 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62  address of a sub
18600 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d  routine that com
18610 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65  putes the subque
18620 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ry..**.** If the
18630 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65   Expr is of type
18640 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20   OP_Column, and 
18650 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20  the table it is 
18660 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a  selecting from.*
18670 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c  * is a disk tabl
18680 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22  e or the "old.*"
18690 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74   pseudo-table, t
186a0 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20  hen pTab points 
186b0 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  to the.** corres
186c0 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65  ponding table de
186d0 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  finition..**.** 
186e0 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53  ALLOCATION NOTES
186f0 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a  :.**.** Expr obj
18700 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c  ects can use a l
18710 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  ot of memory spa
18720 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73  ce in database s
18730 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65  chema.  To.** he
18740 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79  lp reduce memory
18750 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73   requirements, s
18760 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72  ometimes an Expr
18770 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a   object will be.
18780 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41  ** truncated.  A
18790 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65  nd to reduce the
187a0 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
187b0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73  y allocations, s
187c0 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20  ometimes.** two 
187d0 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a  or more Expr obj
187e0 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f  ects will be sto
187f0 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  red in a single 
18800 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
18810 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77  n,.** together w
18820 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  ith Expr.zToken 
18830 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49  strings..**.** I
18840 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
18850 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   and EP_TokenOnl
18860 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20  y flags are set 
18870 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20  when.** an Expr 
18880 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61  object is trunca
18890 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65  ted.  When EP_Re
188a0 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68  duced is set, th
188b0 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68  en all.** the ch
188c0 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ild Expr objects
188d0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65   in the Expr.pLe
188e0 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67  ft and Expr.pRig
188f0 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61  ht subtrees.** a
18900 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  re contained wit
18910 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d  hin the same mem
18920 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ory allocation. 
18930 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20   Note, however, 
18940 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74  that.** the subt
18950 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70  rees in Expr.x.p
18960 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70  List or Expr.x.p
18970 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79  Select are alway
18980 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20  s separately.** 
18990 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72  allocated, regar
189a0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
189b0 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63   or not EP_Reduc
189c0 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74  ed is set..*/.st
189d0 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38  ruct Expr {.  u8
189e0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
189f0 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f       /* Operatio
18a00 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74  n performed by t
18a10 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68  his node */.  ch
18a20 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20  ar affinity;    
18a30 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
18a40 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75  nity of the colu
18a50 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61  mn or 0 if not a
18a60 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32   column */.  u32
18a70 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
18a80 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66      /* Various f
18a90 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20  lags.  EP_* See 
18aa0 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e  below */.  union
18ab0 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f   {.    char *zTo
18ac0 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ken;          /*
18ad0 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65   Token value. Ze
18ae0 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e  ro terminated an
18af0 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20  d dequoted */.  
18b00 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20    int iValue;   
18b10 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d           /* Non-
18b20 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72  negative integer
18b30 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74   value if EP_Int
18b40 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a  Value */.  } u;.
18b50 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
18b60 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69  TokenOnly flag i
18b70 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
18b80 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
18b90 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
18ba0 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
18bb0 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
18bc0 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
18bd0 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
18be0 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
18bf0 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
18c00 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
18c10 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
18c20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18c50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
18c60 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b  ..  Expr *pLeft;
18c70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
18c80 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ft subnode */.  
18c90 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20  Expr *pRight;   
18ca0 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20         /* Right 
18cb0 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  subnode */.  uni
18cc0 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73  on {.    ExprLis
18cd0 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a  t *pList;     /*
18ce0 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
18cf0 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20  , SELECT, CASE, 
18d00 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45  FUNCTION, BETWEE
18d10 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  N */.    Select 
18d20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
18d30 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e   EP_xIsSelect an
18d40 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  d op = IN, EXIST
18d50 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d  S, SELECT */.  }
18d60 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   x;..  /* If the
18d70 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
18d80 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
18d90 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
18da0 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
18db0 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
18dc0 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
18dd0 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
18de0 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
18df0 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
18e00 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
18e10 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
18e20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  function..  ****
18e30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18e70 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  */..#if SQLITE_M
18e80 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
18e90 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
18ea0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67           /* Heig
18eb0 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68  ht of the tree h
18ec0 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f  eaded by this no
18ed0 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  de */.#endif.  i
18ee0 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
18ef0 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
18f00 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  MN: cursor numbe
18f10 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69  r of table holdi
18f20 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  ng column.      
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f40 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45     ** TK_REGISTE
18f50 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  R: register numb
18f60 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
18f70 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
18f80 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20  K_TRIGGER: 1 -> 
18f90 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20  new, 0 -> old.  
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c         ** EP_Unl
18fc0 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32  ikely:  13421772
18fd0 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f  8 times likeliho
18fe0 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  od.             
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19000 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72 65  K_SELECT: 1st re
19010 67 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c 74  gister of result
19020 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56   vector */.  ynV
19030 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  ar iColumn;     
19040 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
19050 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20  : column index. 
19060 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20   -1 for rowid.. 
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41          ** TK_VA
19090 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65  RIABLE: variable
190a0 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20   number (always 
190b0 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20 20  >= 1)..         
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c  ** TK_SELECT_COL
190e0 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  UMN: column of t
190f0 68 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72  he result vector
19100 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20   */.  i16 iAgg; 
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19120 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70  Which entry in p
19130 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20  AggInfo->aCol[] 
19140 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a  or ->aFunc[] */.
19150 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e    i16 iRightJoin
19160 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45  Table;   /* If E
19170 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20  P_FromJoin, the 
19180 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74  right table of t
19190 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20  he join */.  u8 
191a0 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
191b0 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54      /* TK_REGIST
191c0 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  ER: original val
191d0 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191f0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
19200 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
19210 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
19220 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
19230 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19240 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
19250 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
19260 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
19270 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
19280 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
19290 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
192a0 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c  NCTION */.  Tabl
192b0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
192c0 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20     /* Table for 
192d0 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73  TK_COLUMN expres
192e0 73 69 6f 6e 73 2e 20 20 43 61 6e 20 62 65 20 4e  sions.  Can be N
192f0 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ULL.            
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19310 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20  for a column of 
19320 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65  an index on an e
19330 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 57  xpression */.  W
19340 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20  indow *pWin;    
19350 20 20 20 20 20 20 2f 2a 20 57 69 6e 64 6f 77 20        /* Window 
19360 64 65 66 69 6e 69 74 69 6f 6e 20 66 6f 72 20 77  definition for w
19370 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
19380 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
19390 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
193a0 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
193b0 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
193c0 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
193d0 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a  #define EP_FromJ
193e0 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a  oin  0x000001 /*
193f0 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f   Originates in O
19400 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  N/USING clause o
19410 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  f outer join */.
19420 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20  #define EP_Agg  
19430 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a       0x000002 /*
19440 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
19450 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
19460 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
19470 66 69 6e 65 20 45 50 5f 48 61 73 46 75 6e 63 20  fine EP_HasFunc 
19480 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 43 6f    0x000004 /* Co
19490 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
194a0 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20  re functions of 
194b0 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a 20 20 20 20  any kind */.    
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
194d0 20 30 78 30 30 30 30 30 38 20 2f 2f 20 61 76 61   0x000008 // ava
194e0 69 6c 61 62 6c 65 20 66 6f 72 20 75 73 65 20 2a  ilable for use *
194f0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
19500 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20  tinct  0x000010 
19510 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
19520 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
19530 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
19540 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
19550 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20  ect 0x000020 /* 
19560 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
19570 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
19580 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
19590 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30  P_DblQuoted 0x00
195a0 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20  0040 /* token.z 
195b0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69  was originally i
195c0 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69  n "..." */.#defi
195d0 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20  ne EP_InfixFunc 
195e0 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65  0x000080 /* True
195f0 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
19600 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
19610 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
19620 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
19630 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65  0x000100 /* Tree
19640 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43   contains a TK_C
19650 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
19660 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65  */.#define EP_Ge
19670 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30  neric   0x000200
19680 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41   /* Ignore COLLA
19690 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f  TE or affinity o
196a0 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23  n this tree */.#
196b0 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c  define EP_IntVal
196c0 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20  ue  0x000400 /* 
196d0 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f  Integer value co
196e0 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61  ntained in u.iVa
196f0 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  lue */.#define E
19700 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30  P_xIsSelect 0x00
19710 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63  0800 /* x.pSelec
19720 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65  t is valid (othe
19730 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73  rwise x.pList is
19740 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
19750 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30  Skip      0x0010
19760 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41  00 /* COLLATE, A
19770 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a  S, or UNLIKELY *
19780 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64  /.#define EP_Red
19790 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20  uced   0x002000 
197a0 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
197b0 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
197c0 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
197d0 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
197e0 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45  ly 0x004000 /* E
197f0 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
19800 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
19810 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
19820 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20  ine EP_Static   
19830 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c   0x008000 /* Hel
19840 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20  d in memory not 
19850 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
19860 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e  lloc() */.#defin
19870 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30  e EP_MemToken  0
19880 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20  x010000 /* Need 
19890 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  to sqlite3DbFree
198a0 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a  () Expr.zToken *
198b0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52  /.#define EP_NoR
198c0 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20  educe  0x020000 
198d0 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55  /* Cannot EXPRDU
198e0 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78  P_REDUCE this Ex
198f0 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  pr */.#define EP
19900 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30  _Unlikely  0x040
19910 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28  000 /* unlikely(
19920 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ) or likelihood(
19930 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
19940 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75  efine EP_ConstFu
19950 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41  nc 0x080000 /* A
19960 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
19970 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e  STANT or _SLOCHN
19980 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  G function */.#d
19990 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75  efine EP_CanBeNu
199a0 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43  ll 0x100000 /* C
199b0 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69  an be null despi
199c0 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  te NOT NULL cons
199d0 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
199e0 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30  e EP_Subquery  0
199f0 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20  x200000 /* Tree 
19a00 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45  contains a TK_SE
19a10 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LECT operator */
19a20 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61  .#define EP_Alia
19a30 73 20 20 20 20 20 30 78 34 30 30 30 30 30 20 2f  s     0x400000 /
19a40 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  * Is an alias fo
19a50 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 63  r a result set c
19a60 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
19a70 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78   EP_Leaf      0x
19a80 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70  800000 /* Expr.p
19a90 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e  Left, .pRight, .
19aa0 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55  u.pSelect all NU
19ab0 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  LL */../*.** The
19ac0 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 6d 61   EP_Propagate ma
19ad0 73 6b 20 69 73 20 61 20 73 65 74 20 6f 66 20 70  sk is a set of p
19ae0 72 6f 70 65 72 74 69 65 73 20 74 68 61 74 20 61  roperties that a
19af0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72 6f  utomatically pro
19b00 70 61 67 61 74 65 0a 2a 2a 20 75 70 77 61 72 64  pagate.** upward
19b10 73 20 69 6e 74 6f 20 70 61 72 65 6e 74 20 6e 6f  s into parent no
19b20 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  des..*/.#define 
19b30 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50  EP_Propagate (EP
19b40 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71  _Collate|EP_Subq
19b50 75 65 72 79 7c 45 50 5f 48 61 73 46 75 6e 63 29  uery|EP_HasFunc)
19b60 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
19b70 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
19b80 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
19b90 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
19ba0 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  the.** Expr.flag
19bb0 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
19bc0 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65  ine ExprHasPrope
19bd0 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28  rty(E,P)     (((
19be0 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d  E)->flags&(P))!=
19bf0 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  0).#define ExprH
19c00 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c  asAllProperty(E,
19c10 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  P)  (((E)->flags
19c20 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
19c30 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ine ExprSetPrope
19c40 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29  rty(E,P)     (E)
19c50 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
19c60 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72  fine ExprClearPr
19c70 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45  operty(E,P)   (E
19c80 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  )->flags&=~(P)..
19c90 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56  /* The ExprSetVV
19ca0 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72  AProperty() macr
19cb0 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65  o is used for Ve
19cc0 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69  rification, Vali
19cd0 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41  dation,.** and A
19ce0 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c  ccreditation onl
19cf0 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b  y.  It works lik
19d00 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
19d10 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a  y() during VVA.*
19d20 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20  * processes but 
19d30 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64  is a no-op for d
19d40 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64  elivery..*/.#ifd
19d50 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
19d60 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
19d70 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
19d80 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
19d90 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
19da0 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
19db0 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a  rty(E,P).#endif.
19dc0 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
19dd0 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
19de0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
19df0 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72  equired by a nor
19e00 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75  mal Expr.** stru
19e10 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75  ct, an Expr stru
19e20 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52  ct with the EP_R
19e30 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20  educed flag set 
19e40 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a  in Expr.flags.**
19e50 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72   and an Expr str
19e60 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
19e70 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73  TokenOnly flag s
19e80 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  et..*/.#define E
19e90 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20  XPR_FULLSIZE    
19ea0 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78         sizeof(Ex
19eb0 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pr)           /*
19ec0 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64   Full size */.#d
19ed0 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43  efine EXPR_REDUC
19ee0 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66  EDSIZE        of
19ef0 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62  fsetof(Expr,iTab
19f00 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66  le)  /* Common f
19f10 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69  eatures */.#defi
19f20 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ne EXPR_TOKENONL
19f30 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65  YSIZE      offse
19f40 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20  tof(Expr,pLeft) 
19f50 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75    /* Fewer featu
19f60 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c  res */../*.** Fl
19f70 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  ags passed to th
19f80 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
19f90 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65  () function. See
19fa0 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
19fb0 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c  ent.** above sql
19fc0 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f  ite3ExprDup() fo
19fd0 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64  r details..*/.#d
19fe0 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45  efine EXPRDUP_RE
19ff0 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30  DUCE         0x0
1a000 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64  001  /* Used red
1a010 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e  uced-size Expr n
1a020 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  odes */../*.** A
1a030 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
1a040 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72  ions.  Each expr
1a050 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f  ession may optio
1a060 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20  nally have a.** 
1a070 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e  name.  An expr/n
1a080 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ame combination 
1a090 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73  can be used in s
1a0a0 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63  everal ways, suc
1a0b0 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74  h.** as the list
1a0c0 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22   of "expr AS ID"
1a0d0 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e   fields followin
1a0e0 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20  g a "SELECT" or 
1a0f0 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f  in the.** list o
1a100 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74  f "ID = expr" it
1a110 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45  ems in an UPDATE
1a120 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  .  A list of exp
1a130 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20  ressions can.** 
1a140 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20  also be used as 
1a150 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
1a160 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77  a function, in w
1a170 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e  hich case the a.
1a180 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69  zName.** field i
1a190 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
1a1a0 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65  * By default the
1a1b0 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c   Expr.zSpan fiel
1a1c0 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d  d holds a human-
1a1d0 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70  readable descrip
1a1e0 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65  tion of.** the e
1a1f0 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
1a200 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  s used in the ge
1a210 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f  neration of erro
1a220 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a  r messages and.*
1a230 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e  * column labels.
1a240 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
1a250 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79  Expr.zSpan is ty
1a260 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74  pically the text
1a270 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20   of a.** column 
1a280 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74  expression as it
1a290 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c   exists in a SEL
1a2a0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
1a2b0 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74  However, if.** t
1a2c0 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c  he bSpanIsTab fl
1a2d0 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
1a2e0 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61  zSpan is overloa
1a2f0 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20  ded to mean the 
1a300 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72  name.** of the r
1a310 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20  esult column in 
1a320 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41  the form: DATABA
1a330 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e  SE.TABLE.COLUMN.
1a340 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20    This later.** 
1a350 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72  form is used for
1a360 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e   name resolution
1a370 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f   with nested FRO
1a380 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74  M clauses..*/.st
1a390 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a  ruct ExprList {.
1a3a0 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20    int nExpr;    
1a3b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1a3c0 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  er of expression
1a3d0 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
1a3e0 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69  .  struct ExprLi
1a3f0 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72  st_item { /* For
1a400 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
1a410 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
1a420 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
1a430 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1a440 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
1a450 72 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  r this expressio
1a460 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
1a470 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1a480 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69   /* Token associ
1a490 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65  ated with this e
1a4a0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
1a4b0 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
1a4c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67           /* Orig
1a4d0 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65  inal text of the
1a4e0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
1a4f0 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b     u8 sortOrder;
1a500 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20             /* 1 
1a510 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f  for DESC or 0 fo
1a520 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73  r ASC */.    uns
1a530 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20  igned done :1;  
1a540 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74       /* A flag t
1a550 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20  o indicate when 
1a560 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69  processing is fi
1a570 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e  nished */.    un
1a580 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61  signed bSpanIsTa
1a590 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68  b :1; /* zSpan h
1a5a0 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f  olds DB.TABLE.CO
1a5b0 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69  LUMN */.    unsi
1a5c0 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31  gned reusable :1
1a5d0 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  ;   /* Constant 
1a5e0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65  expression is re
1a5f0 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e  usable */.    un
1a600 73 69 67 6e 65 64 20 62 53 6f 72 74 65 72 52 65  signed bSorterRe
1a610 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20 65  f :1; /* Defer e
1a620 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c 20  valuation until 
1a630 61 66 74 65 72 20 73 6f 72 74 69 6e 67 20 2a 2f  after sorting */
1a640 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
1a650 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
1a660 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79      u16 iOrderBy
1a670 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72  Col;      /* For
1a680 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
1a690 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
1a6a0 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20  lt set */.      
1a6b0 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20    u16 iAlias;   
1a6c0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1a6d0 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69   into Parse.aAli
1a6e0 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a  as[] for zName *
1a6f0 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20  /.      } x;.   
1a700 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70     int iConstExp
1a710 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65  rReg;      /* Re
1a720 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20  gister in which 
1a730 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61  Expr value is ca
1a740 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b  ched */.    } u;
1a750 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
1a760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1a770 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63 68  ne slot for each
1a780 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
1a790 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
1a7a0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1a7b0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
1a7c0 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69  re can hold a si
1a7d0 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65  mple list of ide
1a7e0 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63  ntifiers,.** suc
1a7f0 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61  h as the list "a
1a800 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c  ,b,c" in the fol
1a810 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
1a820 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e  s:.**.**      IN
1a830 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
1a840 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a  c) VALUES ...;.*
1a850 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  *      CREATE IN
1a860 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62  DEX idx ON t(a,b
1a870 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ,c);.**      CRE
1a880 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67  ATE TRIGGER trig
1a890 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f   BEFORE UPDATE O
1a8a0 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a  N t(a,b,c) ...;.
1a8b0 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74  **.** The IdList
1a8c0 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20  .a.idx field is 
1a8d0 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64  used when the Id
1a8e0 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20  List represents 
1a8f0 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63  the list of.** c
1a900 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65  olumn names afte
1a910 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  r a table name i
1a920 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  n an INSERT stat
1a930 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73  ement.  In the s
1a940 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20  tatement.**.**  
1a950 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1a960 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a  (a,b,c) ....**.*
1a970 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20  * If "a" is the 
1a980 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  k-th column of t
1a990 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49  able "t", then I
1a9a0 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d  dList.a[0].idx==
1a9b0 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c  k..*/.struct IdL
1a9c0 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49  ist {.  struct I
1a9d0 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  dList_item {.   
1a9e0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1a9f0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
1aa00 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a  e identifier */.
1aa10 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20      int idx;    
1aa20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
1aa30 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f  n some Table.aCo
1aa40 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  l[] of a column 
1aa50 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20  named zName */. 
1aa60 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64   } *a;.  int nId
1aa70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1aa80 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ber of identifie
1aa90 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  rs on the list *
1aaa0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1aab0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1aac0 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68  ure describes th
1aad0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
1aae0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1aaf0 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62  ent..** Each tab
1ab00 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
1ab10 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
1ab20 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20  e is a separate 
1ab30 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68  element of.** th
1ab40 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72  e SrcList.a[] ar
1ab50 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20  ray..**.** With 
1ab60 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20  the addition of 
1ab70 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
1ab80 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66  e support, the f
1ab90 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1aba0 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62  re.** can also b
1abb0 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69  e used to descri
1abc0 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  be a particular 
1abd0 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68  table such as th
1abe0 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20  e table that.** 
1abf0 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61  is modified by a
1ac00 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
1ac10 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  , or UPDATE stat
1ac20 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64  ement.  In stand
1ac30 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68  ard SQL,.** such
1ac40 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65   a table must be
1ac50 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20   a simple name: 
1ac60 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69  ID.  But in SQLi
1ac70 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61  te, the table ca
1ac80 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e  n.** now be iden
1ac90 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61  tified by a data
1aca0 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74  base name, a dot
1acb0 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
1acc0 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a   name: ID.ID..**
1acd0 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65  .** The jointype
1ace0 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77   starts out show
1acf0 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70  ing the join typ
1ad00 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75  e between the cu
1ad10 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61  rrent table.** a
1ad20 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c  nd the next tabl
1ad30 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20  e on the list.  
1ad40 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64  The parser build
1ad50 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20  s the list this 
1ad60 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69  way..** But sqli
1ad70 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
1ad80 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20  oinType() later 
1ad90 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74  shifts the joint
1ada0 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63  ypes so that eac
1adb0 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78  h.** jointype ex
1adc0 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e  presses the join
1add0 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62   between the tab
1ade0 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
1adf0 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ous table..**.**
1ae00 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20   In the colUsed 
1ae10 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d  field, the high-
1ae20 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36  order bit (bit 6
1ae30 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65  3) is set if the
1ae40 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69   table.** contai
1ae50 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20  ns more than 63 
1ae60 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20  columns and the 
1ae70 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63  64-th or later c
1ae80 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a  olumn is used..*
1ae90 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  /.struct SrcList
1aea0 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20   {.  int nSrc;  
1aeb0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1aec0 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  of tables or sub
1aed0 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46  queries in the F
1aee0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1aef0 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  u32 nAlloc;     
1af00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
1af10 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20  tries allocated 
1af20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a  in a[] below */.
1af30 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74    struct SrcList
1af40 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65  _item {.    Sche
1af50 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a  ma *pSchema;  /*
1af60 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68   Schema to which
1af70 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69   this item is fi
1af80 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  xed */.    char 
1af90 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20  *zDatabase;  /* 
1afa0 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
1afb0 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61   holding this ta
1afc0 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
1afd0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
1afe0 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
1aff0 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
1b000 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68  Alias;     /* Th
1b010 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20  e "B" part of a 
1b020 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e  "A AS B" phrase.
1b030 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22    zName is the "
1b040 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  A" */.    Table 
1b050 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41  *pTab;      /* A
1b060 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72  n SQL table corr
1b070 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61  esponding to zNa
1b080 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  me */.    Select
1b090 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41   *pSelect;  /* A
1b0a0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1b0b0 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20  t used in place 
1b0c0 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  of a table name 
1b0d0 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46  */.    int addrF
1b0e0 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72  illSub;  /* Addr
1b0f0 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e  ess of subroutin
1b100 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20  e to manifest a 
1b110 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20  subquery */.    
1b120 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20  int regReturn;  
1b130 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1b140 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64  lding return add
1b150 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c  ress of addrFill
1b160 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  Sub */.    int r
1b170 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20  egResult;    /* 
1b180 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  Registers holdin
1b190 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63  g results of a c
1b1a0 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
1b1b0 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
1b1c0 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
1b1d0 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
1b1e0 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 74  n between this t
1b1f0 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
1b200 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75  vious */.      u
1b210 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78  nsigned notIndex
1b220 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  ed :1;    /* Tru
1b230 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20  e if there is a 
1b240 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
1b250 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  se */.      unsi
1b260 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42 79  gned isIndexedBy
1b270 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69   :1;   /* True i
1b280 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e  f there is an IN
1b290 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
1b2a0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1b2b0 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20  d isTabFunc :1; 
1b2c0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
1b2d0 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63  able-valued-func
1b2e0 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20  tion syntax */. 
1b2f0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1b300 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20  Correlated :1;  
1b310 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71  /* True if sub-q
1b320 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74  uery is correlat
1b330 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ed */.      unsi
1b340 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
1b350 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
1b360 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
1b370 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75  utine */.      u
1b380 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73  nsigned isRecurs
1b390 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75  ive :1;   /* Tru
1b3a0 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20  e for recursive 
1b3b0 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54  reference in WIT
1b3c0 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 20  H */.    } fg;. 
1b3d0 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20     int iCursor; 
1b3e0 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
1b3f0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75   cursor number u
1b400 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
1b410 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
1b420 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20  Expr *pOn;      
1b430 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75    /* The ON clau
1b440 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
1b450 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69      IdList *pUsi
1b460 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49  ng;   /* The USI
1b470 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
1b480 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61  oin */.    Bitma
1b490 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20  sk colUsed;  /* 
1b4a0 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74  Bit N (1<<N) set
1b4b0 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20   if column N of 
1b4c0 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a  pTab is used */.
1b4d0 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
1b4e0 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64    char *zIndexed
1b4f0 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69  By;    /* Identi
1b500 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58  fier from "INDEX
1b510 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20  ED BY <zIndex>" 
1b520 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
1b530 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41  ExprList *pFuncA
1b540 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74  rg;  /* Argument
1b550 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65  s to table-value
1b560 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  d-function */.  
1b570 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65    } u1;.    Inde
1b580 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a  x *pIBIndex;  /*
1b590 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
1b5a0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1b5b0 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20  o u1.zIndexedBy 
1b5c0 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  */.  } a[1];    
1b5d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1b5e0 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69  entry for each i
1b5f0 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65  dentifier on the
1b600 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
1b610 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c  ** Permitted val
1b620 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69  ues of the SrcLi
1b630 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69  st.a.jointype fi
1b640 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  eld.*/.#define J
1b650 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30  T_INNER     0x00
1b660 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e  01    /* Any kin
1b670 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72  d of inner or cr
1b680 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  oss join */.#def
1b690 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20  ine JT_CROSS    
1b6a0 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78   0x0002    /* Ex
1b6b0 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68  plicit use of th
1b6c0 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20  e CROSS keyword 
1b6d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41  */.#define JT_NA
1b6e0 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20  TURAL   0x0004  
1b6f0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20    /* True for a 
1b700 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a  "natural" join *
1b710 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46  /.#define JT_LEF
1b720 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20  T      0x0008   
1b730 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a   /* Left outer j
1b740 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1b750 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30  T_RIGHT     0x00
1b760 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  10    /* Right o
1b770 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
1b780 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20  fine JT_OUTER   
1b790 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54    0x0020    /* T
1b7a0 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f  he "OUTER" keywo
1b7b0 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f  rd is present */
1b7c0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f  .#define JT_ERRO
1b7d0 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20  R     0x0040    
1b7e0 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e  /* unknown or un
1b7f0 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74  supported join t
1b800 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46  ype */.../*.** F
1b810 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65  lags appropriate
1b820 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c   for the wctrlFl
1b830 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66  ags parameter of
1b840 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67   sqlite3WhereBeg
1b850 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20  in().** and the 
1b860 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46  WhereInfo.wctrlF
1b870 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a  lags member..**.
1b880 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1b890 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
1b8a0 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
1b8b0 20 20 20 20 20 57 48 45 52 45 5f 55 53 45 5f 4c       WHERE_USE_L
1b8c0 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69 78 65  IMIT  == SF_Fixe
1b8d0 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e  dLimit.*/.#defin
1b8e0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1b8f0 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
1b900 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
1b910 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1b920 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
1b930 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
1b940 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
1b950 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
1b960 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1b970 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
1b980 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
1b990 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
1b9a0 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
1b9b0 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
1b9c0 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
1b9d0 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
1b9e0 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
1b9f0 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
1ba00 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55  WHERE_ONEPASS_MU
1ba10 4c 54 49 52 4f 57 20 30 78 30 30 30 38 20 2f 2a  LTIROW 0x0008 /*
1ba20 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77   ONEPASS is ok w
1ba30 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ith multiple row
1ba40 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
1ba50 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b  RE_DUPLICATES_OK
1ba60 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b      0x0010 /* Ok
1ba70 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77   to return a row
1ba80 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20   more than once 
1ba90 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1baa0 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45 20 20 20  _OR_SUBCLAUSE   
1bab0 20 20 30 78 30 30 32 30 20 2f 2a 20 50 72 6f 63    0x0020 /* Proc
1bac0 65 73 73 69 6e 67 20 61 20 73 75 62 2d 57 48 45  essing a sub-WHE
1bad0 52 45 20 61 73 20 70 61 72 74 20 6f 66 0a 20 20  RE as part of.  
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb00 20 20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70      ** the OR op
1bb10 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23  timization  */.#
1bb20 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f  define WHERE_GRO
1bb30 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78  UPBY          0x
1bb40 30 30 34 30 20 2f 2a 20 70 4f 72 64 65 72 42 79  0040 /* pOrderBy
1bb50 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f   is really a GRO
1bb60 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  UP BY */.#define
1bb70 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42   WHERE_DISTINCTB
1bb80 59 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f  Y       0x0080 /
1bb90 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65  * pOrderby is re
1bba0 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20  ally a DISTINCT 
1bbb0 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1bbc0 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53  e WHERE_WANT_DIS
1bbd0 54 49 4e 43 54 20 20 20 20 30 78 30 31 30 30 20  TINCT    0x0100 
1bbe0 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65  /* All output ne
1bbf0 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e  eds to be distin
1bc00 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ct */.#define WH
1bc10 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20  ERE_SORTBYGROUP 
1bc20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 53       0x0200 /* S
1bc30 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68  upport sqlite3Wh
1bc40 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f  ereIsSorted() */
1bc50 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1bc60 45 45 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20  EEK_TABLE       
1bc70 30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0400 /* Do not
1bc80 20 64 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20   defer seeks on 
1bc90 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64  main table */.#d
1bca0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1bcb0 52 42 59 5f 4c 49 4d 49 54 20 20 20 20 30 78 30  RBY_LIMIT    0x0
1bcc0 38 30 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c  800 /* ORDERBY+L
1bcd0 49 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65  IMIT on the inne
1bce0 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e  r loop */.#defin
1bcf0 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49  e WHERE_SEEK_UNI
1bd00 51 5f 54 41 42 4c 45 20 20 30 78 31 30 30 30 20  Q_TABLE  0x1000 
1bd10 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20  /* Do not defer 
1bd20 73 65 65 6b 73 20 69 66 20 75 6e 69 71 75 65 20  seeks if unique 
1bd30 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
1bd40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
1bd50 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20    0x2000    not 
1bd60 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a  currently used *
1bd70 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1bd80 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20  USE_LIMIT       
1bd90 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74   0x4000 /* Use t
1bda0 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74  he LIMIT in cost
1bdb0 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20   estimates */.  
1bdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdd0 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38        /*     0x8
1bde0 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65  000    not curre
1bdf0 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a  ntly used */../*
1be00 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
1be10 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
1be20 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e  te3WhereIsDistin
1be30 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ct().*/.#define 
1be40 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e  WHERE_DISTINCT_N
1be50 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44  OOP      0  /* D
1be60 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
1be70 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66  not used */.#def
1be80 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1be90 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20  CT_UNIQUE    1  
1bea0 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73  /* No duplicates
1beb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1bec0 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52  E_DISTINCT_ORDER
1bed0 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64  ED   2  /* All d
1bee0 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64  uplicates are ad
1bef0 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  jacent */.#defin
1bf00 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1bf10 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a  _UNORDERED 3  /*
1bf20 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   Duplicates are 
1bf30 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a  scattered */../*
1bf40 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78  .** A NameContex
1bf50 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74  t defines a cont
1bf60 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20  ext in which to 
1bf70 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e  resolve table an
1bf80 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65  d column.** name
1bf90 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20  s.  The context 
1bfa0 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69  consists of a li
1bfb0 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68  st of tables (th
1bfc0 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c  e pSrcList) fiel
1bfd0 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20  d and.** a list 
1bfe0 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
1bff0 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54  ion (pEList).  T
1c000 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  he named express
1c010 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20  ion list may.** 
1c020 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53  be NULL.  The pS
1c030 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  rc corresponds t
1c040 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  o the FROM claus
1c050 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72  e of a SELECT or
1c060 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65  .** to the table
1c070 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
1c080 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50  on by INSERT, UP
1c090 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e  DATE, or DELETE.
1c0a0 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20    The.** pEList 
1c0b0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
1c0c0 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66  he result set of
1c0d0 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73   a SELECT and is
1c0e0 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68   NULL for.** oth
1c0f0 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  er statements..*
1c100 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  *.** NameContext
1c110 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e  s can be nested.
1c120 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67    When resolving
1c130 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65   names, the inne
1c140 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78  r-most.** contex
1c150 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69  t is searched fi
1c160 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63  rst.  If no matc
1c170 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
1c180 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f  next outer.** co
1c190 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64  ntext is checked
1c1a0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73  .  If there is s
1c1b0 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74  till no match, t
1c1c0 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a  he next context.
1c1d0 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  ** is checked.  
1c1e0 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e  This process con
1c1f0 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74  tinues until eit
1c200 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66  her a match is f
1c210 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63  ound.** or all c
1c220 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63  ontexts are chec
1c230 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68  k.  When a match
1c240 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
1c250 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a  Ref member of.**
1c260 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   the context con
1c270 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63  taining the matc
1c280 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  h is incremented
1c290 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62  ..**.** Each sub
1c2a0 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77  query gets a new
1c2b0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54   NameContext.  T
1c2c0 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70  he pNext field p
1c2d0 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
1c2e0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74  NameContext in t
1c2f0 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e  he parent query.
1c300 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65    Thus the proce
1c310 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74  ss of scanning t
1c320 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
1c330 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  t list correspon
1c340 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20  ds to searching 
1c350 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69  through successi
1c360 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75  vely outer.** su
1c370 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67  bqueries looking
1c380 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f   for a match..*/
1c390 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74  .struct NameCont
1c3a0 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  ext {.  Parse *p
1c3b0 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20  Parse;       /* 
1c3c0 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  The parser */.  
1c3d0 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
1c3e0 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  t;   /* One or m
1c3f0 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20  ore tables used 
1c400 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73  to resolve names
1c410 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
1c420 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
1c430 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e  st;    /* Option
1c440 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c  al list of resul
1c450 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t-set columns */
1c460 0a 20 20 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  .    AggInfo *pA
1c470 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66  ggInfo;   /* Inf
1c480 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
1c490 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69  ggregates at thi
1c4a0 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 55  s level */.    U
1c4b0 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20  psert *pUpsert; 
1c4c0 20 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49      /* ON CONFLI
1c4d0 43 54 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d  CT clause inform
1c4e0 61 74 69 6f 6e 20 66 72 6f 6d 20 61 6e 20 75 70  ation from an up
1c4f0 73 65 72 74 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b  sert */.  } uNC;
1c500 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a  .  NameContext *
1c510 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
1c520 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65  outer name conte
1c530 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75  xt.  NULL for ou
1c540 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74  termost */.  int
1c550 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
1c560 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
1c570 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79  ames resolved by
1c580 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f   this context */
1c590 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
1c5a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1c5b0 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f  r of errors enco
1c5c0 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65  untered while re
1c5d0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f  solving names */
1c5e0 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20  .  u16 ncFlags; 
1c5f0 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20          /* Zero 
1c600 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61  or more NC_* fla
1c610 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  gs defined below
1c620 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 57   */.  Select *pW
1c630 69 6e 53 65 6c 65 63 74 3b 20 20 2f 2a 20 53 45  inSelect;  /* SE
1c640 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 66  LECT statement f
1c650 6f 72 20 61 6e 79 20 77 69 6e 64 6f 77 20 66 75  or any window fu
1c660 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  nctions */.};../
1c670 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
1c680 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65  ues for the Name
1c690 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73  Context, ncFlags
1c6a0 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61   field..**.** Va
1c6b0 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1c6c0 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61  (all checked via
1c6d0 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
1c6e0 20 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d    NC_HasAgg    =
1c6f0 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20  = SF_HasAgg.**  
1c700 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d    NC_MinMaxAgg =
1c710 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d  = SF_MinMaxAgg =
1c720 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  = SQLITE_FUNC_MI
1c730 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69  NMAX.**.*/.#defi
1c740 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20  ne NC_AllowAgg  
1c750 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65  0x0001  /* Aggre
1c760 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  gate functions a
1c770 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
1c780 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61  */.#define NC_Pa
1c790 72 74 49 64 78 20 20 20 30 78 30 30 30 32 20 20  rtIdx   0x0002  
1c7a0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1c7b0 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69  ving a partial i
1c7c0 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64  ndex WHERE */.#d
1c7d0 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b  efine NC_IsCheck
1c7e0 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72     0x0004  /* Tr
1c7f0 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1c800 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b  names in a CHECK
1c810 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
1c820 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46  define NC_InAggF
1c830 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54  unc 0x0008  /* T
1c840 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67  rue if analyzing
1c850 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e   arguments to an
1c860 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65   agg func */.#de
1c870 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20  fine NC_HasAgg  
1c880 20 20 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65    0x0010  /* One
1c890 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
1c8a0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65  te functions see
1c8b0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1c8c0 49 64 78 45 78 70 72 20 20 20 30 78 30 30 32 30  IdxExpr   0x0020
1c8d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
1c8e0 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f  olving columns o
1c8f0 66 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  f CREATE INDEX *
1c900 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72  /.#define NC_Var
1c910 53 65 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f  Select 0x0040  /
1c920 2a 20 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73  * A correlated s
1c930 75 62 71 75 65 72 79 20 68 61 73 20 62 65 65 6e  ubquery has been
1c940 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1c950 20 4e 43 5f 55 45 4c 69 73 74 20 20 20 20 30 78   NC_UEList    0x
1c960 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0080  /* True if
1c970 20 75 4e 43 2e 70 45 4c 69 73 74 20 69 73 20 75   uNC.pEList is u
1c980 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  sed */.#define N
1c990 43 5f 55 41 67 67 49 6e 66 6f 20 20 30 78 30 31  C_UAggInfo  0x01
1c9a0 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75  00  /* True if u
1c9b0 4e 43 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 75  NC.pAggInfo is u
1c9c0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  sed */.#define N
1c9d0 43 5f 55 55 70 73 65 72 74 20 20 20 30 78 30 32  C_UUpsert   0x02
1c9e0 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75  00  /* True if u
1c9f0 4e 43 2e 70 55 70 73 65 72 74 20 69 73 20 75 73  NC.pUpsert is us
1ca00 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1ca10 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30  _MinMaxAgg 0x100
1ca20 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67  0  /* min/max ag
1ca30 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20  gregates seen.  
1ca40 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a  See note above *
1ca50 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d  /.#define NC_Com
1ca60 70 6c 65 78 20 20 20 30 78 32 30 30 30 20 20 2f  plex   0x2000  /
1ca70 2a 20 54 72 75 65 20 69 66 20 61 20 66 75 6e 63  * True if a func
1ca80 74 69 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79  tion or subquery
1ca90 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1caa0 20 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20 20 30 78   NC_AllowWin  0x
1cab0 34 30 30 30 20 20 2f 2a 20 57 69 6e 64 6f 77 20  4000  /* Window 
1cac0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
1cad0 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 0a 2f  lowed here */../
1cae0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1caf0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1cb00 67 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  g object describ
1cb10 65 73 20 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43  es a single ON C
1cb20 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73  ONFLICT.** claus
1cb30 65 20 69 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a  e in an upsert..
1cb40 2a 2a 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72  **.** The pUpser
1cb50 74 54 61 72 67 65 74 20 66 69 65 6c 64 20 69 73  tTarget field is
1cb60 20 6f 6e 6c 79 20 73 65 74 20 69 66 20 74 68 65   only set if the
1cb70 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1cb80 75 73 65 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20  use includes.** 
1cb90 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20  conflict-target 
1cba0 63 6c 61 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e  clause.  (In "ON
1cbb0 20 43 4f 4e 46 4c 49 43 54 28 61 2c 62 29 22 20   CONFLICT(a,b)" 
1cbc0 74 68 65 20 22 28 61 2c 62 29 22 20 69 73 20 74  the "(a,b)" is t
1cbd0 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74  he.** conflict-t
1cbe0 61 72 67 65 74 20 63 6c 61 75 73 65 2e 29 20 20  arget clause.)  
1cbf0 54 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65  The pUpsertTarge
1cc00 74 57 68 65 72 65 20 69 73 20 74 68 65 20 6f 70  tWhere is the op
1cc10 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20  tional.** WHERE 
1cc20 63 6c 61 75 73 65 20 75 73 65 64 20 74 6f 20 69  clause used to i
1cc30 64 65 6e 74 69 66 79 20 70 61 72 74 69 61 6c 20  dentify partial 
1cc40 75 6e 69 71 75 65 20 69 6e 64 65 78 65 73 2e 0a  unique indexes..
1cc50 2a 2a 0a 2a 2a 20 70 55 70 73 65 72 74 53 65 74  **.** pUpsertSet
1cc60 20 69 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   is the list of 
1cc70 63 6f 6c 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d  column=expr term
1cc80 73 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  s of the UPDATE 
1cc90 73 74 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54  statement. .** T
1cca0 68 65 20 70 55 70 73 65 72 74 53 65 74 20 66 69  he pUpsertSet fi
1ccb0 65 6c 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20  eld is NULL for 
1ccc0 61 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f  a ON CONFLICT DO
1ccd0 20 4e 4f 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a   NOTHING.  The.*
1cce0 2a 20 70 55 70 73 65 72 74 57 68 65 72 65 20 69  * pUpsertWhere i
1ccf0 73 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  s the WHERE clau
1cd00 73 65 20 66 6f 72 20 74 68 65 20 55 50 44 41 54  se for the UPDAT
1cd10 45 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66  E and is NULL if
1cd20 20 74 68 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c   the.** WHERE cl
1cd30 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2e  ause is omitted.
1cd40 0a 2a 2f 0a 73 74 72 75 63 74 20 55 70 73 65 72  .*/.struct Upser
1cd50 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
1cd60 70 55 70 73 65 72 74 54 61 72 67 65 74 3b 20 20  pUpsertTarget;  
1cd70 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63  /* Optional desc
1cd80 72 69 70 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c  ription of confl
1cd90 69 63 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  icting index */.
1cda0 20 20 45 78 70 72 20 2a 70 55 70 73 65 72 74 54    Expr *pUpsertT
1cdb0 61 72 67 65 74 57 68 65 72 65 3b 20 2f 2a 20 57  argetWhere; /* W
1cdc0 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1cdd0 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 74 61  partial index ta
1cde0 72 67 65 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c  rgets */.  ExprL
1cdf0 69 73 74 20 2a 70 55 70 73 65 72 74 53 65 74 3b  ist *pUpsertSet;
1ce00 20 20 20 20 20 2f 2a 20 54 68 65 20 53 45 54 20       /* The SET 
1ce10 63 6c 61 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f  clause from an O
1ce20 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54  N CONFLICT UPDAT
1ce30 45 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70  E */.  Expr *pUp
1ce40 73 65 72 74 57 68 65 72 65 3b 20 20 20 20 20 20  sertWhere;      
1ce50 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
1ce60 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46   for the ON CONF
1ce70 4c 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20  LICT UPDATE */. 
1ce80 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 61   /* The fields a
1ce90 62 6f 76 65 20 63 6f 6d 70 72 69 73 65 20 74 68  bove comprise th
1cea0 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
1ceb0 20 74 68 65 20 75 70 73 65 72 74 20 63 6c 61 75   the upsert clau
1cec0 73 65 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 65  se..  ** The fie
1ced0 6c 64 73 20 62 65 6c 6f 77 20 61 72 65 20 75 73  lds below are us
1cee0 65 64 20 74 6f 20 74 72 61 6e 73 66 65 72 20 69  ed to transfer i
1cef0 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
1cf00 74 68 65 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20  the INSERT.  ** 
1cf10 70 72 6f 63 65 73 73 69 6e 67 20 64 6f 77 6e 20  processing down 
1cf20 69 6e 74 6f 20 74 68 65 20 55 50 44 41 54 45 20  into the UPDATE 
1cf30 70 72 6f 63 65 73 73 69 6e 67 20 77 68 69 6c 65  processing while
1cf40 20 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 64 65   generating code
1cf50 2e 0a 20 20 2a 2a 20 55 70 73 65 72 74 20 6f 77  ..  ** Upsert ow
1cf60 6e 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ns the memory al
1cf70 6c 6f 63 61 74 65 64 20 61 62 6f 76 65 2c 20 62  located above, b
1cf80 75 74 20 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72  ut not the memor
1cf90 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e  y below. */.  In
1cfa0 64 65 78 20 2a 70 55 70 73 65 72 74 49 64 78 3b  dex *pUpsertIdx;
1cfb0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74          /* Const
1cfc0 72 61 69 6e 74 20 74 68 61 74 20 70 55 70 73 65  raint that pUpse
1cfd0 72 74 54 61 72 67 65 74 20 69 64 65 6e 74 69 66  rtTarget identif
1cfe0 69 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ies */.  SrcList
1cff0 20 2a 70 55 70 73 65 72 74 53 72 63 3b 20 20 20   *pUpsertSrc;   
1d000 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62     /* Table to b
1d010 65 20 75 70 64 61 74 65 64 20 2a 2f 0a 20 20 69  e updated */.  i
1d020 6e 74 20 72 65 67 44 61 74 61 3b 20 20 20 20 20  nt regData;     
1d030 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
1d040 74 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  t register holdi
1d050 6e 67 20 61 72 72 61 79 20 6f 66 20 56 41 4c 55  ng array of VALU
1d060 45 53 20 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74  ES */.  int iDat
1d070 61 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  aCur;           
1d080 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68    /* Index of th
1d090 65 20 64 61 74 61 20 63 75 72 73 6f 72 20 2a 2f  e data cursor */
1d0a0 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20  .  int iIdxCur; 
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d0c0 49 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72  Index of the fir
1d0d0 73 74 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  st index cursor 
1d0e0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
1d0f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1d100 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1d110 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c  ure contains all
1d120 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
1d130 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
1d140 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69  te code for a si
1d150 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  ngle SELECT stat
1d160 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ement..**.** See
1d170 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
1d180 65 6e 74 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75  ent on the compu
1d190 74 65 4c 69 6d 69 74 52 65 67 69 73 74 65 72 73  teLimitRegisters
1d1a0 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 61  () routine for a
1d1b0 0a 2a 2a 20 64 65 74 61 69 6c 65 64 20 64 65 73  .** detailed des
1d1c0 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20  cription of the 
1d1d0 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 69  meaning of the i
1d1e0 4c 69 6d 69 74 20 61 6e 64 20 69 4f 66 66 73 65  Limit and iOffse
1d1f0 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20  t fields..**.** 
1d200 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65  addrOpenEphm[] e
1d210 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74  ntries contain t
1d220 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50  he address of OP
1d230 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
1d240 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65  pcodes..** These
1d250 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20   addresses must 
1d260 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61  be stored so tha
1d270 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b  t we can go back
1d280 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20   and fill in.** 
1d290 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61  the P4_KEYINFO a
1d2a0 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73  nd P2 parameters
1d2b0 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72   later.  Neither
1d2c0 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72   the KeyInfo nor
1d2d0 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
1d2e0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20  f columns in P2 
1d2f0 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20  can be computed 
1d300 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
1d310 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70  .** as the OP_Op
1d320 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69  enEphm instructi
1d330 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61  on is coded beca
1d340 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67  use not.** enoug
1d350 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  h information ab
1d360 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64  out the compound
1d370 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20   query is known 
1d380 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a  at that point..*
1d390 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f  * The KeyInfo fo
1d3a0 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30  r addrOpenTran[0
1d3b0 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69  ] and [1] contai
1d3c0 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ns collating seq
1d3d0 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68  uences.** for th
1d3e0 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54  e result set.  T
1d3f0 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
1d400 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63  ddrOpenEphm[2] c
1d410 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1d420 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66  g.** sequences f
1d430 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
1d440 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
1d450 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70  t Select {.  Exp
1d460 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
1d470 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64      /* The field
1d480 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  s of the result 
1d490 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1d4b0 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20  ne of: TK_UNION 
1d4c0 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53  TK_ALL TK_INTERS
1d4d0 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f  ECT TK_EXCEPT */
1d4e0 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63  .  LogEst nSelec
1d4f0 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  tRow;     /* Est
1d500 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
1d510 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
1d520 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20    u32 selFlags; 
1d530 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
1d540 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20  ous SF_* values 
1d550 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  */.  int iLimit,
1d560 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d   iOffset;   /* M
1d570 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
1d580 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20  holding LIMIT & 
1d590 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20  OFFSET counters 
1d5a0 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  */.#if SELECTTRA
1d5b0 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61  CE_ENABLED.  cha
1d5c0 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20  r zSelName[12]; 
1d5d0 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20      /* Symbolic 
1d5e0 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c  name of this SEL
1d5f0 45 43 54 20 75 73 65 20 66 6f 72 20 64 65 62 75  ECT use for debu
1d600 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  gging */.#endif.
1d610 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
1d620 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[2];   /* OP_O
1d630 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
1d640 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
1d650 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63   select */.  Src
1d660 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20  List *pSrc;     
1d670 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20      /* The FROM 
1d680 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1d690 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
1d6a0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1d6b0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1d6c0 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
1d6d0 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20     /* The GROUP 
1d6e0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
1d6f0 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20  xpr *pHaving;   
1d700 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56        /* The HAV
1d710 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ING clause */.  
1d720 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1d730 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52  By;    /* The OR
1d740 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  DER BY clause */
1d750 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f  .  Select *pPrio
1d760 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69  r;        /* Pri
1d770 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63  or select in a c
1d780 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73  ompound select s
1d790 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65  tatement */.  Se
1d7a0 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  lect *pNext;    
1d7b0 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c       /* Next sel
1d7c0 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ect to the left 
1d7d0 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f  in a compound */
1d7e0 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b  .  Expr *pLimit;
1d7f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d            /* LIM
1d800 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  IT expression. N
1d810 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
1d820 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ed. */.  With *p
1d830 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
1d840 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61  /* WITH clause a
1d850 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
1d860 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e  select. Or NULL.
1d870 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57   */.  Window *pW
1d880 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  in;          /* 
1d890 4c 69 73 74 20 6f 66 20 77 69 6e 64 6f 77 20 66  List of window f
1d8a0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69  unctions */.  Wi
1d8b0 6e 64 6f 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20  ndow *pWinDefn; 
1d8c0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1d8d0 6e 61 6d 65 64 20 77 69 6e 64 6f 77 20 64 65 66  named window def
1d8e0 69 6e 69 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  initions */.};..
1d8f0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
1d900 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
1d910 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
1d920 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
1d930 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
1d940 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61   Flag"..**.** Va
1d950 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1d960 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61  (all checked via
1d970 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20   assert()).**   
1d980 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20    SF_HasAgg     
1d990 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20  == NC_HasAgg.** 
1d9a0 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67      SF_MinMaxAgg
1d9b0 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67    == NC_MinMaxAg
1d9c0 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  g     == SQLITE_
1d9d0 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20  FUNC_MINMAX.**  
1d9e0 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74     SF_FixedLimit
1d9f0 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49   == WHERE_USE_LI
1da00 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT.*/.#define S
1da10 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
1da20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74   0x00001  /* Out
1da30 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
1da40 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
1da50 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20  e SF_All        
1da60 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20      0x00002  /* 
1da70 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c  Includes the ALL
1da80 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1da90 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20  ine SF_Resolved 
1daa0 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f        0x00004  /
1dab0 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61  * Identifiers ha
1dac0 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
1dad0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1dae0 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78  ggregate      0x
1daf0 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69  00008  /* Contai
1db00 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73  ns agg functions
1db10 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a   or a GROUP BY *
1db20 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1db30 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30  Agg         0x00
1db40 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  010  /* Contains
1db50 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1db60 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
1db70 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
1db80 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73    0x00020  /* Us
1db90 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
1dba0 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
1dbb0 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
1dbc0 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30  ed       0x00040
1dbd0 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
1dbe0 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
1dbf0 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
1dc00 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
1dc10 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20  nfo    0x00080  
1dc20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
1dc30 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
1dc40 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
1dc50 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20  e SF_Compound   
1dc60 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20      0x00100  /* 
1dc70 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75  Part of a compou
1dc80 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66  nd query */.#def
1dc90 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20  ine SF_Values   
1dca0 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f        0x00200  /
1dcb0 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72  * Synthesized fr
1dcc0 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  om VALUES clause
1dcd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1dce0 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78  ultiValue     0x
1dcf0 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65  00400  /* Single
1dd00 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74   VALUES term wit
1dd10 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1dd20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65  */.#define SF_Ne
1dd30 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30  stedFrom     0x0
1dd40 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0800  /* Part of
1dd50 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
1dd60 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1dd70 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61  #define SF_MinMa
1dd80 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30  xAgg      0x0100
1dd90 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  0  /* Aggregate 
1dda0 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29  containing min()
1ddb0 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65   or max() */.#de
1ddc0 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76  fine SF_Recursiv
1ddd0 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20  e      0x02000  
1dde0 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65  /* The recursive
1ddf0 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72   part of a recur
1de00 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66  sive CTE */.#def
1de10 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69  ine SF_FixedLimi
1de20 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f  t     0x04000  /
1de30 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74  * nSelectRow set
1de40 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c   by a constant L
1de50 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT */.#define 
1de60 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
1de70 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65    0x08000  /* Ne
1de80 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
1de90 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1dea0 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1deb0 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20  SF_Converted    
1dec0 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79    0x10000  /* By
1ded0 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1dee0 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1def0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1df00 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20  _IncludeHidden  
1df10 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c  0x20000  /* Incl
1df20 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ude hidden colum
1df30 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a  ns in output */.
1df40 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c  #define SF_Compl
1df50 65 78 52 65 73 75 6c 74 20 20 30 78 34 30 30 30  exResult  0x4000
1df60 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 6e  0  /* Result con
1df70 74 61 69 6e 73 20 73 75 62 71 75 65 72 79 20 6f  tains subquery o
1df80 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f  r function */../
1df90 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73  *.** The results
1dfa0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e   of a SELECT can
1dfb0 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20   be distributed 
1dfc0 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
1dfd0 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62   as defined.** b
1dfe0 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1dff0 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20  lowing macros.  
1e000 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78  The "SRT" prefix
1e010 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52   means "SELECT R
1e020 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a  esult.** Type"..
1e030 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e  **.**     SRT_Un
1e040 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20  ion       Store 
1e050 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79  results as a key
1e060 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1e070 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20  index.**        
1e080 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65               ide
1e090 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74  ntified by pDest
1e0a0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
1e0b0 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20       SRT_Except 
1e0c0 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75       Remove resu
1e0d0 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d  lts from the tem
1e0e0 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65  porary index pDe
1e0f0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1e100 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74  **     SRT_Exist
1e110 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31  s      Store a 1
1e120 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
1e130 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69  pDest->iSDParm i
1e140 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  f the result.** 
1e150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e160 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65      set is not e
1e170 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mpty..**.**     
1e180 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
1e190 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74  Throw the result
1e1a0 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73  s away.  This is
1e1b0 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a   used by SELECT.
1e1c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e1d0 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
1e1e0 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
1e1f0 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72  s whose only pur
1e200 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20  pose is.**      
1e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e220 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20  he side-effects 
1e230 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  of functions..**
1e240 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61  .** All of the a
1e250 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f  bove are free to
1e260 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52   ignore their OR
1e270 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54  DER BY clause. T
1e280 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c  hose that.** fol
1e290 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74  low must honor t
1e2a0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1e2b0 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
1e2c0 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65  T_Output      Ge
1e2d0 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20  nerate a row of 
1e2e0 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68  output (using th
1e2f0 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a  e OP_ResultRow.*
1e300 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e310 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f        opcode) fo
1e320 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  r each row in th
1e330 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a  e result set..**
1e340 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20  .**     SRT_Mem 
1e350 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c          Only val
1e360 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  id if the result
1e370 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   is a single col
1e380 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  umn..**         
1e390 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72              Stor
1e3a0 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75  e the first colu
1e3b0 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  mn of the first 
1e3c0 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20  result row.**   
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3e0 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44    in register pD
1e3f0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65  est->iSDParm the
1e400 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65  n abandon the re
1e410 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  st.**           
1e420 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
1e430 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65   query.  This de
1e440 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65  stination implie
1e450 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a  s "LIMIT 1"..**.
1e460 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20  **     SRT_Set  
1e470 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c         The resul
1e480 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67  t must be a sing
1e490 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72  le column.  Stor
1e4a0 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20  e each.**       
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1e4c0 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74  w of result as t
1e4d0 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20  he key in table 
1e4e0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1e4f0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e500 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65         Apply the
1e510 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d   affinity pDest-
1e520 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20  >affSdst before 
1e530 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20  storing.**      
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e550 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f  esults.  Used to
1e560 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28   implement "IN (
1e570 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a  SELECT ...)"..**
1e580 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65  .**     SRT_Ephe
1e590 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61  mTab    Create a
1e5a0 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1e5b0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1e5c0 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20   and store.**   
1e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5e0 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65    the result the
1e5f0 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69  re. The cursor i
1e600 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65  s left open afte
1e610 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  r.**            
1e620 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69           returni
1e630 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b  ng.  This is lik
1e640 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65  e SRT_Table exce
1e650 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20  pt that.**      
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e670 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1e680 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65  uses OP_OpenEphe
1e690 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a  meral to create.
1e6a0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e6b0 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65         the table
1e6c0 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20   first..**.**   
1e6d0 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20    SRT_Coroutine 
1e6e0 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d    Generate a co-
1e6f0 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74  routine that ret
1e700 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f  urns a new row o
1e710 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
1e720 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
1e730 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73   each time it is
1e740 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65   invoked.  The e
1e750 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20  ntry point.**   
1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e770 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74    of the co-rout
1e780 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ine is stored in
1e790 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1e7a0 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20  >iSDParm.**     
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7c0 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72  and the result r
1e7d0 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ow is stored in 
1e7e0 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67  pDest->nDest reg
1e7f0 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20  isters.**       
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1e810 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73  arting with pDes
1e820 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20  t->iSdst..**.** 
1e830 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20      SRT_Table   
1e840 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1e850 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  s in temporary t
1e860 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1e870 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f  arm..**     SRT_
1e880 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73  Fifo        This
1e890 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68   is like SRT_Eph
1e8a0 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61  emTab except tha
1e8b0 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20  t the table.**  
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8d0 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f     is assumed to
1e8e0 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e   already be open
1e8f0 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a  .  SRT_Fifo has.
1e900 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e910 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74         the addit
1e920 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f  ional property o
1e930 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20  f being able to 
1e940 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20  ignore.**       
1e950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1e960 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1e970 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
1e980 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f  _DistFifo    Sto
1e990 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20  re results in a 
1e9a0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1e9b0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1e9c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e9d0 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20         But also 
1e9e0 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  use temporary ta
1e9f0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1ea00 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20  rm+1 as.**      
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1ea20 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70   record of all p
1ea30 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64  rior results and
1ea40 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c   ignore any dupl
1ea50 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  icate.**        
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
1ea70 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20  s.  Name means: 
1ea80 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22   "Distinct Fifo"
1ea90 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1eaa0 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72  Queue       Stor
1eab0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
1eac0 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
1ead0 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c  t->iSDParm (real
1eae0 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ly.**           
1eaf0 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64            an ind
1eb00 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73  ex).  Append a s
1eb10 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73  equence number s
1eb20 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69  o that all entri
1eb30 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  es.**           
1eb40 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69            are di
1eb50 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  stinct..**.**   
1eb60 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20    SRT_DistQueue 
1eb70 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1eb80 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1eb90 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1eba0 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20   only if.**     
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebc0 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20  the same record 
1ebd0 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73  has never been s
1ebe0 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54  tored before.  T
1ebf0 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  he.**           
1ec00 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20            index 
1ec10 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  at pDest->iSDPar
1ec20 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69  m+1 hold all pri
1ec30 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64  or stores..*/.#d
1ec40 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20  efine SRT_Union 
1ec50 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f         1  /* Sto
1ec60 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79  re result as key
1ec70 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
1ec80 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63  .#define SRT_Exc
1ec90 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20  ept       2  /* 
1eca0 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72  Remove result fr
1ecb0 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78  om a UNION index
1ecc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1ecd0 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20  Exists       3  
1ece0 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68  /* Store 1 if th
1ecf0 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20  e result is not 
1ed00 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
1ed10 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
1ed20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73    4  /* Do not s
1ed30 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ave the results 
1ed40 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66  anywhere */.#def
1ed50 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20  ine SRT_Fifo    
1ed60 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65       5  /* Store
1ed70 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1ed80 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1ed90 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  c rowid */.#defi
1eda0 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20  ne SRT_DistFifo 
1edb0 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53      6  /* Like S
1edc0 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69  RT_Fifo, but uni
1edd0 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
1ede0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1edf0 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20  Queue        7  
1ee00 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1ee10 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23  in an queue */.#
1ee20 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51  define SRT_DistQ
1ee30 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69  ueue    8  /* Li
1ee40 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75  ke SRT_Queue, bu
1ee50 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1ee60 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65   only */../* The
1ee70 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1ee80 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20   is ignored for 
1ee90 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  all of the above
1eea0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f   */.#define Igno
1eeb0 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20  rableOrderby(X) 
1eec0 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54  ((X->eDest)<=SRT
1eed0 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65  _DistQueue)..#de
1eee0 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20  fine SRT_Output 
1eef0 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70        9  /* Outp
1ef00 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72  ut each row of r
1ef10 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
1ef20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
1ef30 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   10  /* Store re
1ef40 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79  sult in a memory
1ef50 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65   cell */.#define
1ef60 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
1ef70 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   11  /* Store re
1ef80 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e  sults as keys in
1ef90 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1efa0 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61  fine SRT_EphemTa
1efb0 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61  b    12  /* Crea
1efc0 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62  te transient tab
1efd0 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20   and store like 
1efe0 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65  SRT_Table */.#de
1eff0 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69  fine SRT_Corouti
1f000 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65  ne   13  /* Gene
1f010 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f  rate a single ro
1f020 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
1f030 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
1f040 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74         14  /* St
1f050 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1f060 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1f070 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f  atic rowid */../
1f080 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1f090 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
1f0a0 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20  describes where 
1f0b0 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65  to put of the re
1f0c0 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45  sults of.** a SE
1f0d0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1f0e0 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
1f0f0 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73  Dest {.  u8 eDes
1f100 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
1f110 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20   How to dispose 
1f120 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20  of the results. 
1f130 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f   On of SRT_* abo
1f140 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44  ve. */.  int iSD
1f150 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  Parm;         /*
1f160 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65   A parameter use
1f170 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64  d by the eDest d
1f180 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a  isposal method *
1f190 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20  /.  int iSdst;  
1f1a0 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65           /* Base
1f1b0 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20   register where 
1f1c0 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74  results are writ
1f1d0 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64  ten */.  int nSd
1f1e0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
1f1f0 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
1f200 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  ters allocated *
1f210 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53 64  /.  char *zAffSd
1f220 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69  st;      /* Affi
1f230 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65  nity used when e
1f240 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f  Dest==SRT_Set */
1f250 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
1f260 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63  derBy;  /* Key c
1f270 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51  olumns for SRT_Q
1f280 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73  ueue and SRT_Dis
1f290 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  tQueue */.};../*
1f2a0 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20  .** During code 
1f2b0 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74  generation of st
1f2c0 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f  atements that do
1f2d0 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55   inserts into AU
1f2e0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74  TOINCREMENT.** t
1f2f0 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f  ables, the follo
1f300 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  wing information
1f310 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
1f320 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f  the Table.u.auto
1f330 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72  Inc.p.** pointer
1f340 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63   of each autoinc
1f350 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20  rement table to 
1f360 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65  record some side
1f370 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
1f380 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65  t.** the code ge
1f390 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20  nerator needs.  
1f3a0 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20  We have to keep 
1f3b0 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e  per-table autoin
1f3c0 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72  crement.** infor
1f3d0 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69  mation in case i
1f3e0 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20  nserts are done 
1f3f0 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
1f400 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f    Triggers do no
1f410 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f  t.** normally co
1f420 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61  ordinate their a
1f430 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77  ctivities, but w
1f440 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f  e do need to coo
1f450 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c  rdinate the.** l
1f460 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e  oading and savin
1f470 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65  g of autoincreme
1f480 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  nt information..
1f490 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e  */.struct Autoin
1f4a0 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e  cInfo {.  Autoin
1f4b0 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20  cInfo *pNext;   
1f4c0 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f  /* Next info blo
1f4d0 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20  ck in a list of 
1f4e0 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61  them all */.  Ta
1f4f0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
1f500 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69      /* Table thi
1f510 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66  s info block ref
1f520 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20  ers to */.  int 
1f530 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1f540 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71    /* Index in sq
1f550 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64  lite3.aDb[] of d
1f560 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
1f570 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65  pTab */.  int re
1f580 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20  gCtr;           
1f590 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1f5a0 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72  er holding the r
1f5b0 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  owid counter */.
1f5c0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f  };../*.** Size o
1f5d0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63  f the column cac
1f5e0 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  he.*/.#ifndef SQ
1f5f0 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a  LITE_N_COLCACHE.
1f600 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1f610 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65  N_COLCACHE 10.#e
1f620 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c  ndif../*.** At l
1f630 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63  east one instanc
1f640 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1f650 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
1f660 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
1f670 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74  .** trigger that
1f680 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68   may be fired wh
1f690 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49  ile parsing an I
1f6a0 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72  NSERT, UPDATE or
1f6b0 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65   DELETE.** state
1f6c0 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f  ment. All such o
1f6d0 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65  bjects are store
1f6e0 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20  d in the linked 
1f6f0 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a  list headed at.*
1f700 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  * Parse.pTrigger
1f710 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20  Prg and deleted 
1f720 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63  once statement c
1f730 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62  ompilation has b
1f740 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64  een.** completed
1f750 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73  ..**.** A Vdbe s
1f760 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20  ub-program that 
1f770 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62  implements the b
1f780 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61  ody and WHEN cla
1f790 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a  use of trigger.*
1f7a0 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72  * TriggerPrg.pTr
1f7b0 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20  igger, assuming 
1f7c0 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  a default ON CON
1f7d0 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a  FLICT clause of.
1f7e0 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72  ** TriggerPrg.or
1f7f0 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20  conf, is stored 
1f800 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72  in the TriggerPr
1f810 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61  g.pProgram varia
1f820 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73  ble..** The Pars
1f830 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
1f840 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e  st never contain
1f850 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69  s two entries wi
1f860 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76  th the same.** v
1f870 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70  alues for both p
1f880 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f  Trigger and orco
1f890 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72  nf..**.** The Tr
1f8a0 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1f8b0 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[0] variable is
1f8c0 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f   set to a mask o
1f8d0 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a  f old.* columns.
1f8e0 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20  ** accessed (or 
1f8f0 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69  set to 0 for tri
1f900 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61  ggers fired as a
1f910 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52   result of INSER
1f920 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29  T.** statements)
1f930 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
1f940 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1f950 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
1f960 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
1f970 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
1f980 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
1f990 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
1f9a0 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
1f9b0 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
1f9c0 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
1f9d0 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
1f9e0 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
1f9f0 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
1fa00 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
1fa10 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
1fa20 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1fa30 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
1fa40 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
1fa50 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
1fa60 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
1fa70 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
1fa80 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
1fa90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1faa0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1fab0 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
1fac0 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
1fad0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
1fae0 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
1faf0 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
1fb00 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1fb10 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
1fb20 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
1fb30 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
1fb40 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
1fb50 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
1fb60 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
1fb70 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61  def unsigned cha
1fb80 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54  r yDbMask[(SQLIT
1fb90 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39  E_MAX_ATTACHED+9
1fba0 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44  )/8];.# define D
1fbb0 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1fbc0 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28    (((M)[(I)/8]&(
1fbd0 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29  1<<((I)&7)))!=0)
1fbe0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1fbf0 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d  Zero(M)      mem
1fc00 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66  set((M),0,sizeof
1fc10 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (M)).# define Db
1fc20 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
1fc30 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c   (M)[(I)/8]|=(1<
1fc40 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69  <((I)&7)).# defi
1fc50 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
1fc60 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  (M)   sqlite3DbM
1fc70 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20  askAllZero(M).# 
1fc80 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1fc90 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74  Zero(M)   (sqlit
1fca0 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
1fcb0 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74  M)==0).#else.  t
1fcc0 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1fcd0 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64  int yDbMask;.# d
1fce0 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
1fcf0 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28  (M,I)    (((M)&(
1fd00 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
1fd10 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
1fd20 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
1fd30 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69      (M)=0.# defi
1fd40 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
1fd50 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44  )     (M)|=(((yD
1fd60 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23  bMask)1)<<(I)).#
1fd70 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
1fd80 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d  lZero(M)   (M)==
1fd90 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1fda0 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kNonZero(M)   (M
1fdb0 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )!=0.#endif../*.
1fdc0 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
1fdd0 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
1fde0 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
1fdf0 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
1fe00 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
1fe10 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
1fe20 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
1fe30 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
1fe40 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
1fe50 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
1fe60 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
1fe70 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
1fe80 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a  tire parse..**.*
1fe90 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20  * The structure 
1fea0 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
1feb0 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e  two parts.  When
1fec0 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1fed0 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  code.** generate
1fee0 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73   call themselves
1fef0 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68   recursively, th
1ff00 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20  e first part of 
1ff10 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  the structure.**
1ff20 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74   is constant but
1ff30 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74   the second part
1ff40 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65   is reset at the
1ff50 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65   beginning and e
1ff60 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65  nd of.** each re
1ff70 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  cursion..**.** T
1ff80 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e  he nTableLock an
1ff90 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72  d aTableLock var
1ffa0 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
1ffb0 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72  used if the shar
1ffc0 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74  ed-cache.** feat
1ffd0 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ure is enabled (
1ffe0 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d  if sqlite3Tsd()-
1fff0 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69  >useSharedData i
20000 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72  s true). They ar
20010 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  e.** used to sto
20020 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61  re the set of ta
20030 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72  ble-locks requir
20040 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d  ed by the statem
20050 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d  ent being.** com
20060 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20  piled. Function 
20070 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
20080 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64  () is used to ad
20090 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65  d entries to the
200a0 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72  .** list..*/.str
200b0 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71  uct Parse {.  sq
200c0 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
200d0 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64     /* The main d
200e0 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72  atabase structur
200f0 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  e */.  char *zEr
20100 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41  rMsg;       /* A
20110 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
20120 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  */.  Vdbe *pVdbe
20130 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
20140 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75  engine for execu
20150 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79  ting database by
20160 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  tecode */.  int 
20170 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
20180 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20   /* Return code 
20190 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a  from execution *
201a0 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53  /.  u8 colNamesS
201b0 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45  et;      /* TRUE
201c0 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e   after OP_Column
201d0 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73  Name has been is
201e0 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f  sued to pVdbe */
201f0 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d  .  u8 checkSchem
20200 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65  a;      /* Cause
20210 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  s schema cookie 
20220 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65  check after an e
20230 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73  rror */.  u8 nes
20240 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ted;           /
20250 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
20260 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20  ed calls to the 
20270 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65  parser/code gene
20280 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54  rator */.  u8 nT
20290 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
202a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d  /* Number of tem
202b0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
202c0 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a   in aTempReg[] *
202d0 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72  /.  u8 isMultiWr
202e0 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  ite;     /* True
202f0 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
20300 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20  y modify/insert 
20310 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
20320 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20  .  u8 mayAbort; 
20330 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
20340 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
20350 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
20360 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75  exception */.  u
20370 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20  8 hasCompound;  
20380 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69      /* Need to i
20390 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d  nvoke convertCom
203a0 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
203b0 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20  query() */.  u8 
203c0 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20  okConstFactor;  
203d0 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f    /* OK to facto
203e0 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  r out constants 
203f0 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c  */.  u8 disableL
20400 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d  ookaside; /* Num
20410 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f  ber of times loo
20420 6b 61 73 69 64 65 20 68 61 73 20 62 65 65 6e 20  kaside has been 
20430 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38  disabled */.  u8
20440 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20   nColCache;     
20450 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20460 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 43  entries in aColC
20470 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  ache[] */.  int 
20480 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
20490 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
204a0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
204b0 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
204c0 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
204d0 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
204e0 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
204f0 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
20500 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
20510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20520 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
20530 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
20540 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
20550 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
20560 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
20570 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
20580 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
20590 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
205a0 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
205b0 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
205c0 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20    int nOpAlloc; 
205d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
205e0 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61   of slots alloca
205f0 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70  ted for Vdbe.aOp
20600 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70  [] */.  int szOp
20610 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20  Alloc;       /* 
20620 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  Bytes of memory 
20630 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
20640 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
20650 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62  /.  int iSelfTab
20660 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c  ;        /* Tabl
20670 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
20680 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78  h an index on ex
20690 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 0a  pr, or negative.
206a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206b0 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
206c0 20 62 61 73 65 20 72 65 67 69 73 74 65 72 20 64   base register d
206d0 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73  uring check-cons
206e0 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20  traint eval */. 
206f0 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c   int iCacheLevel
20700 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68  ;     /* ColCach
20710 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f  e valid when aCo
20720 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c  lCache[].iLevel<
20730 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a  =iCacheLevel */.
20740 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b    int iCacheCnt;
20750 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
20760 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  r used to genera
20770 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c  te aColCache[].l
20780 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  ru values */.  i
20790 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20  nt nLabel;      
207a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
207b0 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a   labels used */.
207c0 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20    int *aLabel;  
207d0 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
207e0 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65  to hold the labe
207f0 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ls */.  ExprList
20800 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20   *pConstExpr;/* 
20810 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  Constant express
20820 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  ions */.  Token 
20830 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f  constraintName;/
20840 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
20850 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74  nstraint current
20860 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20  ly being parsed 
20870 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69  */.  yDbMask wri
20880 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61  teMask;   /* Sta
20890 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73  rt a write trans
208a0 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20  action on these 
208b0 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79  databases */.  y
208c0 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73  DbMask cookieMas
208d0 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f  k;  /* Bitmask o
208e0 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65  f schema verifie
208f0 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  d databases */. 
20900 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20   int regRowid;  
20910 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
20920 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20  r holding rowid 
20930 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  of CREATE TABLE 
20940 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72  entry */.  int r
20950 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20  egRoot;         
20960 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
20970 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ing root page nu
20980 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a  mber for new obj
20990 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  ects */.  int nM
209a0 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f  axArg;         /
209b0 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65  * Max args passe
209c0 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  d to user functi
209d0 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61  on by sub-progra
209e0 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54  m */.#if SELECTT
209f0 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69  RACE_ENABLED.  i
20a00 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20  nt nSelect;     
20a10 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20a20 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
20a30 74 73 20 73 65 65 6e 20 2a 2f 0a 23 65 6e 64 69  ts seen */.#endi
20a40 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
20a50 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
20a60 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
20a70 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
20a80 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
20a90 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
20aa0 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
20ab0 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
20ac0 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
20ad0 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
20ae0 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
20af0 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
20b00 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
20b10 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
20b20 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
20b30 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ers */.  Parse *
20b40 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
20b50 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
20b60 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
20b70 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
20b80 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
20b90 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
20ba0 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
20bb0 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
20bc0 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
20bd0 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
20be0 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 42 74 72   of OP_CreateBtr
20bf0 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  ee opcode on CRE
20c00 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75  ATE TABLE */.  u
20c10 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
20c20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
20c30 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
20c40 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
20c50 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
20c60 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
20c70 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
20c80 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
20c90 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
20ca0 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
20cb0 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
20cc0 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
20cd0 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
20ce0 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
20cf0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
20d00 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
20d10 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
20d20 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
20d30 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
20d40 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
20d50 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
20d60 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
20d70 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
20d80 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
20d90 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  rs */..  /******
20da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20db0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20de0 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73  ****.  ** Fields
20df0 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65 20 69   above must be i
20e00 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65  nitialized to ze
20e10 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64 73 20  ro.  The fields 
20e20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a  that follow,.  *
20e30 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 62 65  * down to the be
20e40 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72  ginning of the r
20e50 65 63 75 72 73 69 76 65 20 73 65 63 74 69 6f 6e  ecursive section
20e60 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  , do not need to
20e70 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c   be.  ** initial
20e80 69 7a 65 64 20 61 73 20 74 68 65 79 20 77 69 6c  ized as they wil
20e90 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72 65 20  l be set before 
20ea0 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65  being used.  The
20eb0 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20 20 2a   boundary is.  *
20ec0 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
20ed0 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61  offsetof(Parse,a
20ee0 43 6f 6c 43 61 63 68 65 29 2e 0a 20 20 2a 2a 2a  ColCache)..  ***
20ef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20f30 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 73 74 72 75  *******/..  stru
20f40 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20  ct yColCache {. 
20f50 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
20f60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
20f70 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  e cursor number 
20f80 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75  */.    i16 iColu
20f90 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
20fa0 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  Table column num
20fb0 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65  ber */.    u8 te
20fc0 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20  mpReg;          
20fd0 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65   /* iReg is a te
20fe0 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74  mp register that
20ff0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65   needs to be fre
21000 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c  ed */.    int iL
21010 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
21020 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c  /* Nesting level
21030 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67   */.    int iReg
21040 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
21050 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20   Reg with value 
21060 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
21070 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f  0 means none. */
21080 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20  .    int lru;   
21090 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
210a0 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65  ast recently use
210b0 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20  d entry has the 
210c0 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a  smallest value *
210d0 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b  /.  } aColCache[
210e0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
210f0 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20  E];  /* One for 
21100 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68  each column cach
21110 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  e entry */.  int
21120 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20   aTempReg[8];   
21130 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20       /* Holding 
21140 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61  area for tempora
21150 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a  ry registers */.
21160 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
21170 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b  en;       /* Tok
21180 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66  en with unqualif
21190 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  ied schema objec
211a0 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a  t name */..  /**
211b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211f0 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76  ******.  ** Abov
21200 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
21210 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
21220 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
21230 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
21240 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
21250 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75  ursion.  The bou
21260 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68  ndary between th
21270 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20  ese two regions 
21280 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20  is determined.  
21290 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f  ** using offseto
212a0 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b  f(Parse,sLastTok
212b0 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73 74  en) so the sLast
212c0 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73 74  Token field must
212d0 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69 72   be the.  ** fir
212e0 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20  st field in the 
212f0 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e  recursive region
21300 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
21310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
21350 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
21360 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  n;       /* The 
21370 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
21380 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61  d */.  ynVar nVa
21390 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
213a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f   /* Number of '?
213b0 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e  ' variables seen
213c0 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66   in the SQL so f
213d0 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f  ar */.  u8 iPkSo
213e0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
213f0 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43    /* ASC or DESC
21400 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
21410 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38  MARY KEY */.  u8
21420 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20   explain;       
21430 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
21440 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66  if the EXPLAIN f
21450 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20  lag is found on 
21460 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66  the query */.#if
21470 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21480 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
21490 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20  u8 declareVtab; 
214a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
214b0 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69  e if inside sqli
214c0 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
214d0 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61  () */.  int nVta
214e0 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20  bLock;          
214f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
21500 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f  irtual tables to
21510 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a   lock */.#endif.
21520 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
21530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
21540 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68  xpression tree h
21550 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74  eight of current
21560 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23   sub-select */.#
21570 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21580 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74  IT_EXPLAIN.  int
21590 20 61 64 64 72 45 78 70 6c 61 69 6e 3b 20 20 20   addrExplain;   
215a0 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
215b0 73 20 6f 66 20 63 75 72 72 65 6e 74 20 4f 50 5f  s of current OP_
215c0 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 2a  Explain opcode *
215d0 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74  /.#endif.  VList
215e0 20 2a 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20   *pVList;       
215f0 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
21600 62 65 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65  between variable
21610 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65   names and numbe
21620 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52  rs */.  Vdbe *pR
21630 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20  eprepare;       
21640 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65    /* VM being re
21650 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65  prepared (sqlite
21660 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f  3Reprepare()) */
21670 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
21680 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  Tail;        /* 
21690 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73  All SQL text pas
216a0 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63  t the last semic
216b0 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  olon parsed */. 
216c0 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c   Table *pNewTabl
216d0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
216e0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73  table being cons
216f0 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54  tructed by CREAT
21700 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69  E TABLE */.  Tri
21710 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65  gger *pNewTrigge
21720 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  r;     /* Trigge
21730 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63  r under construc
21740 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52  t by a CREATE TR
21750 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74  IGGER */.  const
21760 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
21770 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20  ext; /* The 6th 
21780 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d  parameter to db-
21790 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73  >xAuth callbacks
217a0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
217b0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
217c0 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
217d0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
217e0 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
217f0 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
21800 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
21810 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
21820 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
21830 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
21840 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
21850 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
21860 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
21870 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
21880 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
21890 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
218a0 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
218b0 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
218c0 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
218d0 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
218e0 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20  d triggers */.  
218f0 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
21900 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
21910 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65  rent WITH clause
21920 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57  , or NULL */.  W
21930 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65  ith *pWithToFree
21940 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65  ;        /* Free
21950 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63   this WITH objec
21960 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  t at the end of 
21970 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a  the parse */.};.
21980 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64  ./*.** Sizes and
21990 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61 72   pointers of var
219a0 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74 68  ious parts of th
219b0 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a  e Parse object..
219c0 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  */.#define PARSE
219d0 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66  _HDR_SZ offsetof
219e0 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65  (Parse,aColCache
219f0 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70  ) /* Recursive p
21a00 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68  art w/o aColCach
21a10 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53  e*/.#define PARS
21a20 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66  E_RECURSE_SZ off
21a30 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73  setof(Parse,sLas
21a40 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65  tToken)    /* Re
21a50 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a  cursive part */.
21a60 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41  #define PARSE_TA
21a70 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61  IL_SZ (sizeof(Pa
21a80 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52  rse)-PARSE_RECUR
21a90 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65  SE_SZ) /* Non-re
21aa0 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a  cursive part */.
21ab0 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41  #define PARSE_TA
21ac0 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29 28  IL(X) (((char*)(
21ad0 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53  X))+PARSE_RECURS
21ae0 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65  E_SZ)  /* Pointe
21af0 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a  r to tail */../*
21b00 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
21b10 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73  if currently ins
21b20 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64  ide an sqlite3_d
21b30 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61  eclare_vtab() ca
21b40 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ll..*/.#ifdef SQ
21b50 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
21b60 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65  LTABLE.  #define
21b70 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
21b80 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
21b90 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
21ba0 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c  AB (pParse->decl
21bb0 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a  areVtab).#endif.
21bc0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
21bd0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
21be0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61  ing structure ca
21bf0 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e  n be declared on
21c00 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65   a stack and use
21c10 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65  d.** to save the
21c20 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
21c30 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61  ext value so tha
21c40 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
21c50 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73  ored later..*/.s
21c60 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
21c70 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  t {.  const char
21c80 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
21c90 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50    /* Put saved P
21ca0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
21cb0 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73  t here */.  Pars
21cc0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
21cd0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
21ce0 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  arse structure *
21cf0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66  /.};../*.** Bitf
21d00 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50  ield flags for P
21d10 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f  5 value in vario
21d20 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a  us opcodes..**.*
21d30 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
21d40 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
21d50 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
21d60 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48     OPFLAG_LENGTH
21d70 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  ARG    == SQLITE
21d80 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20  _FUNC_LENGTH.** 
21d90 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46     OPFLAG_TYPEOF
21da0 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  ARG    == SQLITE
21db0 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20  _FUNC_TYPEOF.** 
21dc0 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53     OPFLAG_BULKCS
21dd0 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  R      == BTREE_
21de0 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f  BULKLOAD.**    O
21df0 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20  PFLAG_SEEKEQ    
21e00 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b     == BTREE_SEEK
21e10 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  _EQ.**    OPFLAG
21e20 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d  _FORDELETE    ==
21e30 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45   BTREE_FORDELETE
21e40 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41  .**    OPFLAG_SA
21e50 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54  VEPOSITION == BT
21e60 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  REE_SAVEPOSITION
21e70 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55  .**    OPFLAG_AU
21e80 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54  XDELETE    == BT
21e90 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f  REE_AUXDELETE.*/
21ea0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21eb0 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
21ec0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65  01    /* OP_Inse
21ed0 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74  rt: Set to updat
21ee0 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f  e db->nChange */
21ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f10 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73        /* Also us
21f20 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35  ed in P2 (not P5
21f30 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a  ) of OP_Delete *
21f40 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21f50 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20 30  _EPHEM         0
21f60 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x01    /* OP_Col
21f70 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f  umn: Ephemeral o
21f80 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23  utput is ok */.#
21f90 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
21fa0 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 32 30  STROWID     0x20
21fb0 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
21fc0 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
21fd0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
21fe0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
21ff0 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
22000 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
22010 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
22020 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22030 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
22040 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
22050 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
22060 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
22070 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
22080 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
22090 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
220a0 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
220b0 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
220c0 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50  ne OPFLAG_ISNOOP
220d0 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20 20          0x40    
220e0 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65  /* OP_Delete doe
220f0 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f  s pre-update-hoo
22100 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  k only */.#defin
22110 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  e OPFLAG_LENGTHA
22120 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20 2f  RG     0x40    /
22130 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
22140 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68   used for length
22150 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
22160 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20  FLAG_TYPEOFARG  
22170 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50     0x80    /* OP
22180 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
22190 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a  d for typeof() *
221a0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
221b0 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30  _BULKCSR       0
221c0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x01    /* OP_Ope
221d0 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e  n** used to open
221e0 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a   bulk cursor */.
221f0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53  #define OPFLAG_S
22200 45 45 4b 45 51 20 20 20 20 20 20 20 20 30 78 30  EEKEQ        0x0
22210 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  2    /* OP_Open*
22220 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20 45 51  * cursor uses EQ
22230 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64   seek only */.#d
22240 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52  efine OPFLAG_FOR
22250 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 38 20  DELETE     0x08 
22260 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68     /* OP_Open sh
22270 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46  ould use BTREE_F
22280 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  ORDELETE */.#def
22290 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  ine OPFLAG_P2ISR
222a0 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20 20  EG       0x10   
222b0 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65   /* P2 to OP_Ope
222c0 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65  n** is a registe
222d0 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66  r number */.#def
222e0 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  ine OPFLAG_PERMU
222f0 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  TE       0x01   
22300 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20   /* OP_Compare: 
22310 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74  use the permutat
22320 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
22330 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
22340 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f  ON  0x02    /* O
22350 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72 74 3a  P_Delete/Insert:
22360 20 73 61 76 65 20 63 75 72 73 6f 72 20 70 6f 73   save cursor pos
22370 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22380 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20  AG_AUXDELETE    
22390 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44   0x04    /* OP_D
223a0 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20  elete: index in 
223b0 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 23  a DELETE op */.#
223c0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f  define OPFLAG_NO
223d0 43 48 4e 47 5f 4d 41 47 49 43 20 20 30 78 36 64  CHNG_MAGIC  0x6d
223e0 20 20 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65 52 65      /* OP_MakeRe
223f0 63 6f 72 64 3a 20 73 65 72 69 61 6c 74 79 70 65  cord: serialtype
22400 20 31 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a   10 is ok */../*
22410 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
22420 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
22430 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
22440 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
22450 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
22460 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20  truct Trigger.. 
22470 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
22480 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
22490 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
224a0 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
224b0 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
224c0 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
224d0 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
224e0 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
224f0 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
22500 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65  e. *    database
22510 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54  ). This allows T
22520 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65  rigger structure
22530 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65  s to be retrieve
22540 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e  d by name.. * 2.
22550 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73   All triggers as
22560 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
22570 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72  single table for
22580 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c  m a linked list,
22590 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20   using the. *   
225a0 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66   pNext member of
225b0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
225c0 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
225d0 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
225e0 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e  of the. *    lin
225f0 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72  ked list is stor
22600 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67  ed as the "pTrig
22610 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ger" member of t
22620 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a  he associated. *
22630 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65      struct Table
22640 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65  .. *. * The "ste
22650 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70  p_list" member p
22660 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
22670 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
22680 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63  linked list. * c
22690 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
226a0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
226b0 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72  cified as the tr
226c0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20  igger program.. 
226d0 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
226e0 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  r {.  char *zNam
226f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
22700 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
22710 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20   trigger        
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22730 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65  */.  char *table
22740 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
22750 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  The table or vie
22760 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  w to which the t
22770 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a  rigger applies *
22780 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
22790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
227a0 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
227b0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
227c0 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f  NSERT         */
227d0 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20  .  u8 tr_tm;    
227e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
227f0 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46  e of TRIGGER_BEF
22800 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54  ORE, TRIGGER_AFT
22810 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  ER */.  Expr *pW
22820 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  hen;            
22830 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75  /* The WHEN clau
22840 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  se of the expres
22850 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c  sion (may be NUL
22860 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  L) */.  IdList *
22870 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20  pColumns;       
22880 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  /* If this is an
22890 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75   UPDATE OF <colu
228a0 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72  mn-list> trigger
228b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
228c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
228d0 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  he <column-list>
228e0 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20   is stored here 
228f0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
22900 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20  hema;        /* 
22910 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
22920 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f  g the trigger */
22930 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53  .  Schema *pTabS
22940 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
22950 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
22960 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  the table */.  T
22970 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70  riggerStep *step
22980 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c  _list; /* Link l
22990 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70  ist of trigger p
229a0 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20  rogram steps    
229b0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72           */.  Tr
229c0 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20  igger *pNext;   
229d0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72        /* Next tr
229e0 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  igger associated
229f0 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20   with the table 
22a00 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74  */.};../*.** A t
22a10 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72  rigger is either
22a20 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20   a BEFORE or an 
22a30 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20  AFTER trigger.  
22a40 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
22a50 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72  nstants.** deter
22a60 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a  mine which..**.*
22a70 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d  * If there are m
22a80 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73  ultiple triggers
22a90 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73  , you might of s
22aa0 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73  ome BEFORE and s
22ab0 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e  ome AFTER..** In
22ac0 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65   that cases, the
22ad0 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77   constants below
22ae0 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67   can be ORed tog
22af0 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ether..*/.#defin
22b00 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  e TRIGGER_BEFORE
22b10 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47    1.#define TRIG
22b20 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f  GER_AFTER   2../
22b30 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *. * An instance
22b40 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
22b50 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74  erStep is used t
22b60 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65  o store a single
22b70 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20   SQL statement. 
22b80 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74  * that is a part
22b90 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72   of a trigger-pr
22ba0 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73  ogram.. *. * Ins
22bb0 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
22bc0 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65   TriggerStep are
22bd0 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
22be0 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  gly linked list 
22bf0 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67  (linked. * using
22c00 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d   the "pNext" mem
22c10 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20  ber) referenced 
22c20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73  by the "step_lis
22c30 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  t" member of the
22c40 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73  . * associated s
22c50 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e  truct Trigger in
22c60 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73  stance. The firs
22c70 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
22c80 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a   linked list is.
22c90 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65   * the first ste
22ca0 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  p of the trigger
22cb0 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20  -program.. *. * 
22cc0 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20  The "op" member 
22cd0 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65  indicates whethe
22ce0 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c  r this is a "DEL
22cf0 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20  ETE", "INSERT", 
22d00 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22  "UPDATE" or. * "
22d10 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e  SELECT" statemen
22d20 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20  t. The meanings 
22d30 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d  of the other mem
22d40 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e  bers is determin
22d50 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c  ed by the. * val
22d60 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f  ue of "op" as fo
22d70 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70  llows:. *. * (op
22d80 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20   == TK_INSERT). 
22d90 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73  * orconf    -> s
22da0 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e  tores the ON CON
22db0 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a  FLICT algorithm.
22dc0 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20   * pSelect   -> 
22dd0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
22de0 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45  SERT INTO ... SE
22df0 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LECT ... stateme
22e00 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
22e10 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
22e20 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ores a pointer t
22e30 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  o the SELECT sta
22e40 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73  tement. Otherwis
22e50 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67  e NULL.. * zTarg
22e60 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
22e70 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
22e80 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
22e90 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
22ea0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
22eb0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
22ec0 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
22ed0 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
22ee0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
22ef0 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
22f00 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
22f10 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
22f20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
22f30 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
22f40 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
22f50 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
22f60 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20  LUES .... *     
22f70 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
22f80 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74  nt, then this st
22f90 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  ores the column-
22fa0 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20  names to be. *  
22fb0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
22fc0 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a  rted into.. *. *
22fd0 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54   (op == TK_DELET
22fe0 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  E). * zTarget   
22ff0 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
23000 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
23010 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a   delete from.. *
23020 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
23030 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
23040 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
23050 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
23060 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
23070 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
23080 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20  rwise NULL.. *. 
23090 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41  * (op == TK_UPDA
230a0 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
230b0 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
230c0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
230d0 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68  o update.. * pWh
230e0 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
230f0 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
23100 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
23110 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
23120 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
23130 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
23140 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72  e NULL.. * pExpr
23150 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f  List -> A list o
23160 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f  f the columns to
23170 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20   update and the 
23180 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75  expressions to u
23190 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20  pdate. *        
231a0 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53        them to. S
231b0 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  ee sqlite3Update
231c0 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  () documentation
231d0 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20   of "pChanges". 
231e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
231f0 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a  rgument.. *. */.
23200 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
23210 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  ep {.  u8 op;   
23220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
23230 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
23240 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
23250 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54  NSERT, TK_SELECT
23260 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b   */.  u8 orconf;
23270 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
23280 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a  _Rollback etc. *
23290 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
232a0 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ig;      /* The 
232b0 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69  trigger that thi
232c0 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74  s step is a part
232d0 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20   of */.  Select 
232e0 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
232f0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
23300 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45  t or RHS of INSE
23310 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e  RT INTO SELECT .
23320 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  .. */.  char *zT
23330 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20  arget;       /* 
23340 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72  Target table for
23350 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c   DELETE, UPDATE,
23360 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70   INSERT */.  Exp
23370 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
23380 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
23390 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45  lause for DELETE
233a0 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73   or UPDATE steps
233b0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
233c0 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45  pExprList; /* SE
233d0 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44  T clause for UPD
233e0 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  ATE */.  IdList 
233f0 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a  *pIdList;     /*
23400 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f   Column names fo
23410 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 55 70  r INSERT */.  Up
23420 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20 20  sert *pUpsert;  
23430 20 20 20 2f 2a 20 55 70 73 65 72 74 20 63 6c 61     /* Upsert cla
23440 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e 53 45 52  uses on an INSER
23450 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 70  T */.  char *zSp
23460 61 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  an;         /* O
23470 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65 78 74  riginal SQL text
23480 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64   of this command
23490 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
234a0 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  p *pNext;  /* Ne
234b0 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c  xt in the link-l
234c0 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ist */.  Trigger
234d0 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a  Step *pLast;  /*
234e0 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e   Last element in
234f0 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69   link-list. Vali
23500 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f  d for 1st elem o
23510 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  nly */.};../*.**
23520 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
23530 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
23540 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  s information us
23550 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
23560 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e  Fix....** routin
23570 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20  es as they walk 
23580 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 74  the parse tree t
23590 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20  o make database 
235a0 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78  references.** ex
235b0 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65 64  plicit..*/.typed
235c0 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65  ef struct DbFixe
235d0 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63  r DbFixer;.struc
235e0 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61  t DbFixer {.  Pa
235f0 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
23600 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67    /* The parsing
23610 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72   context.  Error
23620 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65   messages writte
23630 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  n here */.  Sche
23640 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
23650 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20  /* Fix items to 
23660 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20  this schema */. 
23670 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20   int bVarOnly;  
23680 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f       /* Check fo
23690 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72  r variable refer
236a0 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  ences only */.  
236b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
236c0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
236d0 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65   all objects are
236e0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
236f0 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
23700 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
23710 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20  pe;  /* Type of 
23720 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
23730 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
23740 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e  essages */.  con
23750 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b  st Token *pName;
23760 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
23770 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
23780 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
23790 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ges */.};../*.**
237a0 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65   An objected use
237b0 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20  d to accumulate 
237c0 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74  the text of a st
237d0 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a  ring where we.**
237e0 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   do not necessar
237f0 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67  ily know how big
23800 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c   the string will
23810 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a   be in the end..
23820 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65  */.struct sqlite
23830 33 5f 73 74 72 20 7b 0a 20 20 73 71 6c 69 74 65  3_str {.  sqlite
23840 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
23850 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62  * Optional datab
23860 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64  ase for lookasid
23870 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20  e.  Can be NULL 
23880 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74  */.  char *zText
23890 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
238a0 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65   string collecte
238b0 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33  d so far */.  u3
238c0 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  2  nAlloc;      
238d0 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
238e0 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
238f0 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33  in zText */.  u3
23900 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  2  mxAlloc;     
23910 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
23920 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  lowed allocation
23930 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c  .  0 for no mall
23940 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 33  oc usage */.  u3
23950 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20  2  nChar;       
23960 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
23970 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61  the string so fa
23980 72 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45  r */.  u8   accE
23990 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53  rror;       /* S
239a0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6f 72 20 53  QLITE_NOMEM or S
239b0 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 2a 2f 0a  QLITE_TOOBIG */.
239c0 20 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c 61    u8   printfFla
239d0 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  gs;    /* SQLITE
239e0 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62 65  _PRINTF flags be
239f0 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e  low */.};.#defin
23a00 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
23a10 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f  INTERNAL 0x01  /
23a20 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f  * Internal-use-o
23a30 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61  nly converters a
23a40 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
23a50 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
23a60 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f  SQLFUNC  0x02  /
23a70 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61  * SQL function a
23a80 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72  rguments to VXPr
23a90 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20  intf */.#define 
23aa0 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41  SQLITE_PRINTF_MA
23ab0 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20  LLOCED 0x04  /* 
23ac0 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69 73  True if xText is
23ad0 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
23ae0 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d   */..#define isM
23af0 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58  alloced(X)  (((X
23b00 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26  )->printfFlags &
23b10 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
23b20 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f  ALLOCED)!=0).../
23b30 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
23b40 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
23b50 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
23b60 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
23b70 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
23b80 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
23b90 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
23ba0 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
23bb0 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
23bc0 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
23bd0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
23be0 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
23bf0 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
23c00 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ized */.  char *
23c10 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a  *pzErrMsg;    /*
23c20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   Error message s
23c30 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
23c40 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
23c50 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
23c60 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
23c70 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
23c80 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69   ATTACHed */.  i
23c90 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
23ca0 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
23cb0 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
23cc0 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
23cd0 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
23ce0 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
23cf0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
23d00 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
23d10 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
23d20 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
23d30 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
23d40 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
23d50 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
23d60 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
23d70 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d90 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
23da0 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
23db0 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f  tus */.  int bCo
23dc0 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  reMutex;        
23dd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
23de0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
23df0 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
23e00 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20  int bFullMutex; 
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
23e30 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
23e40 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e  g */.  int bOpen
23e50 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  Uri;            
23e60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23e70 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69   to interpret fi
23e80 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20  lenames as URIs 
23e90 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73  */.  int bUseCis
23ea0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23eb0 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f         /* Use co
23ec0 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66  vering indices f
23ed0 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f  or full-scans */
23ee0 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c  .  int bSmallMal
23ef0 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  loc;            
23f00 20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61       /* Avoid la
23f10 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  rge memory alloc
23f20 61 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a  ations if true *
23f30 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e  /.  int mxStrlen
23f40 3b 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 4d 61 78 69 6d 75 6d        /* Maximum
23f60 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
23f70 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72  /.  int neverCor
23f80 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20  rupt;           
23f90 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
23fa0 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c  e is always well
23fb0 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74  -formed */.  int
23fc0 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20   szLookaside;   
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23fe0 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
23ff0 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20  ide buffer size 
24000 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73  */.  int nLookas
24010 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
24020 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
24030 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
24040 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e  er count */.  in
24050 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20  t nStmtSpill;   
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24070 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20  /* Stmt-journal 
24080 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68  spill-to-disk th
24090 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c  reshold */.  sql
240a0 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
240b0 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   m;            /
240c0 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f  * Low-level memo
240d0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
240e0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
240f0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
24100 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f  ds mutex;      /
24110 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65  * Low-level mute
24120 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  x interface */. 
24130 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f   sqlite3_pcache_
24140 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32  methods2 pcache2
24150 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20  ;  /* Low-level 
24160 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72  page-cache inter
24170 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  face */.  void *
24180 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  pHeap;          
24190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
241a0 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63  eap storage spac
241b0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70  e */.  int nHeap
241c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
241d0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
241e0 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20   of pHeap[] */. 
241f0 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65   int mnReq, mxRe
24200 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
24210 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61     /* Min and ma
24220 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20  x heap requests 
24230 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74  sizes */.  sqlit
24240 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b  e3_int64 szMmap;
24250 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24260 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72  mmap() space per
24270 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20   open file */.  
24280 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78  sqlite3_int64 mx
24290 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
242a0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c    /* Maximum val
242b0 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f  ue for szMmap */
242c0 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20  .  void *pPage; 
242d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242e0 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63       /* Page cac
242f0 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  he memory */.  i
24300 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20  nt szPage;      
24310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24320 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
24330 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d   page in pPage[]
24340 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b   */.  int nPage;
24350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24360 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
24370 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50  r of pages in pP
24380 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  age[] */.  int m
24390 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20  xParserStack;   
243a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
243b0 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66  maximum depth of
243c0 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63   the parser stac
243d0 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65  k */.  int share
243e0 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20  dCacheEnabled;  
243f0 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65           /* true
24400 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65   if shared-cache
24410 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f   mode enabled */
24420 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20  .  u32 szPma;   
24430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24440 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
24450 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20  Sorter PMA size 
24460 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76  */.  /* The abov
24470 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69  e might be initi
24480 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65  alized to non-ze
24490 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ro.  The followi
244a0 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79  ng need to alway
244b0 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79  s.  ** initially
244c0 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65   be zero, howeve
244d0 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e  r. */.  int isIn
244e0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
244f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24500 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69  e after initiali
24510 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73  zation has finis
24520 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50  hed */.  int inP
24530 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
24540 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
24550 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c  ue while initial
24560 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  ization in progr
24570 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  ess */.  int isM
24580 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20  utexInit;       
24590 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
245a0 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73  ue after mutexes
245b0 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
245c0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c   */.  int isMall
245d0 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  ocInit;         
245e0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
245f0 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
24600 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
24610 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69   int isPCacheIni
24620 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24630 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
24640 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
24650 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
24660 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20  nRefInitMutex;  
24670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24680 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73   Number of users
24690 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a   of pInitMutex *
246a0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
246b0 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20  x *pInitMutex;  
246c0 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75        /* Mutex u
246d0 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69  sed by sqlite3_i
246e0 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20  nitialize() */. 
246f0 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f   void (*xLog)(vo
24700 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
24710 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f  ar*); /* Functio
24720 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f  n for logging */
24730 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67  .  void *pLogArg
24740 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24750 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
24760 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f   argument to xLo
24770 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  g() */.#ifdef SQ
24780 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c  LITE_ENABLE_SQLL
24790 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c  OG.  void(*xSqll
247a0 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  og)(void*,sqlite
247b0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
247c0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53  int);.  void *pS
247d0 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66  qllogArg;.#endif
247e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56  .#ifdef SQLITE_V
247f0 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f  DBE_COVERAGE.  /
24800 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
24810 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74  callback (if not
24820 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65   NULL) is invoke
24830 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20  d on every VDBE 
24840 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72  branch.  ** oper
24850 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20  ation.  Set the 
24860 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53  callback using S
24870 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56  QLITE_TESTCTRL_V
24880 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20  DBE_COVERAGE..  
24890 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62  */.  void (*xVdb
248a0 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69  eBranch)(void*,i
248b0 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65  nt iSrcLine,u8 e
248c0 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f  This,u8 eMx);  /
248d0 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  * Callback */.  
248e0 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63  void *pVdbeBranc
248f0 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
24900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24910 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
24920 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e   argument */.#en
24930 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
24940 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20  TE_UNTESTABLE.  
24950 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62  int (*xTestCallb
24960 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20  ack)(int);      
24970 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20    /* Invoked by 
24980 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
24990 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  ) */.#endif.  in
249a0 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c  t bLocaltimeFaul
249b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
249c0 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20  /* True to fail 
249d0 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c  localtime() call
249e0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65  s */.  int iOnce
249f0 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20  ResetThreshold; 
24a00 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e           /* When
24a10 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63   to reset OP_Onc
24a20 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  e counters */.  
24a30 75 33 32 20 73 7a 53 6f 72 74 65 72 52 65 66 3b  u32 szSorterRef;
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a50 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e    /* Min size in
24a60 20 62 79 74 65 73 20 74 6f 20 75 73 65 20 73 6f   bytes to use so
24a70 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b 0a  rter-refs */.};.
24a80 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
24a90 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
24aa0 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
24ab0 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
24ac0 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
24ad0 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
24ae0 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
24af0 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
24b00 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
24b10 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
24b20 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
24b30 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
24b40 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
24b50 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
24b60 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
24b70 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
24b80 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
24b90 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
24ba0 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
24bb0 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
24bc0 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
24bd0 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
24be0 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
24bf0 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
24c00 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
24c10 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
24c20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
24c30 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
24c40 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
24c50 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
24c60 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
24c70 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
24c80 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
24c90 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
24ca0 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
24cb0 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
24cc0 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
24cd0 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
24ce0 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
24cf0 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
24d00 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
24d10 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
24d20 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
24d30 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50  uct Walker {.  P
24d40 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
24d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d60 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
24d70 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
24d80 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
24d90 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
24da0 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
24db0 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
24dc0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
24dd0 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
24de0 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
24df0 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
24e00 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
24e10 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65  /.  void (*xSele
24e20 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c  ctCallback2)(Wal
24e30 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a  ker*,Select*);/*
24e40 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b   Second callback
24e50 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
24e60 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
24e70 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
24e80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24e90 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
24ea0 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64  ies */.  u8 eCod
24eb0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ed0 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72     /* A small pr
24ee0 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f  ocessing code */
24ef0 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
24f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24f20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63  Extra data for c
24f30 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e  allback */.    N
24f40 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b  ameContext *pNC;
24f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
24f70 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
24f80 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
24f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
24fb0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20   counter */.    
24fc0 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20  int iCur;       
24fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
24ff0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
25000 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
25010 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25030 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
25040 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
25050 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25070 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e   Counting column
25080 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
25090 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69     struct CCurHi
250a0 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20  nt *pCCurHint;  
250b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
250c0 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73  Used by codeCurs
250d0 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20  orHint() */.    
250e0 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20  int *aiCol;     
250f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72            /* arr
25110 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64  ay of column ind
25120 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  exes */.    stru
25130 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64  ct IdxCover *pId
25140 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20  xCover;         
25150 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
25160 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67  or index coverag
25170 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
25180 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49  IdxExprTrans *pI
25190 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  dxTrans;        
251a0 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64     /* Convert id
251b0 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75  xed expr to colu
251c0 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  mn */.    ExprLi
251d0 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251f0 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20      /* GROUP BY 
25200 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 53 65  clause */.    Se
25210 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
25220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25230 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e          /* HAVIN
25240 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73  G to WHERE claus
25250 65 20 63 74 78 20 2a 2f 0a 20 20 20 20 73 74 72  e ctx */.    str
25260 75 63 74 20 57 69 6e 64 6f 77 52 65 77 72 69 74  uct WindowRewrit
25270 65 20 2a 70 52 65 77 72 69 74 65 3b 20 20 20 20  e *pRewrite;    
25280 20 20 20 20 20 20 20 2f 2a 20 57 69 6e 64 6f 77         /* Window
25290 20 72 65 77 72 69 74 65 20 63 6f 6e 74 65 78 74   rewrite context
252a0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
252b0 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72  * Forward declar
252c0 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71  ations */.int sq
252d0 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61  lite3WalkExpr(Wa
252e0 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
252f0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
25300 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20  prList(Walker*, 
25310 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
25320 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
25330 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  t(Walker*, Selec
25340 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
25350 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57  WalkSelectExpr(W
25360 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
25370 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
25380 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b  kSelectFrom(Walk
25390 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
253a0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 57 61  nt sqlite3ExprWa
253b0 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
253c0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
253d0 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 4e 6f 6f  te3SelectWalkNoo
253e0 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  p(Walker*, Selec
253f0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
25400 53 65 6c 65 63 74 57 61 6c 6b 46 61 69 6c 28 57  SelectWalkFail(W
25410 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
25420 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
25430 44 45 42 55 47 0a 76 6f 69 64 20 73 71 6c 69 74  DEBUG.void sqlit
25440 65 33 53 65 6c 65 63 74 57 61 6c 6b 41 73 73 65  e3SelectWalkAsse
25450 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rt2(Walker*, Sel
25460 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ect*);.#endif../
25470 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65  *.** Return code
25480 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d   from the parse-
25490 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69  tree walking pri
254a0 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69  mitives and thei
254b0 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  r.** callbacks..
254c0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43  */.#define WRC_C
254d0 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f  ontinue    0   /
254e0 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20  * Continue down 
254f0 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f  into children */
25500 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75  .#define WRC_Pru
25510 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  ne       1   /* 
25520 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75  Omit children bu
25530 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69  t continue walki
25540 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23  ng siblings */.#
25550 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74  define WRC_Abort
25560 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62         2   /* Ab
25570 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77  andon the tree w
25580 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  alk */../*.** An
25590 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
255a0 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70 72  s structure repr
255b0 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20  esents a set of 
255c0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73  one or more CTEs
255d0 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c  .** (common tabl
255e0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63  e expressions) c
255f0 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e 67  reated by a sing
25600 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a  le WITH clause..
25610 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b  */.struct With {
25620 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20  .  int nCte;    
25630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25640 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
25650 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54 48  CTEs in the WITH
25660 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74   clause */.  Wit
25670 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20  h *pOuter;      
25680 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25690 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20  Containing WITH 
256a0 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
256b0 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65 20  */.  struct Cte 
256c0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
256d0 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68       /* For each
256e0 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54 48   CTE in the WITH
256f0 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20   clause.... */. 
25700 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
25710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25720 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
25730 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78  is CTE */.    Ex
25740 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20  prList *pCols;  
25750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25760 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69   List of explici
25770 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  t column names, 
25780 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53  or NULL */.    S
25790 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
257a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
257b0 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  * The definition
257c0 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
257d0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
257e0 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20 20 20  zCteErr;        
257f0 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
25800 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61  sage for circula
25810 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  r references */.
25820 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69    } a[1];.};..#i
25830 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
25840 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  G./*.** An insta
25850 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65 56  nce of the TreeV
25860 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73  iew object is us
25870 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20  ed for printing 
25880 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
25890 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  * data structure
258a0 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75  s on sqlite3Debu
258b0 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20  gPrintf() using 
258c0 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77  a tree-like view
258d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65  ..*/.struct Tree
258e0 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65  View {.  int iLe
258f0 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
25900 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20   /* Which level 
25910 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20 61  of the tree we a
25920 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62  re on */.  u8  b
25930 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20  Line[100];      
25940 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69     /* Draw verti
25950 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20  cal in column i 
25960 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74  if bLine[i] is t
25970 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66  rue */.};.#endif
25980 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
25990 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4f 62 6a 65 63   */../*.** Objec
259a0 74 20 75 73 65 64 20 74 6f 20 65 6e 63 6f 64 65  t used to encode
259b0 20 74 68 65 20 4f 56 45 52 28 29 20 63 6c 61 75   the OVER() clau
259c0 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  se attached to a
259d0 20 77 69 6e 64 6f 77 2d 66 75 6e 63 74 69 6f 6e   window-function
259e0 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20  .** invocation. 
259f0 41 6e 64 20 73 6f 6d 65 20 66 69 65 6c 64 73 20  And some fields 
25a00 75 73 65 64 20 77 68 69 6c 65 20 67 65 6e 65 72  used while gener
25a10 61 74 69 6e 67 20 56 4d 20 63 6f 64 65 20 66 6f  ating VM code fo
25a20 72 20 74 68 65 20 73 61 6d 65 2e 0a 2a 2f 0a 73  r the same..*/.s
25a30 74 72 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20  truct Window {. 
25a40 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
25a50 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
25a60 20 6f 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20   of window (may 
25a70 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78  be NULL) */.  Ex
25a80 70 72 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69  prList *pPartiti
25a90 6f 6e 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49  on;   /* PARTITI
25aa0 4f 4e 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ON BY clause */.
25ab0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
25ac0 65 72 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44  erBy;     /* ORD
25ad0 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
25ae0 20 20 75 38 20 65 54 79 70 65 3b 20 20 20 20 20    u8 eType;     
25af0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
25b00 52 41 4e 47 45 20 6f 72 20 54 4b 5f 52 4f 57 53  RANGE or TK_ROWS
25b10 20 2a 2f 0a 20 20 75 38 20 65 53 74 61 72 74 3b   */.  u8 eStart;
25b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25b30 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52   UNBOUNDED, CURR
25b40 45 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f  ENT, PRECEDING o
25b50 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20  r FOLLOWING */. 
25b60 20 75 38 20 65 45 6e 64 3b 20 20 20 20 20 20 20   u8 eEnd;       
25b70 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f           /* UNBO
25b80 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20  UNDED, CURRENT, 
25b90 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c  PRECEDING or FOL
25ba0 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 45 78 70 72  LOWING */.  Expr
25bb0 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
25bc0 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
25bd0 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52  n for "<expr> PR
25be0 45 43 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78  ECEDING" */.  Ex
25bf0 70 72 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  pr *pEnd;       
25c00 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
25c10 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20  ion for "<expr> 
25c20 46 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 0a 20  FOLLOWING" */.. 
25c30 20 57 69 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69   Window *pNextWi
25c40 6e 3b 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  n;       /* Next
25c50 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
25c60 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68   belonging to th
25c70 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 0a 20 20  is SELECT */..  
25c80 45 78 70 72 20 2a 70 46 69 6c 74 65 72 3b 0a 20  Expr *pFilter;. 
25c90 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
25ca0 0a 0a 20 20 69 6e 74 20 69 45 70 68 43 73 72 3b  ..  int iEphCsr;
25cb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
25cc0 65 6d 70 20 74 61 62 6c 65 20 75 73 65 64 20 62  emp table used b
25cd0 79 20 74 68 69 73 20 77 69 6e 64 6f 77 20 2a 2f  y this window */
25ce0 0a 20 20 69 6e 74 20 72 65 67 41 63 63 75 6d 3b  .  int regAccum;
25cf0 0a 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74  .  int regResult
25d00 3b 0a 0a 20 20 69 6e 74 20 63 73 72 41 70 70 3b  ;..  int csrApp;
25d10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25d20 46 75 6e 63 74 69 6f 6e 20 63 75 72 73 6f 72 20  Function cursor 
25d30 28 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78  (used by min/max
25d40 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41 70  ) */.  int regAp
25d50 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
25d60 2a 20 46 75 6e 63 74 69 6f 6e 20 72 65 67 69 73  * Function regis
25d70 74 65 72 20 28 61 6c 73 6f 20 75 73 65 64 20 62  ter (also used b
25d80 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 0a 20  y min/max) */.. 
25d90 20 69 6e 74 20 72 65 67 50 61 72 74 3b 0a 20 20   int regPart;.  
25da0 45 78 70 72 20 2a 70 4f 77 6e 65 72 3b 20 20 20  Expr *pOwner;   
25db0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
25dc0 73 73 69 6f 6e 20 6f 62 6a 65 63 74 20 74 68 69  ssion object thi
25dd0 73 20 77 69 6e 64 6f 77 20 69 73 20 61 74 74 61  s window is atta
25de0 63 68 65 64 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  ched to */.  int
25df0 20 6e 42 75 66 66 65 72 43 6f 6c 3b 20 20 20 20   nBufferCol;    
25e00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
25e10 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 62 75 66  f columns in buf
25e20 66 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  fer table */.  i
25e30 6e 74 20 69 41 72 67 43 6f 6c 3b 20 20 20 20 20  nt iArgCol;     
25e40 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
25e50 20 6f 66 20 66 69 72 73 74 20 61 72 67 75 6d 65   of first argume
25e60 6e 74 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  nt for this func
25e70 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64  tion */.};..void
25e80 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 65   sqlite3WindowDe
25e90 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 57  lete(sqlite3*, W
25ea0 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71  indow*);.void sq
25eb0 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69 73 74 44  lite3WindowListD
25ec0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 64  elete(sqlite3 *d
25ed0 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57  b, Window *p);.W
25ee0 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69  indow *sqlite3Wi
25ef0 6e 64 6f 77 41 6c 6c 6f 63 28 50 61 72 73 65 2a  ndowAlloc(Parse*
25f00 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 45 78 70 72  , int, int, Expr
25f10 2a 2c 20 69 6e 74 20 2c 20 45 78 70 72 2a 29 3b  *, int , Expr*);
25f20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
25f30 64 6f 77 41 74 74 61 63 68 28 50 61 72 73 65 2a  dowAttach(Parse*
25f40 2c 20 45 78 70 72 2a 2c 20 57 69 6e 64 6f 77 2a  , Expr*, Window*
25f50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69  );.int sqlite3Wi
25f60 6e 64 6f 77 43 6f 6d 70 61 72 65 28 50 61 72 73  ndowCompare(Pars
25f70 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e  e*, Window*, Win
25f80 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dow*);.void sqli
25f90 74 65 33 57 69 6e 64 6f 77 43 6f 64 65 49 6e 69  te3WindowCodeIni
25fa0 74 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77  t(Parse*, Window
25fb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25fc0 57 69 6e 64 6f 77 43 6f 64 65 53 74 65 70 28 50  WindowCodeStep(P
25fd0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
25fe0 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2c  WhereInfo*, int,
25ff0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
26000 65 33 57 69 6e 64 6f 77 52 65 77 72 69 74 65 28  e3WindowRewrite(
26010 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 29  Parse*, Select*)
26020 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
26030 61 6e 64 53 75 62 71 75 65 72 79 28 50 61 72 73  andSubquery(Pars
26040 65 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69  e*, struct SrcLi
26050 73 74 5f 69 74 65 6d 2a 29 3b 0a 76 6f 69 64 20  st_item*);.void 
26060 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 55 70 64  sqlite3WindowUpd
26070 61 74 65 28 50 61 72 73 65 2a 2c 20 57 69 6e 64  ate(Parse*, Wind
26080 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 46 75  ow*, Window*, Fu
26090 6e 63 44 65 66 2a 29 3b 0a 57 69 6e 64 6f 77 20  ncDef*);.Window 
260a0 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 75  *sqlite3WindowDu
260b0 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 45  p(sqlite3 *db, E
260c0 78 70 72 20 2a 70 4f 77 6e 65 72 2c 20 57 69 6e  xpr *pOwner, Win
260d0 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71  dow *p);.void sq
260e0 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74  lite3WindowFunct
260f0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  ions(void);../*.
26100 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20  ** Assuming zIn 
26110 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
26120 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54  rst byte of a UT
26130 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a  F-8 character,.*
26140 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f  * advance zIn to
26150 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69   point to the fi
26160 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
26170 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61  next UTF-8 chara
26180 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  cter..*/.#define
26190 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46   SQLITE_SKIP_UTF
261a0 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20  8(zIn) {        
261b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261c0 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b  \.  if( (*(zIn++
261d0 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20  ))>=0xc0 ){     
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261f0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77           \.    w
26200 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78  hile( (*zIn & 0x
26210 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e  c0)==0x80 ){ zIn
26220 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20  ++; }           
26230 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20    \.  }         
26240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26260 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a             \.}..
26270 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
26280 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61  _*_BKPT macros a
26290 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66  re substitutes f
262a0 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  or the error cod
262b0 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73  es with.** the s
262c0 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74  ame name but wit
262d0 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73  hout the _BKPT s
262e0 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61  uffix.  These ma
262f0 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72  cros invoke.** r
26300 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70  outines that rep
26310 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d  ort the line-num
26320 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ber on which the
26330 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65   error originate
26340 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74  d.** using sqlit
26350 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72  e3_log().  The r
26360 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f  outines also pro
26370 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e  vide a convenien
26380 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65  t place.** to se
26390 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65  t a debugger bre
263a0 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  akpoint..*/.int 
263b0 73 71 6c 69 74 65 33 52 65 70 6f 72 74 45 72 72  sqlite3ReportErr
263c0 6f 72 28 69 6e 74 20 69 45 72 72 2c 20 69 6e 74  or(int iErr, int
263d0 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63   lineno, const c
263e0 68 61 72 20 2a 7a 54 79 70 65 29 3b 0a 69 6e 74  har *zType);.int
263f0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
26400 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
26410 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
26420 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
26430 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
26440 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53  (int);.#define S
26450 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
26460 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  PT sqlite3Corrup
26470 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
26480 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
26490 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69  MISUSE_BKPT sqli
264a0 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f  te3MisuseError(_
264b0 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
264c0 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
264d0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e  _BKPT sqlite3Can
264e0 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e  topenError(__LIN
264f0 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49  E__).#ifdef SQLI
26500 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73  TE_DEBUG.  int s
26510 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72  qlite3NomemError
26520 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
26530 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72  ite3IoerrnomemEr
26540 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  ror(int);.  int 
26550 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67  sqlite3CorruptPg
26560 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f  noError(int,Pgno
26570 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  );.# define SQLI
26580 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71  TE_NOMEM_BKPT sq
26590 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28  lite3NomemError(
265a0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69  __LINE__).# defi
265b0 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  ne SQLITE_IOERR_
265c0 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74  NOMEM_BKPT sqlit
265d0 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f  e3IoerrnomemErro
265e0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65  r(__LINE__).# de
265f0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
26600 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69  UPT_PGNO(P) sqli
26610 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72  te3CorruptPgnoEr
26620 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29  ror(__LINE__,(P)
26630 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
26640 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
26650 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a  PT SQLITE_NOMEM.
26660 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
26670 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
26680 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
26690 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MEM.# define SQL
266a0 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f  ITE_CORRUPT_PGNO
266b0 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75  (P) sqlite3Corru
266c0 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  ptError(__LINE__
266d0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
266e0 46 54 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f  FTS3 and FTS4 bo
266f0 74 68 20 72 65 71 75 69 72 65 20 76 69 72 74 75  th require virtu
26700 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  al table support
26710 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
26720 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
26730 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65  UALTABLE).# unde
26740 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
26750 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c  FTS3.# undef SQL
26760 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a  ITE_ENABLE_FTS4.
26770 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54  #endif../*.** FT
26780 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20  S4 is really an 
26790 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54  extension for FT
267a0 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c  S3.  It is enabl
267b0 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ed using the.** 
267c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
267d0 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74  S3 macro.  But t
267e0 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f  o avoid confusio
267f0 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a  n we also call.*
26800 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  * the SQLITE_ENA
26810 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74  BLE_FTS4 macro t
26820 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c  o serve as an al
26830 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45  ias for SQLITE_E
26840 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23  NABLE_FTS3..*/.#
26850 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
26860 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26  E_ENABLE_FTS4) &
26870 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
26880 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23  E_ENABLE_FTS3).#
26890 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
268a0 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e  NABLE_FTS3 1.#en
268b0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
268c0 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73  type.h header is
268d0 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d   needed for non-
268e0 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20  ASCII systems.  
268f0 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65  It is also.** ne
26900 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65  eded by FTS3 whe
26910 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64  n FTS3 is includ
26920 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  ed in the amalga
26930 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21  mation..*/.#if !
26940 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
26950 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28  SCII) || \.    (
26960 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
26970 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
26980 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d  efined(SQLITE_AM
26990 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69  ALGAMATION)).# i
269a0 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
269b0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
269c0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
269d0 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74  ros mimic the st
269e0 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66  andard library f
269f0 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72  unctions toupper
26a00 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29  (),.** isspace()
26a10 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64  , isalnum(), isd
26a20 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69  igit() and isxdi
26a30 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76  git(), respectiv
26a40 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69  ely. The.** sqli
26a50 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79  te versions only
26a60 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20   work for ASCII 
26a70 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61  characters, rega
26a80 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65  rdless of locale
26a90 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
26aa0 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
26ab0 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
26ac0 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69  (x)  ((x)&~(sqli
26ad0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
26ae0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
26af0 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0x20)).# define 
26b00 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
26b10 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
26b20 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
26b30 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23  har)(x)]&0x01).#
26b40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
26b50 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c  salnum(x)   (sql
26b60 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
26b70 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
26b80 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20  &0x06).# define 
26b90 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
26ba0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
26bb0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
26bc0 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23  har)(x)]&0x02).#
26bd0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
26be0 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c  sdigit(x)   (sql
26bf0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
26c00 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
26c10 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20  &0x04).# define 
26c20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
26c30 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  x)  (sqlite3Ctyp
26c40 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
26c50 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23  har)(x)]&0x08).#
26c60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
26c70 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c  olower(x)   (sql
26c80 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
26c90 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
26ca0 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73  (x)]).# define s
26cb0 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29  qlite3Isquote(x)
26cc0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
26cd0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
26ce0 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65  ar)(x)]&0x80).#e
26cf0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
26d00 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
26d10 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
26d20 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
26d30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
26d40 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
26d50 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
26d60 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
26d70 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
26d80 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
26d90 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
26da0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
26db0 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
26dc0 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
26dd0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
26de0 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
26df0 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
26e00 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
26e10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26e20 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
26e30 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
26e40 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
26e50 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
26e60 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
26e70 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
26e80 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
26e90 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20  ite3Isquote(x)  
26ea0 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d   ((x)=='"'||(x)=
26eb0 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c  ='\''||(x)=='['|
26ec0 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69  |(x)=='`').#endi
26ed0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
26ee0 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54  _OMIT_COMPILEOPT
26ef0 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71  ION_DIAGS.int sq
26f00 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
26f10 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
26f20 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
26f30 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
26f40 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49  .int sqlite3StrI
26f50 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Cmp(const char*,
26f60 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
26f70 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  t sqlite3Strlen3
26f80 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  0(const char*);.
26f90 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c  char *sqlite3Col
26fa0 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c  umnType(Column*,
26fb0 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
26fc0 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20  sqlite3StrNICmp 
26fd0 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70  sqlite3_strnicmp
26fe0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ..int sqlite3Mal
26ff0 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76  locInit(void);.v
27000 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  oid sqlite3Mallo
27010 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64  cEnd(void);.void
27020 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28   *sqlite3Malloc(
27030 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
27040 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36  te3MallocZero(u6
27050 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
27060 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71  3DbMallocZero(sq
27070 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f  lite3*, u64);.vo
27080 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
27090 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c  locRaw(sqlite3*,
270a0 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
270b0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
270c0 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  N(sqlite3*, u64)
270d0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
270e0 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a  bStrDup(sqlite3*
270f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  ,const char*);.c
27100 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
27110 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  rNDup(sqlite3*,c
27120 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29  onst char*, u64)
27130 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
27140 62 53 70 61 6e 44 75 70 28 73 71 6c 69 74 65 33  bSpanDup(sqlite3
27150 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
27160 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
27170 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63   *sqlite3Realloc
27180 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f  (void*, u64);.vo
27190 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
271a0 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74  llocOrFree(sqlit
271b0 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
271c0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
271d0 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74  3DbRealloc(sqlit
271e0 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
271f0 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  4);.void sqlite3
27200 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  DbFree(sqlite3*,
27210 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
27220 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 73 71  lite3DbFreeNN(sq
27230 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
27240 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
27250 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e  cSize(void*);.in
27260 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  t sqlite3DbMallo
27270 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20  cSize(sqlite3*, 
27280 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
27290 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28  lite3PageMalloc(
272a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
272b0 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a  e3PageFree(void*
272c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
272d0 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69  emSetDefault(voi
272e0 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  d);.#ifndef SQLI
272f0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f  TE_UNTESTABLE.vo
27300 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e  id sqlite3Benign
27310 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64  MallocHooks(void
27320 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64   (*)(void), void
27330 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e   (*)(void));.#en
27340 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48  dif.int sqlite3H
27350 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f  eapNearlyFull(vo
27360 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73  id);../*.** On s
27370 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c  ystems with ampl
27380 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e  e stack space an
27390 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61  d that support a
273a0 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a  lloca(), make.**
273b0 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29   use of alloca()
273c0 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65   to obtain space
273d0 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d   for large autom
273e0 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42  atic objects.  B
273f0 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62  y default,.** ob
27400 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20  tain space from 
27410 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20  malloc()..**.** 
27420 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75  The alloca() rou
27430 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72  tine never retur
27440 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77  ns NULL.  This w
27450 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70  ill cause code p
27460 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61  aths.** that dea
27470 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74  l with sqlite3St
27480 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75  ackAlloc() failu
27490 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63  res to be unreac
274a0 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  hable..*/.#ifdef
274b0 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f   SQLITE_USE_ALLO
274c0 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  CA.# define sqli
274d0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
274e0 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e  (D,N)   alloca(N
274f0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27500 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
27510 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c  (D,N)  memset(al
27520 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23  loca(N), 0, N).#
27530 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
27540 74 61 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65  tackFree(D,P).#e
27550 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
27560 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
27570 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33  w(D,N)   sqlite3
27580 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  DbMallocRaw(D,N)
27590 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
275a0 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
275b0 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d  D,N)  sqlite3DbM
275c0 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23  allocZero(D,N).#
275d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
275e0 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
275f0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
27600 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  e(D,P).#endif../
27610 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62  * Do not allow b
27620 6f 74 68 20 4d 45 4d 53 59 53 35 20 61 6e 64 20  oth MEMSYS5 and 
27630 4d 45 4d 53 59 53 33 20 74 6f 20 62 65 20 64 65  MEMSYS3 to be de
27640 66 69 6e 65 64 20 74 6f 67 65 74 68 65 72 2e 20  fined together. 
27650 20 49 66 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c   If they.** are,
27660 20 64 69 73 61 62 6c 65 20 4d 45 4d 53 59 53 33   disable MEMSYS3
27670 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
27680 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35  E_ENABLE_MEMSYS5
27690 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
276a0 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
276b0 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35  te3MemGetMemsys5
276c0 28 76 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20 53  (void);.#undef S
276d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
276e0 53 59 53 33 0a 23 65 6e 64 69 66 0a 23 69 66 64  SYS3.#endif.#ifd
276f0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
27700 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73  _MEMSYS3.const s
27710 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
27720 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
27730 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a  tMemsys3(void);.
27740 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
27750 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d   SQLITE_MUTEX_OM
27760 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  IT.  sqlite3_mut
27770 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
27780 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74   *sqlite3Default
27790 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
277a0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
277b0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
277c0 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69  te3NoopMutex(voi
277d0 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
277e0 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65  tex *sqlite3Mute
277f0 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69  xAlloc(int);.  i
27800 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49  nt sqlite3MutexI
27810 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74  nit(void);.  int
27820 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64   sqlite3MutexEnd
27830 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23  (void);.#endif.#
27840 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
27850 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26  TE_MUTEX_OMIT) &
27860 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
27870 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20  E_MUTEX_NOOP).  
27880 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f  void sqlite3Memo
27890 72 79 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b  ryBarrier(void);
278a0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
278b0 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72  sqlite3MemoryBar
278c0 72 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73  rier().#endif..s
278d0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
278e0 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28  ite3StatusValue(
278f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27900 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20  e3StatusUp(int, 
27910 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27920 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74  e3StatusDown(int
27930 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
27940 69 74 65 33 53 74 61 74 75 73 48 69 67 68 77 61  ite3StatusHighwa
27950 74 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 69  ter(int, int);.i
27960 6e 74 20 73 71 6c 69 74 65 33 4c 6f 6f 6b 61 73  nt sqlite3Lookas
27970 69 64 65 55 73 65 64 28 73 71 6c 69 74 65 33 2a  ideUsed(sqlite3*
27980 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63 65  ,int*);../* Acce
27990 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73  ss to mutexes us
279a0 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74  ed by sqlite3_st
279b0 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65  atus() */.sqlite
279c0 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
279d0 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69  Pcache1Mutex(voi
279e0 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65  d);.sqlite3_mute
279f0 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  x *sqlite3Malloc
27a00 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69  Mutex(void);..#i
27a10 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
27a20 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 54 48 52  _ENABLE_MULTITHR
27a30 45 41 44 45 44 5f 43 48 45 43 4b 53 29 20 26 26  EADED_CHECKS) &&
27a40 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27a50 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 0a 76 6f 69  _MUTEX_OMIT).voi
27a60 64 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57 61  d sqlite3MutexWa
27a70 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 73  rnOnContention(s
27a80 71 6c 69 74 65 33 5f 6d 75 74 65 78 2a 29 3b 0a  qlite3_mutex*);.
27a90 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
27aa0 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f  qlite3MutexWarnO
27ab0 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 78 29 0a 23  nContention(x).#
27ac0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
27ad0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
27ae0 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20  ING_POINT.  int 
27af0 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75  sqlite3IsNaN(dou
27b00 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ble);.#else.# de
27b10 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61  fine sqlite3IsNa
27b20 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a  N(X)  0.#endif..
27b30 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
27b40 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
27b50 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  ng structure hol
27b60 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ds information a
27b70 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63  bout SQL.** func
27b80 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20  tions arguments 
27b90 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72  that are the par
27ba0 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70  ameters to the p
27bb0 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
27bc0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e  ..*/.struct Prin
27bd0 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20  tfArguments {.  
27be0 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20  int nArg;       
27bf0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61           /* Tota
27c00 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  l number of argu
27c10 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  ments */.  int n
27c20 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  Used;           
27c30 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
27c40 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20   arguments used 
27c50 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69  so far */.  sqli
27c60 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72  te3_value **apAr
27c70 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75  g;   /* The argu
27c80 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d  ment values */.}
27c90 3b 0a 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  ;..char *sqlite3
27ca0 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
27cb0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  ,const char*, ..
27cc0 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
27cd0 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  3VMPrintf(sqlite
27ce0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
27cf0 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65  va_list);.#if de
27d00 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
27d10 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
27d20 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
27d30 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACE).  void sqli
27d40 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63  te3DebugPrintf(c
27d50 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
27d60 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
27d70 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
27d80 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ).  void *sqlite
27d90 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63  3TestTextToPtr(c
27da0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
27db0 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
27dc0 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20  (SQLITE_DEBUG). 
27dd0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
27de0 65 56 69 65 77 45 78 70 72 28 54 72 65 65 56 69  eViewExpr(TreeVi
27df0 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a  ew*, const Expr*
27e00 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
27e10 6c 69 74 65 33 54 72 65 65 56 69 65 77 42 61 72  lite3TreeViewBar
27e20 65 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  eExprList(TreeVi
27e30 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
27e40 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
27e50 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
27e60 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69  e3TreeViewExprLi
27e70 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
27e80 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75  nst ExprList*, u
27e90 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  8, const char*);
27ea0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
27eb0 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72  reeViewSelect(Tr
27ec0 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53  eeView*, const S
27ed0 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76  elect*, u8);.  v
27ee0 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
27ef0 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77  iewWith(TreeView
27f00 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20  *, const With*, 
27f10 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f  u8);.#endif...vo
27f20 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
27f30 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
27f40 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
27f50 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27f60 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
27f70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
27f80 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
27f90 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b  3Dequote(char*);
27fa0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b  .void sqlite3Tok
27fb0 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68  enInit(Token*,ch
27fc0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
27fd0 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
27fe0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
27ff0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
28000 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
28010 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
28020 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
28030 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
28040 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
28050 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
28060 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
28070 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
28080 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
28090 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
280a0 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
280b0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
280c0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
280d0 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
280e0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
280f0 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
28100 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
28110 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
28120 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e  BUG.int sqlite3N
28130 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61  oTempsInRange(Pa
28140 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23  rse*,int,int);.#
28150 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69  endif.Expr *sqli
28160 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c  te3ExprAlloc(sql
28170 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
28180 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70  Token*,int);.Exp
28190 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73  r *sqlite3Expr(s
281a0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
281b0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
281c0 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68  qlite3ExprAttach
281d0 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33  Subtrees(sqlite3
281e0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78  *,Expr*,Expr*,Ex
281f0 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
28200 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c  te3PExpr(Parse*,
28210 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70   int, Expr*, Exp
28220 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
28230 33 50 45 78 70 72 41 64 64 53 65 6c 65 63 74 28  3PExprAddSelect(
28240 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53  Parse*, Expr*, S
28250 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73  elect*);.Expr *s
28260 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71  qlite3ExprAnd(sq
28270 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78  lite3*,Expr*, Ex
28280 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
28290 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
282a0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
282b0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
282c0 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67  sqlite3ExprAssig
282d0 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65  nVarNumber(Parse
282e0 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a  *, Expr*, u32);.
282f0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28300 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
28310 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73   Expr*);.ExprLis
28320 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
28330 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
28340 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
28350 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
28360 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e  te3ExprListAppen
28370 64 56 65 63 74 6f 72 28 50 61 72 73 65 2a 2c 45  dVector(Parse*,E
28380 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a  xprList*,IdList*
28390 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
283a0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
283b0 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69  SortOrder(ExprLi
283c0 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  st*,int);.void s
283d0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
283e0 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70  tName(Parse*,Exp
283f0 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  rList*,Token*,in
28400 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28410 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28  ExprListSetSpan(
28420 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
28430 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
28440 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
28450 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
28460 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
28470 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20  ExprList*);.u32 
28480 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46  sqlite3ExprListF
28490 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c  lags(const ExprL
284a0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
284b0 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  e3Init(sqlite3*,
284c0 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71   char**);.int sq
284d0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
284e0 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68  k(void*, int, ch
284f0 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76  ar**, char**);.v
28500 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
28510 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  a(Parse*,Token*,
28520 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
28530 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
28540 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
28550 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c  ABLE.Module *sql
28560 69 74 65 33 50 72 61 67 6d 61 56 74 61 62 52 65  ite3PragmaVtabRe
28570 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c  gister(sqlite3*,
28580 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
28590 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  e);.#endif.void 
285a0 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
285b0 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
285c0 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  on(sqlite3*);.vo
285d0 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f  id sqlite3ResetO
285e0 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33  neSchema(sqlite3
285f0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
28600 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61  ite3CollapseData
28610 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65  baseArray(sqlite
28620 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
28630 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43  3CommitInternalC
28640 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29  hanges(sqlite3*)
28650 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
28660 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  leteColumnNames(
28670 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29  sqlite3*,Table*)
28680 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c  ;.int sqlite3Col
28690 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74  umnsFromExprList
286a0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
286b0 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29  *,i16*,Column**)
286c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
286d0 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70  lectAddColumnTyp
286e0 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61  eAndCollation(Pa
286f0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65  rse*,Table*,Sele
28700 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
28710 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53  ite3ResultSetOfS
28720 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c  elect(Parse*,Sel
28730 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ect*);.void sqli
28740 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62  te3OpenMasterTab
28750 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29  le(Parse *, int)
28760 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
28770 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
28780 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c  Table*);.i16 sql
28790 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65  ite3ColumnOfInde
287a0 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a  x(Index*, i16);.
287b0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72  void sqlite3Star
287c0 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  tTable(Parse*,To
287d0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
287e0 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69  int,int,int);.#i
287f0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
28800 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20  HIDDEN_COLUMNS. 
28810 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c   void sqlite3Col
28820 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f  umnPropertiesFro
28830 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f  mName(Table*, Co
28840 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  lumn*);.#else.# 
28850 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
28860 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72  lumnPropertiesFr
28870 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e  omName(T,C) /* n
28880 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76  o-op */.#endif.v
28890 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
288a0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65  lumn(Parse*,Toke
288b0 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  n*,Token*);.void
288c0 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75   sqlite3AddNotNu
288d0 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ll(Parse*, int);
288e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
288f0 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65  PrimaryKey(Parse
28900 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
28910 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
28920 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65  id sqlite3AddChe
28930 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ckConstraint(Par
28940 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
28950 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61  d sqlite3AddDefa
28960 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  ultValue(Parse*,
28970 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
28980 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
28990 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
289a0 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65  ollateType(Parse
289b0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
289c0 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65   sqlite3EndTable
289d0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
289e0 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a  oken*,u8,Select*
289f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61  );.int sqlite3Pa
28a00 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61  rseUri(const cha
28a10 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  r*,const char*,u
28a20 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20  nsigned int*,.  
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a40 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c    sqlite3_vfs**,
28a50 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b  char**,char **);
28a60 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44  .Btree *sqlite3D
28a70 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c  bNameToBtree(sql
28a80 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
28a90 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
28aa0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 23 20  TE_UNTESTABLE.# 
28ab0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61  define sqlite3Fa
28ac0 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45  ultSim(X) SQLITE
28ad0 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20  _OK.#else.  int 
28ae0 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
28af0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69  int);.#endif..Bi
28b00 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74  tvec *sqlite3Bit
28b10 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a  vecCreate(u32);.
28b20 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
28b30 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75  cTest(Bitvec*, u
28b40 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
28b50 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c  BitvecTestNotNul
28b60 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  l(Bitvec*, u32);
28b70 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
28b80 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75  ecSet(Bitvec*, u
28b90 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
28ba0 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74  3BitvecClear(Bit
28bb0 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a  vec*, u32, void*
28bc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
28bd0 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74  itvecDestroy(Bit
28be0 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  vec*);.u32 sqlit
28bf0 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74  e3BitvecSize(Bit
28c00 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  vec*);.#ifndef S
28c10 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
28c20 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
28c30 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e  ecBuiltinTest(in
28c40 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a  t,int*);.#endif.
28c50 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33  .RowSet *sqlite3
28c60 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74  RowSetInit(sqlit
28c70 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69  e3*, void*, unsi
28c80 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20  gned int);.void 
28c90 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65  sqlite3RowSetCle
28ca0 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69  ar(RowSet*);.voi
28cb0 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49  d sqlite3RowSetI
28cc0 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69  nsert(RowSet*, i
28cd0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
28ce0 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65  RowSetTest(RowSe
28cf0 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20  t*, int iBatch, 
28d00 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
28d10 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53  3RowSetNext(RowS
28d20 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69  et*, i64*);..voi
28d30 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56  d sqlite3CreateV
28d40 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  iew(Parse*,Token
28d50 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
28d60 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
28d70 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66  *,int,int);..#if
28d80 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
28d90 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21  _OMIT_VIEW) || !
28da0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
28db0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
28dc0 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  ).  int sqlite3V
28dd0 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
28de0 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  s(Parse*,Table*)
28df0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
28e00 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
28e10 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20  olumnNames(A,B) 
28e20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51  0.#endif..#if SQ
28e30 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
28e40 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  D>30.  int sqlit
28e50 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
28e60 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66  yDbMask);.#endif
28e70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
28e80 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
28e90 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
28ea0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28eb0 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61  CodeDropTable(Pa
28ec0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
28ed0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
28ee0 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65  lite3DeleteTable
28ef0 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
28f00 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
28f10 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
28f20 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c  EMENT.  void sql
28f30 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
28f40 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50  tBegin(Parse *pP
28f50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71  arse);.  void sq
28f60 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
28f70 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61  ntEnd(Parse *pPa
28f80 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  rse);.#else.# de
28f90 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
28fa0 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58  incrementBegin(X
28fb0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28fc0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
28fd0 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69  nd(X).#endif.voi
28fe0 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28  d sqlite3Insert(
28ff0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
29000 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
29010 74 2a 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a  t*, int, Upsert*
29020 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
29030 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
29040 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
29050 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
29060 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
29070 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
29080 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65  *, IdList*, Toke
29090 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
290a0 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69  IdListIndex(IdLi
290b0 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  st*,const char*)
290c0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
290d0 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65  e3SrcListEnlarge
290e0 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
290f0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
29100 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
29110 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71  SrcListAppend(sq
29120 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
29130 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
29140 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
29150 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
29160 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c  FromTerm(Parse*,
29170 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
29180 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  *, Token*,.     
29190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291b0 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a   Token*, Select*
291c0 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a  , Expr*, IdList*
291d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
291e0 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28  rcListIndexedBy(
291f0 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
29200 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
29210 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
29220 74 46 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a  tFuncArgs(Parse*
29230 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
29240 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
29250 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b  te3IndexedByLook
29260 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75  up(Parse *, stru
29270 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
29280 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29290 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
292a0 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a  Type(SrcList*);.
292b0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
292c0 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73  istAssignCursors
292d0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
292e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
292f0 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  IdListDelete(sql
29300 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  ite3*, IdList*);
29310 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
29320 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
29330 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  e3*, SrcList*);.
29340 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c  Index *sqlite3Al
29350 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63  locateIndexObjec
29360 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69  t(sqlite3*,i16,i
29370 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64  nt,char**);.void
29380 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e   sqlite3CreateIn
29390 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  dex(Parse*,Token
293a0 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74  *,Token*,SrcList
293b0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
293c0 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
293d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293e0 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e    Expr*, int, in
293f0 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
29400 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61  ite3DropIndex(Pa
29410 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
29420 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
29430 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  3Select(Parse*, 
29440 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44  Select*, SelectD
29450 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  est*);.Select *s
29460 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28  qlite3SelectNew(
29470 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
29480 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
29490 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ExprList*,.     
294a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294b0 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69      Expr*,ExprLi
294c0 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a  st*,u32,Expr*);.
294d0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
294e0 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  ctDelete(sqlite3
294f0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62  *, Select*);.Tab
29500 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  le *sqlite3SrcLi
29510 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c  stLookup(Parse*,
29520 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
29530 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c  sqlite3IsReadOnl
29540 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  y(Parse*, Table*
29550 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
29560 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61  ite3OpenTable(Pa
29570 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  rse*, int iCur, 
29580 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c  int iDb, Table*,
29590 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e   int);.#if defin
295a0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
295b0 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
295c0 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  IMIT) && !define
295d0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  d(SQLITE_OMIT_SU
295e0 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71  BQUERY).Expr *sq
295f0 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28  lite3LimitWhere(
29600 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
29610 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
29620 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65  Expr*,char*);.#e
29630 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
29640 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73  3DeleteFrom(Pars
29650 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
29660 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  pr*, ExprList*, 
29670 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
29680 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65  ite3Update(Parse
29690 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
296a0 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74  rList*,Expr*,int
296b0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
296c0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
296d0 20 20 20 20 20 55 70 73 65 72 74 2a 29 3b 0a 57       Upsert*);.W
296e0 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65  hereInfo *sqlite
296f0 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73  3WhereBegin(Pars
29700 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
29710 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
29720 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a  List*,u16,int);.
29730 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72  void sqlite3Wher
29740 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  eEnd(WhereInfo*)
29750 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
29760 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f  WhereOutputRowCo
29770 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  unt(WhereInfo*);
29780 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
29790 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72  eIsDistinct(Wher
297a0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
297b0 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72  ite3WhereIsOrder
297c0 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
297d0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
297e0 4f 72 64 65 72 65 64 49 6e 6e 65 72 4c 6f 6f 70  OrderedInnerLoop
297f0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
29800 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
29810 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f  Sorted(WhereInfo
29820 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
29830 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65  hereContinueLabe
29840 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
29850 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  nt sqlite3WhereB
29860 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49  reakLabel(WhereI
29870 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
29880 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73  e3WhereOkOnePass
29890 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74  (WhereInfo*, int
298a0 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50  *);.#define ONEP
298b0 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20  ASS_OFF      0  
298c0 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20        /* Use of 
298d0 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f  ONEPASS not allo
298e0 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wed */.#define O
298f0 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20  NEPASS_SINGLE   
29900 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50  1        /* ONEP
29910 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20  ASS valid for a 
29920 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74  single row updat
29930 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45  e */.#define ONE
29940 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20  PASS_MULTI    2 
29950 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53         /* ONEPAS
29960 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d  S is valid for m
29970 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
29980 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29990 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c  CodeLoadIndexCol
299a0 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  umn(Parse*, Inde
299b0 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  x*, int, int, in
299c0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
299d0 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
299e0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
299f0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
29a00 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
29a10 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
29a20 6d 6e 54 6f 52 65 67 28 50 61 72 73 65 2a 2c 20  mnToReg(Parse*, 
29a30 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
29a40 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
29a50 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
29a60 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62  olumnOfTable(Vdb
29a70 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
29a80 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
29a90 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
29aa0 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  Move(Parse*, int
29ab0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
29ac0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
29ad0 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20  heStore(Parse*, 
29ae0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
29af0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29b00 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65 2a  CachePush(Parse*
29b10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29b20 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72 73  xprCachePop(Pars
29b30 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
29b40 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65  3ExprCacheRemove
29b50 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
29b60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29b70 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 50  ExprCacheClear(P
29b80 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
29b90 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66 66  ite3ExprCacheAff
29ba0 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72 73  inityChange(Pars
29bb0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
29bc0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
29bd0 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ode(Parse*, Expr
29be0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
29bf0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f 70  lite3ExprCodeCop
29c00 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  y(Parse*, Expr*,
29c10 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
29c20 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f  te3ExprCodeFacto
29c30 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78  rable(Parse*, Ex
29c40 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
29c50 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 74  qlite3ExprCodeAt
29c60 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70  Init(Parse*, Exp
29c70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
29c80 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d  lite3ExprCodeTem
29c90 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
29ca0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
29cb0 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65  te3ExprCodeTarge
29cc0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
29cd0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
29ce0 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61  te3ExprCodeAndCa
29cf0 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  che(Parse*, Expr
29d00 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
29d10 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72  ite3ExprCodeExpr
29d20 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70  List(Parse*, Exp
29d30 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
29d40 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53  , u8);.#define S
29d50 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20  QLITE_ECEL_DUP  
29d60 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65      0x01  /* Dee
29d70 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63  p, not shallow c
29d80 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  opies */.#define
29d90 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43   SQLITE_ECEL_FAC
29da0 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46  TOR   0x02  /* F
29db0 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
29dc0 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66  nt terms */.#def
29dd0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
29de0 52 45 46 20 20 20 20 20 20 30 78 30 34 20 20 2f  REF      0x04  /
29df0 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e 75  * Use ExprList.u
29e00 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a  .x.iOrderByCol *
29e10 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
29e20 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30  _ECEL_OMITREF  0
29e30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20  x08  /* Omit if 
29e40 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72  ExprList.u.x.iOr
29e50 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64  derByCol */.void
29e60 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72   sqlite3ExprIfTr
29e70 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ue(Parse*, Expr*
29e80 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
29e90 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
29ea0 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70  alse(Parse*, Exp
29eb0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
29ec0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
29ed0 66 46 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a  fFalseDup(Parse*
29ee0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
29ef0 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  t);.Table *sqlit
29f00 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69  e3FindTable(sqli
29f10 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
29f20 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
29f30 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56  #define LOCATE_V
29f40 49 45 57 20 20 20 20 30 78 30 31 0a 23 64 65 66  IEW    0x01.#def
29f50 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52  ine LOCATE_NOERR
29f60 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20 2a 73     0x02.Table *s
29f70 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
29f80 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61  e(Parse*,u32 fla
29f90 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  gs,const char*, 
29fa0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
29fb0 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
29fc0 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73  teTableItem(Pars
29fd0 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73 74 72  e*,u32 flags,str
29fe0 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
29ff0 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69   *);.Index *sqli
2a000 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c  te3FindIndex(sql
2a010 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
2a020 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2a030 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
2a040 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
2a050 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  e(sqlite3*,int,c
2a060 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2a070 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
2a080 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71  ndDeleteIndex(sq
2a090 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
2a0a0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2a0b0 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73  lite3Vacuum(Pars
2a0c0 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  e*,Token*);.int 
2a0d0 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
2a0e0 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33  (char**, sqlite3
2a0f0 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  *, int);.char *s
2a100 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
2a110 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  ken(sqlite3*, To
2a120 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2a130 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 50 61  e3ExprCompare(Pa
2a140 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  rse*,Expr*, Expr
2a150 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2a160 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 53  ite3ExprCompareS
2a170 6b 69 70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  kip(Expr*, Expr*
2a180 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2a190 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61  te3ExprListCompa
2a1a0 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  re(ExprList*, Ex
2a1b0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  prList*, int);.i
2a1c0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d  nt sqlite3ExprIm
2a1d0 70 6c 69 65 73 45 78 70 72 28 50 61 72 73 65 2a  pliesExpr(Parse*
2a1e0 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  ,Expr*, Expr*, i
2a1f0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a200 45 78 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75  ExprImpliesNonNu
2a210 6c 6c 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29  llRow(Expr*,int)
2a220 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2a230 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
2a240 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
2a250 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2a260 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
2a270 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
2a280 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
2a290 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a2a0 72 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28  rCoveredByIndex(
2a2b0 45 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c  Expr*, int iCur,
2a2c0 20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69   Index *pIdx);.i
2a2d0 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69  nt sqlite3Functi
2a2e0 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78  onUsesThisSrc(Ex
2a2f0 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  pr*, SrcList*);.
2a300 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74  Vdbe *sqlite3Get
2a310 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69  Vdbe(Parse*);.#i
2a320 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
2a330 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
2a340 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74  ite3PrngSaveStat
2a350 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
2a360 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65  lite3PrngRestore
2a370 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e  State(void);.#en
2a380 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2a390 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
2a3a0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
2a3b0 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
2a3c0 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  ySchema(Parse*, 
2a3d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a3e0 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65  e3CodeVerifyName
2a3f0 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  dSchema(Parse*, 
2a400 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29  const char *zDb)
2a410 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
2a420 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ginTransaction(P
2a430 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
2a440 64 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e  d sqlite3EndTran
2a450 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69  saction(Parse*,i
2a460 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2a470 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65  3Savepoint(Parse
2a480 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b  *, int, Token*);
2a490 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f  .void sqlite3Clo
2a4a0 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c  seSavepoints(sql
2a4b0 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ite3 *);.void sq
2a4c0 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41  lite3LeaveMutexA
2a4d0 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71  ndCloseZombie(sq
2a4e0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2a4f0 69 74 65 33 45 78 70 72 49 64 54 6f 54 72 75 65  ite3ExprIdToTrue
2a500 46 61 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e  False(Expr*);.in
2a510 74 20 73 71 6c 69 74 65 33 45 78 70 72 54 72 75  t sqlite3ExprTru
2a520 74 68 56 61 6c 75 65 28 63 6f 6e 73 74 20 45 78  thValue(const Ex
2a530 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2a540 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28  3ExprIsConstant(
2a550 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2a560 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
2a570 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b  tNotJoin(Expr*);
2a580 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2a590 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63  IsConstantOrFunc
2a5a0 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b  tion(Expr*, u8);
2a5b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2a5c0 49 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75  IsConstantOrGrou
2a5d0 70 42 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  pBy(Parse*, Expr
2a5e0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
2a5f0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2a600 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78  TableConstant(Ex
2a610 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66  pr*,int);.#ifdef
2a620 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
2a630 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20  URSOR_HINTS.int 
2a640 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61  sqlite3ExprConta
2a650 69 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72  insSubquery(Expr
2a660 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
2a670 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65  qlite3ExprIsInte
2a680 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29  ger(Expr*, int*)
2a690 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a6a0 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74  rCanBeNull(const
2a6b0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
2a6c0 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41  ite3ExprNeedsNoA
2a6d0 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f  ffinityChange(co
2a6e0 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29  nst Expr*, char)
2a6f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
2a700 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a  owid(const char*
2a710 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
2a720 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65  enerateRowDelete
2a730 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62  (.    Parse*,Tab
2a740 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74  le*,Trigger*,int
2a750 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c  ,int,int,i16,u8,
2a760 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64  u8,u8,int);.void
2a770 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
2a780 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50  RowIndexDelete(P
2a790 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2a7a0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
2a7b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a7c0 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
2a7d0 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
2a7e0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
2a7f0 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  int*,Index*,int)
2a800 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2a810 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65  solvePartIdxLabe
2a820 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  l(Parse*,int);.v
2a830 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
2a840 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
2a850 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
2a860 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  *,int*,int,int,i
2a870 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20  nt,int,.        
2a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a890 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c               u8,
2a8a0 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  u8,int,int*,int*
2a8b0 2c 55 70 73 65 72 74 2a 29 3b 0a 23 69 66 64 65  ,Upsert*);.#ifde
2a8c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2a8d0 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64  NULL_TRIM.  void
2a8e0 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52   sqlite3SetMakeR
2a8f0 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c 54 61  ecordP5(Vdbe*,Ta
2a900 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
2a910 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 74  efine sqlite3Set
2a920 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41 2c 42  MakeRecordP5(A,B
2a930 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
2a940 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73  lite3CompleteIns
2a950 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  ertion(Parse*,Ta
2a960 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ble*,int,int,int
2a970 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
2a980 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
2a990 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63  penTableAndIndic
2a9a0 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  es(Parse*, Table
2a9b0 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c  *, int, u8, int,
2a9c0 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u8*, int*, int*
2a9d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
2a9e0 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
2a9f0 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
2aa00 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2aa10 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
2aa20 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
2aa30 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
2aa40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2aa50 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
2aa60 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
2aa70 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b   char*, i8, u8);
2aa80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69  .void sqlite3Uni
2aa90 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  queConstraint(Pa
2aaa0 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78  rse*, int, Index
2aab0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2aac0 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28  RowidConstraint(
2aad0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62  Parse*, int, Tab
2aae0 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  le*);.Expr *sqli
2aaf0 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74  te3ExprDup(sqlit
2ab00 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  e3*,Expr*,int);.
2ab10 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
2ab20 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c  3ExprListDup(sql
2ab30 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  ite3*,ExprList*,
2ab40 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
2ab50 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70  qlite3SrcListDup
2ab60 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73  (sqlite3*,SrcLis
2ab70 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20  t*,int);.IdList 
2ab80 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75  *sqlite3IdListDu
2ab90 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73  p(sqlite3*,IdLis
2aba0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
2abb0 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71  ite3SelectDup(sq
2abc0 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69  lite3*,Select*,i
2abd0 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54  nt);.#if SELECTT
2abe0 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69  RACE_ENABLED.voi
2abf0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53  d sqlite3SelectS
2ac00 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63  etName(Select*,c
2ac10 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
2ac20 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2ac30 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65  te3SelectSetName
2ac40 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69  (A,B).#endif.voi
2ac50 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42  d sqlite3InsertB
2ac60 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63  uiltinFuncs(Func
2ac70 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44  Def*,int);.FuncD
2ac80 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46  ef *sqlite3FindF
2ac90 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
2aca0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2acb0 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71  ,u8,u8);.void sq
2acc0 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69  lite3RegisterBui
2acd0 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f  ltinFunctions(vo
2ace0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
2acf0 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d  3RegisterDateTim
2ad00 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
2ad10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2ad20 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74  gisterPerConnect
2ad30 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  ionBuiltinFuncti
2ad40 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ons(sqlite3*);.i
2ad50 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
2ad60 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a  CheckOk(sqlite3*
2ad70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
2ad80 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
2ad90 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  k(sqlite3*);.voi
2ada0 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43  d sqlite3ChangeC
2adb0 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e  ookie(Parse*, in
2adc0 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
2add0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
2ade0 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EW) && !defined(
2adf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2ae00 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  GER).void sqlite
2ae10 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77  3MaterializeView
2ae20 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2ae30 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74   Expr*, ExprList
2ae40 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65  *,Expr*,int);.#e
2ae50 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2ae60 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2ae70 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  R.  void sqlite3
2ae80 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72  BeginTrigger(Par
2ae90 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  se*, Token*,Toke
2aea0 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73  n*,int,int,IdLis
2aeb0 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20  t*,SrcList*,.   
2aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aed0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e          Expr*,in
2aee0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
2aef0 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69  sqlite3FinishTri
2af00 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
2af10 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e  ggerStep*, Token
2af20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2af30 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61  e3DropTrigger(Pa
2af40 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2af50 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
2af60 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
2af70 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  tr(Parse*, Trigg
2af80 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20  er*);.  Trigger 
2af90 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73  *sqlite3Triggers
2afa0 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  Exist(Parse *, T
2afb0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  able*, int, Expr
2afc0 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73  List*, int *pMas
2afd0 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  k);.  Trigger *s
2afe0 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
2aff0 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
2b000 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
2b010 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
2b020 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
2b030 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  r *, int, ExprLi
2b040 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20  st*, int, Table 
2b050 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2b070 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
2b080 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
2b090 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
2b0a0 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67  t(Parse *, Trigg
2b0b0 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  er *, Table *, i
2b0c0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
2b0d0 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77   void sqliteView
2b0e0 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c  Triggers(Parse*,
2b0f0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
2b100 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  int, ExprList*);
2b110 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2b120 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70  eleteTriggerStep
2b130 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
2b140 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67  erStep*);.  Trig
2b150 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2b160 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65  TriggerSelectSte
2b170 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
2b180 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
2b1b0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2b1c0 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ar*);.  TriggerS
2b1d0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2b1e0 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
2b1f0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
2b200 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
2b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b230 53 65 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72  Select*,u8,Upser
2b240 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b260 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
2b270 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2b280 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ar*);.  TriggerS
2b290 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2b2a0 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71  gerUpdateStep(sq
2b2b0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  lite3*,Token*,Ex
2b2c0 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
2b2d0 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  u8,.            
2b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
2b300 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2b310 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ar*);.  TriggerS
2b320 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2b330 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71  gerDeleteStep(sq
2b340 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45  lite3*,Token*, E
2b350 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  xpr*,.          
2b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2b380 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
2b390 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
2b3a0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
2b3b0 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  ger(sqlite3*, Tr
2b3c0 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20  igger*);.  void 
2b3d0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2b3e0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
2b3f0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
2b400 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73   char*);.  u32 s
2b410 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
2b420 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67  mask(Parse*,Trig
2b430 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ger*,ExprList*,i
2b440 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e  nt,int,Table*,in
2b450 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  t);.# define sql
2b460 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
2b470 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
2b480 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70  evel ? (p)->pTop
2b490 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64  level : (p)).# d
2b4a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54  efine sqlite3IsT
2b4b0 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
2b4c0 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23  >pToplevel==0).#
2b4d0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2b4e0 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
2b4f0 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a  st(B,C,D,E,F) 0.
2b500 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2b510 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
2b520 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
2b530 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
2b540 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
2b550 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2b560 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
2b570 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71  B,C).# define sq
2b580 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
2b590 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ger(A,B,C,D,E,F,
2b5a0 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20  G,H,I).# define 
2b5b0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
2b5c0 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c  iggerDirect(A,B,
2b5d0 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e  C,D,E,F).# defin
2b5e0 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
2b5f0 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64  List(X, Y) 0.# d
2b600 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
2b610 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a  seToplevel(p) p.
2b620 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2b630 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a  IsToplevel(p) 1.
2b640 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2b650 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41  TriggerColmask(A
2b660 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a  ,B,C,D,E,F,G) 0.
2b670 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
2b680 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73  te3JoinType(Pars
2b690 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2b6a0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
2b6b0 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  d sqlite3CreateF
2b6c0 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
2b6d0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  , ExprList*, Tok
2b6e0 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  en*, ExprList*, 
2b6f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b700 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65  e3DeferForeignKe
2b710 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  y(Parse*, int);.
2b720 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b730 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
2b740 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
2b750 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c  AuthRead(Parse*,
2b760 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72  Expr*,Schema*,Sr
2b770 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73  cList*);.  int s
2b780 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
2b790 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73  Parse*,int, cons
2b7a0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2b7b0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2b7c0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2b7d0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
2b7e0 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f  h(Parse*, AuthCo
2b7f0 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68  ntext*, const ch
2b800 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
2b810 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
2b820 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29  op(AuthContext*)
2b830 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
2b840 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65  uthReadCol(Parse
2b850 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2b860 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
2b870 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  nt);.#else.# def
2b880 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52  ine sqlite3AuthR
2b890 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64  ead(a,b,c,d).# d
2b8a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
2b8b0 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  hCheck(a,b,c,d,e
2b8c0 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  )    SQLITE_OK.#
2b8d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
2b8e0 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61  uthContextPush(a
2b8f0 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73  ,b,c).# define s
2b900 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
2b910 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29  tPop(a)  ((void)
2b920 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  (a)).#endif.void
2b930 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50   sqlite3Attach(P
2b940 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  arse*, Expr*, Ex
2b950 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
2b960 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28  d sqlite3Detach(
2b970 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2b980 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49  void sqlite3FixI
2b990 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61  nit(DbFixer*, Pa
2b9a0 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  rse*, int, const
2b9b0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   char*, const To
2b9c0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2b9d0 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46  e3FixSrcList(DbF
2b9e0 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ixer*, SrcList*)
2b9f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2ba00 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c  Select(DbFixer*,
2ba10 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
2ba20 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62  qlite3FixExpr(Db
2ba30 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  Fixer*, Expr*);.
2ba40 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
2ba50 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  prList(DbFixer*,
2ba60 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
2ba70 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67   sqlite3FixTrigg
2ba80 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c  erStep(DbFixer*,
2ba90 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
2baa0 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28  int sqlite3AtoF(
2bab0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64  const char *z, d
2bac0 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29  ouble*, int, u8)
2bad0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
2bae0 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72  Int32(const char
2baf0 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73   *, int*);.int s
2bb00 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74  qlite3Atoi(const
2bb10 20 63 68 61 72 2a 29 3b 0a 23 69 66 6e 64 65 66   char*);.#ifndef
2bb20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
2bb30 31 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  16.int sqlite3Ut
2bb40 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74  f16ByteLen(const
2bb50 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e   void *pData, in
2bb60 74 20 6e 43 68 61 72 29 3b 0a 23 65 6e 64 69 66  t nChar);.#endif
2bb70 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38  .int sqlite3Utf8
2bb80 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68  CharLen(const ch
2bb90 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  ar *pData, int n
2bba0 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74  Byte);.u32 sqlit
2bbb0 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74  e3Utf8Read(const
2bbc0 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73   u8**);.LogEst s
2bbd0 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34  qlite3LogEst(u64
2bbe0 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
2bbf0 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73  3LogEstAdd(LogEs
2bc00 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64  t,LogEst);.#ifnd
2bc10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2bc20 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45  IRTUALTABLE.LogE
2bc30 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
2bc40 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c  FromDouble(doubl
2bc50 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  e);.#endif.#if d
2bc60 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
2bc70 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
2bc80 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64  ATUS) || \.    d
2bc90 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
2bca0 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
2bcb0 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65  AT4) || \.    de
2bcc0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 58 50  fined(SQLITE_EXP
2bcd0 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f 52  LAIN_ESTIMATED_R
2bce0 4f 57 53 29 0a 75 36 34 20 73 71 6c 69 74 65 33  OWS).u64 sqlite3
2bcf0 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45  LogEstToInt(LogE
2bd00 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c 69 73  st);.#endif.VLis
2bd10 74 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 41  t *sqlite3VListA
2bd20 64 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c 69 73  dd(sqlite3*,VLis
2bd30 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  t*,const char*,i
2bd40 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74 20 63  nt,int);.const c
2bd50 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4c 69 73  har *sqlite3VLis
2bd60 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69 73 74  tNumToName(VList
2bd70 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
2bd80 74 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e 75  te3VListNameToNu
2bd90 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  m(VList*,const c
2bda0 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a  har*,int);../*.*
2bdb0 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65  * Routines to re
2bdc0 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72  ad and write var
2bdd0 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
2bde0 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73  egers.  These us
2bdf0 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69  ed to.** be defi
2be00 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74  ned locally, but
2be10 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20   now we use the 
2be20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20  varint routines 
2be30 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a  in the util.c.**
2be40 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71   file..*/.int sq
2be50 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75  lite3PutVarint(u
2be60 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
2be70 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47  64);.u8 sqlite3G
2be80 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75  etVarint(const u
2be90 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
2bea0 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74  u64 *);.u8 sqlit
2beb0 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f  e3GetVarint32(co
2bec0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2bed0 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74  r *, u32 *);.int
2bee0 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
2bef0 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a  n(u64 v);../*.**
2bf00 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   The common case
2bf10 20 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74   is for a varint
2bf20 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20   to be a single 
2bf30 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c  byte.  They foll
2bf40 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20  owing.** macros 
2bf50 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f  handle the commo
2bf60 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74 20 61  n case without a
2bf70 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c   procedure call,
2bf80 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a   but then call.*
2bf90 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  * the procedure 
2bfa0 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e  for larger varin
2bfb0 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67  ts..*/.#define g
2bfc0 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  etVarint32(A,B) 
2bfd0 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c   \.  (u8)((*(A)<
2bfe0 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28  (u8)0x80)?((B)=(
2bff0 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69  u32)*(A)),1:sqli
2c000 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28  te3GetVarint32((
2c010 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29  A),(u32 *)&(B)))
2c020 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
2c030 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
2c040 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75  u8)(((u32)(B)<(u
2c050 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28  32)0x80)?(*(A)=(
2c060 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42  unsigned char)(B
2c070 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33  )),1:\.  sqlite3
2c080 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42  PutVarint((A),(B
2c090 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56  ))).#define getV
2c0a0 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
2c0b0 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e  GetVarint.#defin
2c0c0 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73  e putVarint    s
2c0d0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a  qlite3PutVarint.
2c0e0 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
2c0f0 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
2c100 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20  tyStr(sqlite3*, 
2c110 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
2c120 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69  lite3TableAffini
2c130 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  ty(Vdbe*, Table*
2c140 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c  , int);.char sql
2c150 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e  ite3CompareAffin
2c160 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c  ity(Expr *pExpr,
2c170 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74   char aff2);.int
2c180 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66   sqlite3IndexAff
2c190 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45  inityOk(Expr *pE
2c1a0 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66  xpr, char idx_af
2c1b0 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71  finity);.char sq
2c1c0 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c 75 6d 6e  lite3TableColumn
2c1d0 41 66 66 69 6e 69 74 79 28 54 61 62 6c 65 2a 2c  Affinity(Table*,
2c1e0 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  int);.char sqlit
2c1f0 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45  e3ExprAffinity(E
2c200 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
2c210 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63   sqlite3Atoi64(c
2c220 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
2c230 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
2c240 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
2c250 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oI64(const char*
2c260 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71  , i64*);.void sq
2c270 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73  lite3ErrorWithMs
2c280 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  g(sqlite3*, int,
2c290 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e   const char*,...
2c2a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2c2b0 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  rror(sqlite3*,in
2c2c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2c2d0 53 79 73 74 65 6d 45 72 72 6f 72 28 73 71 6c 69  SystemError(sqli
2c2e0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
2c2f0 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f  *sqlite3HexToBlo
2c300 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  b(sqlite3*, cons
2c310 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e  t char *z, int n
2c320 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78  );.u8 sqlite3Hex
2c330 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e  ToInt(int h);.in
2c340 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  t sqlite3TwoPart
2c350 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f  Name(Parse *, To
2c360 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  ken *, Token *, 
2c370 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20  Token **);..#if 
2c380 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e  defined(SQLITE_N
2c390 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f  EED_ERR_NAME).co
2c3a0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2c3b0 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23  3ErrName(int);.#
2c3c0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2c3d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45 53 45  LITE_ENABLE_DESE
2c3e0 52 49 41 4c 49 5a 45 0a 69 6e 74 20 73 71 6c 69  RIALIZE.int sqli
2c3f0 74 65 33 4d 65 6d 64 62 49 6e 69 74 28 76 6f 69  te3MemdbInit(voi
2c400 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73  d);.#endif..cons
2c410 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
2c420 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20  rrStr(int);.int 
2c430 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
2c440 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  a(Parse *pParse)
2c450 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2c460 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71  e3FindCollSeq(sq
2c470 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63  lite3*,u8 enc, c
2c480 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2c490 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2c4a0 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50  3LocateCollSeq(P
2c4b0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
2c4c0 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b  nst char*zName);
2c4d0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2c4e0 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72  3ExprCollSeq(Par
2c4f0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2c500 20 2a 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65   *pExpr);.CollSe
2c510 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4e 4e  q *sqlite3ExprNN
2c520 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2c530 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
2c540 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
2c550 45 78 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68  ExprCollSeqMatch
2c560 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78  (Parse*,Expr*,Ex
2c570 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
2c580 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
2c590 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50  eToken(Parse *pP
2c5a0 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  arse, Expr*, con
2c5b0 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  st Token*, int);
2c5c0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2c5d0 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69  prAddCollateStri
2c5e0 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ng(Parse*,Expr*,
2c5f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78  const char*);.Ex
2c600 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53  pr *sqlite3ExprS
2c610 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a  kipCollate(Expr*
2c620 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
2c630 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  eckCollSeq(Parse
2c640 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a   *, CollSeq *);.
2c650 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2c660 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65  ObjectName(Parse
2c670 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2c680 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2c690 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71  dbeSetChanges(sq
2c6a0 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69  lite3 *, int);.i
2c6b0 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  nt sqlite3AddInt
2c6c0 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
2c6d0 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  t sqlite3SubInt6
2c6e0 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2c6f0 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
2c700 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2c710 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
2c720 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
2c730 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e  ITE_ENABLE_8_3_N
2c740 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65  AMES.void sqlite
2c750 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e  3FileSuffix3(con
2c760 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29  st char*, char*)
2c770 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2c780 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
2c790 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a  ix3(X,Y).#endif.
2c7a0 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  u8 sqlite3GetBoo
2c7b0 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  lean(const char 
2c7c0 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76  *z,u8);..const v
2c7d0 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  oid *sqlite3Valu
2c7e0 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61  eText(sqlite3_va
2c7f0 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  lue*, u8);.int s
2c800 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73  qlite3ValueBytes
2c810 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
2c820 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2c830 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71  e3ValueSetStr(sq
2c840 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e  lite3_value*, in
2c850 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c  t, const void *,
2c860 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  u8,.            
2c870 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
2c880 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
2c890 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
2c8a0 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61  tNull(sqlite3_va
2c8b0 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  lue*);.void sqli
2c8c0 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
2c8d0 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
2c8e0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
2c8f0 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
2c900 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66  ite3 *);.#ifndef
2c910 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
2c920 31 36 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  16.char *sqlite3
2c930 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33  Utf16to8(sqlite3
2c940 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c   *, const void*,
2c950 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69   int, u8);.#endi
2c960 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  f.int sqlite3Val
2c970 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74  ueFromExpr(sqlit
2c980 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38  e3 *, Expr *, u8
2c990 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
2c9a0 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lue **);.void sq
2c9b0 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
2c9c0 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f  ffinity(sqlite3_
2c9d0 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29  value *, u8, u8)
2c9e0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2c9f0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78  _AMALGAMATION.ex
2ca00 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2ca10 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2ca20 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  OpcodeProperty[]
2ca30 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63  ;.extern const c
2ca40 68 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49  har sqlite3StrBI
2ca50 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  NARY[];.extern c
2ca60 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2ca70 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
2ca80 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
2ca90 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2caa0 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
2cab0 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
2cac0 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
2cad0 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
2cae0 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
2caf0 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
2cb00 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
2cb10 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63  fig;.extern Func
2cb20 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42  DefHash sqlite3B
2cb30 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b  uiltinFunctions;
2cb40 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2cb50 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20  OMIT_WSD.extern 
2cb60 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69  int sqlite3Pendi
2cb70 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23  ngByte;.#endif.#
2cb80 65 6e 64 69 66 0a 23 69 66 64 65 66 20 56 44 42  endif.#ifdef VDB
2cb90 45 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e  E_PROFILE.extern
2cba0 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20   sqlite3_uint64 
2cbb0 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43  sqlite3NProfileC
2cbc0 6e 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  nt;.#endif.void 
2cbd0 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
2cbe0 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
2cbf0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
2cc00 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
2cc10 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
2cc20 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2cc30 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
2cc40 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
2cc50 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
2cc60 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
2cc70 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
2cc80 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2cc90 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
2cca0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
2ccb0 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71   int *);.void sq
2ccc0 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
2ccd0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2cce0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
2ccf0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
2cd00 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
2cd10 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2cd20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
2cd30 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70  lect(Parse*, Exp
2cd40 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  r *, int, int);.
2cd50 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2cd60 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53  ctPrep(Parse*, S
2cd70 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
2cd80 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
2cd90 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75  te3SelectWrongNu
2cda0 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73  mTermsError(Pars
2cdb0 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63  e *pParse, Selec
2cdc0 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74  t *p);.int sqlit
2cdd0 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28  e3MatchSpanName(
2cde0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2cdf0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2ce00 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2ce10 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2ce20 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73  ResolveExprNames
2ce30 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2ce40 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2ce50 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73  e3ResolveExprLis
2ce60 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  tNames(NameConte
2ce70 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  xt*, ExprList*);
2ce80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2ce90 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28  olveSelectNames(
2cea0 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2ceb0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
2cec0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2ced0 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65  lveSelfReference
2cee0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
2cef0 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  nt,Expr*,ExprLis
2cf00 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2cf10 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75  ResolveOrderGrou
2cf20 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  pBy(Parse*, Sele
2cf30 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  ct*, ExprList*, 
2cf40 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2cf50 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
2cf60 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20  Default(Vdbe *, 
2cf70 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
2cf80 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2cf90 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f  AlterFinishAddCo
2cfa0 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f  lumn(Parse *, To
2cfb0 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
2cfc0 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64  ite3AlterBeginAd
2cfd0 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
2cfe0 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c   SrcList *);.Col
2cff0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74  lSeq *sqlite3Get
2d000 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20  CollSeq(Parse*, 
2d010 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63  u8, CollSeq *, c
2d020 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
2d030 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74  r sqlite3Affinit
2d040 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72  yType(const char
2d050 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f 69  *, Column*);.voi
2d060 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
2d070 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2d080 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2d090 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48  lite3InvokeBusyH
2d0a0 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c  andler(BusyHandl
2d0b0 65 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c  er*, sqlite3_fil
2d0c0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
2d0d0 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c  FindDb(sqlite3*,
2d0e0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2d0f0 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28  lite3FindDbName(
2d100 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
2d110 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
2d120 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
2d130 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69  d(sqlite3*,int i
2d140 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  DB);.void sqlite
2d150 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70  3DeleteIndexSamp
2d160 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64  les(sqlite3*,Ind
2d170 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
2d180 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28  e3DefaultRowEst(
2d190 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
2d1a0 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
2d1b0 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  eFunctions(sqlit
2d1c0 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
2d1d0 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63  qlite3IsLikeFunc
2d1e0 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78  tion(sqlite3*,Ex
2d1f0 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b  pr*,int*,char*);
2d200 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68  .void sqlite3Sch
2d210 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29  emaClear(void *)
2d220 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65  ;.Schema *sqlite
2d230 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74  3SchemaGet(sqlit
2d240 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a  e3 *, Btree *);.
2d250 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d  int sqlite3Schem
2d260 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33  aToIndex(sqlite3
2d270 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b   *db, Schema *);
2d280 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2d290 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71  3KeyInfoAlloc(sq
2d2a0 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b  lite3*,int,int);
2d2b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79  .void sqlite3Key
2d2c0 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66  InfoUnref(KeyInf
2d2d0 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
2d2e0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28  lite3KeyInfoRef(
2d2f0 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
2d300 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2d310 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a  foOfIndex(Parse*
2d320 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49 6e  , Index*);.KeyIn
2d330 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2d340 66 6f 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50  foFromExprList(P
2d350 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2d360 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69  , int, int);..#i
2d370 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2d380 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  G.int sqlite3Key
2d390 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28  InfoIsWriteable(
2d3a0 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69  KeyInfo*);.#endi
2d3b0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  f.int sqlite3Cre
2d3c0 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
2d3d0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2d3e0 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
2d3f0 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  *,.  void (*)(sq
2d400 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
2d410 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
2d420 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29   **),.  void (*)
2d430 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2d440 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2d450 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a  lue **), void (*
2d460 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2d470 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72  t*),.  FuncDestr
2d480 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
2d490 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  or.);.void sqlit
2d4a0 65 33 4e 6f 6f 70 44 65 73 74 72 75 63 74 6f 72  e3NoopDestructor
2d4b0 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
2d4c0 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71  lite3OomFault(sq
2d4d0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2d4e0 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71  lite3OomClear(sq
2d4f0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2d500 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69  ite3ApiExit(sqli
2d510 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69  te3 *db, int);.i
2d520 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  nt sqlite3OpenTe
2d530 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65  mpDatabase(Parse
2d540 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
2d550 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53  e3StrAccumInit(S
2d560 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65  trAccum*, sqlite
2d570 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  3*, char*, int, 
2d580 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
2d590 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
2d5a0 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  h(StrAccum*);.vo
2d5b0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2d5c0 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44  DestInit(SelectD
2d5d0 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45  est*,int,int);.E
2d5e0 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61  xpr *sqlite3Crea
2d5f0 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c  teColumnExpr(sql
2d600 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20  ite3 *, SrcList 
2d610 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76  *, int, int);..v
2d620 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
2d630 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33  pRestart(sqlite3
2d640 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64  _backup *);.void
2d650 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70   sqlite3BackupUp
2d660 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63  date(sqlite3_bac
2d670 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e  kup *, Pgno, con
2d680 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64  st u8 *);..#ifnd
2d690 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
2d6a0 55 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69  UBQUERY.int sqli
2d6b0 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50  te3ExprCheckIN(P
2d6c0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23  arse*, Expr*);.#
2d6d0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2d6e0 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e  lite3ExprCheckIN
2d6f0 28 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  (x,y) SQLITE_OK.
2d700 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2d710 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
2d720 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64  T3_OR_STAT4.void
2d730 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46   sqlite3AnalyzeF
2d740 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2d750 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2d760 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20  ProbeSetValue(. 
2d770 20 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a     Parse*,Index*
2d780 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  ,UnpackedRecord*
2d790 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c  *,Expr*,int,int,
2d7a0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
2d7b0 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d  e3Stat4ValueFrom
2d7c0 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70  Expr(Parse*, Exp
2d7d0 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  r*, u8, sqlite3_
2d7e0 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73  value**);.void s
2d7f0 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
2d800 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63  Free(UnpackedRec
2d810 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ord*);.int sqlit
2d820 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71  e3Stat4Column(sq
2d830 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f  lite3*, const vo
2d840 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73  id*, int, int, s
2d850 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
2d860 0a 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64  .char sqlite3Ind
2d870 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  exColumnAffinity
2d880 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
2d890 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
2d8a0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
2d8b0 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
2d8c0 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
2d8d0 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
2d8e0 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
2d8f0 4e 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  N.  void *sqlite
2d900 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69  3ParserAlloc(voi
2d910 64 2a 28 2a 29 28 75 36 34 29 2c 20 50 61 72 73  d*(*)(u64), Pars
2d920 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
2d930 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f  te3ParserFree(vo
2d940 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  id*, void(*)(voi
2d950 64 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  d*));.#endif.voi
2d960 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
2d970 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
2d980 6e 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41  n);.#ifdef YYTRA
2d990 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a  CKMAXSTACKDEPTH.
2d9a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72    int sqlite3Par
2d9b0 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69  serStackPeak(voi
2d9c0 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  d*);.#endif..voi
2d9d0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61  d sqlite3AutoLoa
2d9e0 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  dExtensions(sqli
2d9f0 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  te3*);.#ifndef S
2da00 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
2da10 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64  EXTENSION.  void
2da20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2da30 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
2da40 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2da50 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  e sqlite3CloseEx
2da60 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64  tensions(X).#end
2da70 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2da80 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
2da90 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACHE.  void sqli
2daa0 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72  te3TableLock(Par
2dab0 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  se *, int, int, 
2dac0 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  u8, const char *
2dad0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2dae0 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  ne sqlite3TableL
2daf0 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23  ock(v,w,x,y,z).#
2db00 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2db10 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20  LITE_TEST.  int 
2db20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75  sqlite3Utf8To8(u
2db30 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a  nsigned char*);.
2db40 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2db50 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2db60 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
2db70 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  e sqlite3VtabCle
2db80 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20  ar(Y).#  define 
2db90 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
2dba0 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  X,Y) SQLITE_OK.#
2dbb0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2dbc0 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a  VtabRollback(X).
2dbd0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2dbe0 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23  3VtabCommit(X).#
2dbf0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2dc00 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30  VtabInSync(db) 0
2dc10 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2dc20 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20  e3VtabLock(X).# 
2dc30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2dc40 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
2dc50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2dc60 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a  abUnlockList(X).
2dc70 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2dc80 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58  3VtabSavepoint(X
2dc90 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f  , Y, Z) SQLITE_O
2dca0 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
2dcb0 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59  te3GetVTable(X,Y
2dcc0 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a  )  ((VTable*)0).
2dcd0 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71  #else.   void sq
2dce0 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73  lite3VtabClear(s
2dcf0 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
2dd00 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  e*);.   void sql
2dd10 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65  ite3VtabDisconne
2dd20 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ct(sqlite3 *db, 
2dd30 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e  Table *p);.   in
2dd40 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
2dd50 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56  c(sqlite3 *db, V
2dd60 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  dbe*);.   int sq
2dd70 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
2dd80 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  k(sqlite3 *db);.
2dd90 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2dda0 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33  abCommit(sqlite3
2ddb0 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73   *db);.   void s
2ddc0 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56  qlite3VtabLock(V
2ddd0 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
2dde0 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
2ddf0 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
2de00 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2de10 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c  abUnlockList(sql
2de20 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73  ite3*);.   int s
2de30 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
2de40 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  int(sqlite3 *, i
2de50 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69  nt, int);.   voi
2de60 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  d sqlite3VtabImp
2de70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c  ortErrmsg(Vdbe*,
2de80 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b   sqlite3_vtab*);
2de90 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69  .   VTable *sqli
2dea0 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c  te3GetVTable(sql
2deb0 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
2dec0 20 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74     Module *sqlit
2ded0 65 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75  e3VtabCreateModu
2dee0 6c 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33  le(.     sqlite3
2def0 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68  *,.     const ch
2df00 61 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20  ar*,.     const 
2df10 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c  sqlite3_module*,
2df20 0a 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20  .     void*,.   
2df30 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
2df40 0a 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65  .   );.#  define
2df50 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
2df60 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56  nc(db) ((db)->nV
2df70 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d  Trans>0 && (db)-
2df80 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e  >aVTrans==0).#en
2df90 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  dif.int sqlite3V
2dfa0 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c  tabEponymousTabl
2dfb0 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64  eInit(Parse*,Mod
2dfc0 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ule*);.void sqli
2dfd0 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73  te3VtabEponymous
2dfe0 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74  TableClear(sqlit
2dff0 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f  e3*,Module*);.vo
2e000 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61  id sqlite3VtabMa
2e010 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65  keWritable(Parse
2e020 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20  *,Table*);.void 
2e030 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2e040 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
2e050 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
2e060 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ken*, int);.void
2e070 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69   sqlite3VtabFini
2e080 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  shParse(Parse*, 
2e090 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2e0a0 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74  lite3VtabArgInit
2e0b0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
2e0c0 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74  qlite3VtabArgExt
2e0d0 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  end(Parse*, Toke
2e0e0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2e0f0 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73  VtabCallCreate(s
2e100 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
2e110 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72  nst char *, char
2e120 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   **);.int sqlite
2e130 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74  3VtabCallConnect
2e140 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
2e150 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2e160 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c  bCallDestroy(sql
2e170 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2e180 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
2e190 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
2e1a0 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c  sqlite3 *, VTabl
2e1b0 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  e *);.FuncDef *s
2e1c0 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f  qlite3VtabOverlo
2e1d0 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  adFunction(sqlit
2e1e0 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69  e3 *,FuncDef*, i
2e1f0 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b  nt nArg, Expr*);
2e200 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
2e210 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e  qlite3StmtCurren
2e220 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f  tTime(sqlite3_co
2e230 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
2e240 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
2e250 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f  rIndex(Vdbe*, co
2e260 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
2e270 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
2e280 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
2e290 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c  ite3_stmt *, sql
2e2a0 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f  ite3_stmt *);.vo
2e2b0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2e2c0 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69  Reset(Parse*);.i
2e2d0 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
2e2e0 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
2e2f0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2e300 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
2e310 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
2e320 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
2e330 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
2e340 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
2e350 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
2e360 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
2e370 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
2e380 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
2e390 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
2e3a0 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
2e3b0 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
2e3c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e3d0 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
2e3e0 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
2e3f0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
2e400 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
2e410 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
2e420 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
2e430 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
2e440 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
2e450 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2e460 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
2e470 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
2e480 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
2e490 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
2e4a0 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
2e4b0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
2e4c0 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
2e4d0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2e4e0 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
2e4f0 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
2e500 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
2e510 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
2e520 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
2e530 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
2e540 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  y).#endif.#ifnde
2e550 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 50  f SQLITE_OMIT_UP
2e560 53 45 52 54 0a 20 20 55 70 73 65 72 74 20 2a 73  SERT.  Upsert *s
2e570 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28  qlite3UpsertNew(
2e580 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
2e590 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
2e5a0 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  t*,Expr*);.  voi
2e5b0 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  d sqlite3UpsertD
2e5c0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 55  elete(sqlite3*,U
2e5d0 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73 65 72  psert*);.  Upser
2e5e0 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74  t *sqlite3Upsert
2e5f0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55 70 73  Dup(sqlite3*,Ups
2e600 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ert*);.  int sql
2e610 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c 79 7a  ite3UpsertAnalyz
2e620 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 53  eTarget(Parse*,S
2e630 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a 29  rcList*,Upsert*)
2e640 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2e650 55 70 73 65 72 74 44 6f 55 70 64 61 74 65 28 50  UpsertDoUpdate(P
2e660 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54 61  arse*,Upsert*,Ta
2e670 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  ble*,Index*,int)
2e680 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ;.#else.#define 
2e690 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77  sqlite3UpsertNew
2e6a0 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55 70  (v,w,x,y,z) ((Up
2e6b0 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69 6e 65  sert*)0).#define
2e6c0 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 65   sqlite3UpsertDe
2e6d0 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66 69 6e  lete(x,y).#defin
2e6e0 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  e sqlite3UpsertD
2e6f0 75 70 28 78 2c 79 29 20 20 20 20 20 20 20 28 28  up(x,y)       ((
2e700 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e 64 69  Upsert*)0).#endi
2e710 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  f.../* Declarati
2e720 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
2e730 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
2e740 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
2e750 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
2e760 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
2e770 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
2e780 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
2e790 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
2e7a0 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
2e7b0 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
2e7c0 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
2e7d0 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
2e7e0 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
2e7f0 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
2e800 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
2e810 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
2e820 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
2e830 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
2e840 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
2e850 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
2e860 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a  nctionality is.*
2e870 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f  * provided (enfo
2e880 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f  rcement of FK co
2e890 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72  nstraints requir
2e8a0 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20  es the triggers 
2e8b0 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a  sub-system)..*/.
2e8c0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2e8d0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2e8e0 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
2e8f0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
2e900 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71  IGGER).  void sq
2e910 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72  lite3FkCheck(Par
2e920 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2e930 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2e940 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2e950 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72  3FkDropTable(Par
2e960 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  se*, SrcList *, 
2e970 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20  Table*);.  void 
2e980 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
2e990 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2e9a0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2e9b0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69   int*, int);.  i
2e9c0 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  nt sqlite3FkRequ
2e9d0 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62  ired(Parse*, Tab
2e9e0 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  le*, int*, int);
2e9f0 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b  .  u32 sqlite3Fk
2ea00 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20  Oldmask(Parse*, 
2ea10 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20  Table*);.  FKey 
2ea20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65  *sqlite3FkRefere
2ea30 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23  nces(Table *);.#
2ea40 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2ea50 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
2ea60 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
2ea70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2ea80 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c  Check(a,b,c,d,e,
2ea90 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
2eaa0 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
2eab0 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
2eac0 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
2ead0 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30  k(a,b)         0
2eae0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2eaf0 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
2eb00 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65  ,c,d)    0.  #de
2eb10 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
2eb20 66 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20  ferences(a)     
2eb30 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
2eb40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2eb50 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
2eb60 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
2eb70 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
2eb80 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
2eb90 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2eba0 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
2ebb0 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
2ebc0 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
2ebd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2ebe0 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
2ebf0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
2ec00 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
2ec10 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
2ec20 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
2ec30 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
2ec40 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
2ec50 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
2ec60 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
2ec70 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
2ec80 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
2ec90 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
2eca0 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
2ecb0 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
2ecc0 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
2ecd0 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
2ece0 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
2ecf0 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
2ed00 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
2ed10 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
2ed20 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
2ed30 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2ed40 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  BLE.** is not de
2ed50 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
2ed60 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2ed70 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BLE.  void sqlit
2ed80 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
2ed90 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
2eda0 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
2edb0 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
2edc0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2edd0 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
2ede0 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
2edf0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
2ee00 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
2ee10 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
2ee20 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
2ee30 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
2ee40 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
2ee50 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2ee60 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
2ee70 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
2ee80 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
2ee90 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
2eea0 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
2eeb0 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
2eec0 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
2eed0 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
2eee0 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
2eef0 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
2ef00 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
2ef10 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
2ef20 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
2ef30 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
2ef40 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
2ef50 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
2ef60 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
2ef70 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
2ef80 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
2ef90 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
2efa0 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
2efb0 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
2efc0 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
2efd0 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
2efe0 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
2eff0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
2f000 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
2f010 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
2f020 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
2f030 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2f040 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
2f050 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
2f060 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
2f070 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
2f080 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2f090 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
2f0a0 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
2f0b0 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
2f0c0 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
2f0d0 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2f0e0 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
2f0f0 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u32, int*, int*
2f100 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  );..int sqlite3J
2f110 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
2f120 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
2f130 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
2f140 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
2f150 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  );.int sqlite3Jo
2f160 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
2f170 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65  3_vfs *);.#if de
2f180 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2f190 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
2f1a0 29 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28  ) \. || defined(
2f1b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
2f1c0 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
2f1d0 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ).  int sqlite3J
2f1e0 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c  ournalCreate(sql
2f1f0 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65  ite3_file *);.#e
2f200 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
2f210 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f  3JournalIsInMemo
2f220 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ry(sqlite3_file 
2f230 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *p);.void sqlite
2f240 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  3MemJournalOpen(
2f250 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
2f260 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ..void sqlite3Ex
2f270 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c  prSetHeightAndFl
2f280 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72 73  ags(Parse *pPars
2f290 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66  e, Expr *p);.#if
2f2a0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
2f2b0 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73  _DEPTH>0.  int s
2f2c0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
2f2d0 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
2f2e0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45  ;.  int sqlite3E
2f2f0 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50  xprCheckHeight(P
2f300 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  arse*, int);.#el
2f310 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2f320 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
2f330 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66  ight(x) 0.  #def
2f340 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
2f350 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a  heckHeight(x,y).
2f360 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69  #endif..u32 sqli
2f370 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73  te3Get4byte(cons
2f380 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  t u8*);.void sql
2f390 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a  ite3Put4byte(u8*
2f3a0 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20  , u32);..#ifdef 
2f3b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
2f3c0 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f  LOCK_NOTIFY.  vo
2f3d0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2f3e0 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69  tionBlocked(sqli
2f3f0 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  te3 *, sqlite3 *
2f400 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2f410 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
2f420 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ked(sqlite3 *db)
2f430 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2f440 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
2f450 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23  (sqlite3 *db);.#
2f460 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2f470 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2f480 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23  Blocked(x,y).  #
2f490 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2f4a0 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
2f4b0 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  (x).  #define sq
2f4c0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
2f4d0 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a  losed(x).#endif.
2f4e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2f4f0 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
2f500 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46  te3ParserTrace(F
2f510 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23  ILE*, char *);.#
2f520 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2f530 64 28 59 59 43 4f 56 45 52 41 47 45 29 0a 20 20  d(YYCOVERAGE).  
2f540 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2f550 72 43 6f 76 65 72 61 67 65 28 46 49 4c 45 2a 29  rCoverage(FILE*)
2f560 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
2f570 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
2f580 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
2f590 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
2f5a0 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
2f5b0 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
2f5c0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2f5d0 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
2f5e0 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
2f5f0 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
2f600 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23  g messages..*/.#
2f610 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2f620 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
2f630 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
2f640 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
2f650 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
2f660 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
2f670 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
2f680 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
2f690 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54  SQLITE_API SQLIT
2f6a0 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53  E_EXTERN void (S
2f6b0 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c  QLITE_CDECL *sql
2f6c0 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
2f6d0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
2f6e0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
2f6f0 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
2f700 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
2f710 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
2f720 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
2f730 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
2f740 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
2f750 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
2f760 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
2f770 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
2f780 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
2f790 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
2f7a0 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
2f7b0 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
2f7c0 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
2f7d0 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
2f7e0 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
2f7f0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2f800 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
2f810 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
2f820 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
2f830 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
2f840 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
2f850 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
2f860 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
2f870 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
2f880 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
2f890 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2f8a0 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
2f8b0 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
2f8c0 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2f8d0 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2f8e0 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2f8f0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2f900 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2f910 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2f920 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
2f930 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
2f940 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
2f950 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
2f960 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
2f970 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2f980 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
2f990 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
2f9a0 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
2f9b0 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
2f9c0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
2f9d0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
2f9e0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
2f9f0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2fa00 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
2fa10 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
2fa20 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
2fa30 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
2fa40 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
2fa50 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
2fa60 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
2fa70 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
2fa80 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
2fa90 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
2faa0 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
2fab0 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
2fac0 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
2fad0 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
2fae0 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
2faf0 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
2fb00 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
2fb10 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
2fb20 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
2fb30 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
2fb40 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
2fb50 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
2fb60 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
2fb70 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
2fb80 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
2fb90 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
2fba0 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
2fbb0 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
2fbc0 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
2fbd0 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
2fbe0 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
2fbf0 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
2fc00 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
2fc10 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a  constraint..**.*
2fc20 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
2fc30 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
2fc40 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
2fc50 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
2fc60 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
2fc70 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
2fc80 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
2fc90 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
2fca0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2fcb0 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
2fcc0 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
2fcd0 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
2fce0 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
2fcf0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2fd00 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
2fd10 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
2fd20 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
2fd30 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2fd40 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2fd50 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
2fd60 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
2fd70 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
2fd80 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
2fd90 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
2fda0 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2fdb0 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
2fdc0 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
2fdd0 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
2fde0 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
2fdf0 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
2fe00 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2fe10 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
2fe20 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
2fe30 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
2fe40 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
2fe50 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
2fe60 43 48 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a  CHE     0x04  /*
2fe70 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
2fe80 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  cations */../*.*
2fe90 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65  * Threading inte
2fea0 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c  rface.*/.#if SQL
2feb0 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
2fec0 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c  HREADS>0.int sql
2fed0 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65  ite3ThreadCreate
2fee0 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c  (SQLiteThread**,
2fef0 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c  void*(*)(void*),
2ff00 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
2ff10 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51  te3ThreadJoin(SQ
2ff20 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69  LiteThread*, voi
2ff30 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  d**);.#endif..#i
2ff40 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2ff50 5f 45 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56  _ENABLE_DBPAGE_V
2ff60 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
2ff70 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
2ff80 20 73 71 6c 69 74 65 33 44 62 70 61 67 65 52 65   sqlite3DbpageRe
2ff90 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
2ffa0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
2ffb0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2ffc0 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
2ffd0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2ffe0 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
2fff0 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
30000 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
30010 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
30020 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45  ExprVectorSize(E
30030 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
30040 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 56 65   sqlite3ExprIsVe
30050 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72  ctor(Expr *pExpr
30060 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
30070 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78  VectorFieldSubex
30080 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  pr(Expr*, int);.
30090 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
300a0 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28  rForVectorField(
300b0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74  Parse*,Expr*,int
300c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
300d0 65 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61  ectorErrorMsg(Pa
300e0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23  rse*, Expr*);..#
300f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30100 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
30110 5f 44 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61  _DIAGS.const cha
30120 72 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69  r **sqlite3Compi
30130 6c 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70  leOptions(int *p
30140 6e 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  nOpt);.#endif..#
30150 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49  endif /* SQLITEI
30160 4e 54 5f 48 20 2a 2f 0a                          NT_H */.