/ Hex Artifact Content
Login

Artifact 40eb4e59a487a02525121e2af140052d1d33120ee367692523a91bf4a16707a7:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64  d(i386)     || d
6dd0: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
6de0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
6df0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
6e00: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
6e10: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
6e20: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
6e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
6e40: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6e50: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
6e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
6e70: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
6e80: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
6e90: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ea0: 5f 5f 61 72 6d 5f 5f 29 20 20 7c 7c 20 64 65 66  __arm__)  || def
6eb0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 36 34 29 0a 23  ined(_M_ARM64).#
6ec0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ed0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
6ee0: 33 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65  34.# elif define
6ef0: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
6f00: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a  efined(__ppc__).
6f10: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6f20: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6f30: 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  321.# else.#   d
6f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6f50: 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66  EORDER 0.# endif
6f60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
6f70: 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33  TE_BYTEORDER==43
6f80: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
6f90: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6fa0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6fb0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
6fc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6fd0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
6fe0: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c  LITE_UTF16BE.#el
6ff0: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
7000: 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69  DER==1234.# defi
7010: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
7020: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
7030: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7040: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
7050: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
7060: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
7070: 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65  6LE.#else.# ifde
7080: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
7090: 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e  ATION.  const in
70a0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31  t sqlite3one = 1
70b0: 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72  ;.# else.  exter
70c0: 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  n const int sqli
70d0: 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a  te3one;.# endif.
70e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70f0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28  BIGENDIAN    (*(
7100: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
7110: 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e  one)==0).# defin
7120: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7130: 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29  NDIAN (*(char *)
7140: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31  (&sqlite3one)==1
7150: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
7160: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28  E_UTF16NATIVE  (
7170: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
7180: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
7190: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
71a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
71b0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
71c0: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
71d0: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
71e0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
71f0: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
7200: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
7210: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
7220: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
7230: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
7240: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
7250: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
7260: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
7270: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
7280: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
7290: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
72a0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
72b0: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
72c0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61  /*.** Round up a
72d0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e   number to the n
72e0: 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69  ext larger multi
72f0: 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20  ple of 8.  This 
7300: 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f  is used.** to fo
7310: 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e  rce 8-byte align
7320: 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61  ment on 64-bit a
7330: 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f  rchitectures..*/
7340: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28  .#define ROUND8(
7350: 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26  x)     (((x)+7)&
7360: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  ~7)../*.** Round
7370: 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61   down to the nea
7380: 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rest multiple of
7390: 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f   8.*/.#define RO
73a0: 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29  UNDDOWN8(x) ((x)
73b0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65  &~7)../*.** Asse
73c0: 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e  rt that the poin
73d0: 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64  ter X is aligned
73e0: 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f   to an 8-byte bo
73f0: 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a  undary.  This.**
7400: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f   macro is used o
7410: 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72  nly within asser
7420: 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68  t() to verify th
7430: 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73  at the code gets
7440: 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e  .** all alignmen
7450: 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63  t restrictions c
7460: 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78  orrect..**.** Ex
7470: 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f  cept, if SQLITE_
7480: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
7490: 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64  ALLOC is defined
74a0: 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e  , then the.** un
74b0: 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28  derlying malloc(
74c0: 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ) implementation
74d0: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
74e0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
74f0: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
7500: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
7510: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
7520: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
7530: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
7540: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
7550: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
7560: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
7570: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
7580: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
7590: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
75a0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
75b0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
75c0: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
75d0: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
75e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  endif../*.** Dis
75f0: 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61  able MMAP on pla
7600: 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20  tforms where it 
7610: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20  is known to not 
7620: 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69  work.*/.#if defi
7630: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
7640: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e   || defined(__QN
7650: 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20  XNTO__).# undef 
7660: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7670: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7690: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ZE 0.#endif../*.
76a0: 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d  ** Default maxim
76b0: 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72  um size of memor
76c0: 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79  y used by memory
76d0: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74  -mapped I/O in t
76e0: 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66  he VFS.*/.#ifdef
76f0: 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63   __APPLE__.# inc
7700: 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64  lude <TargetCond
7710: 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64  itionals.h>.#end
7720: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
7730: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7740: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
7750: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
7760: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
7770: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
7780: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
7790: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
77a0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
77b0: 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66  _sun) \.  || def
77c0: 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f  ined(__FreeBSD__
77d0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
77e0: 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a  (__DragonFly__).
77f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
7800: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7810: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
7820: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
7830: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
7840: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7850: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
7860: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
7870: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
7880: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
7890: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
78a0: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
78b0: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
78c0: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
78d0: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
78e0: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
78f0: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
7900: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
7910: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
7920: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7930: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7940: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7950: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7960: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7970: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7980: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7990: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
79a0: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
79b0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
79c0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
79d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
79e0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
79f0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
7a00: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
7a10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7a20: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7a30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7a40: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7a50: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7a60: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7a70: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7a80: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7a90: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7aa0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7ab0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7ac0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
7ad0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
7ae0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
7af0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7b00: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7b10: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7b20: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7b30: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7b40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7b50: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7b60: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7b70: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7b80: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7b90: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ba0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7bb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
7bc0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
7bd0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
7be0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
7bf0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
7c00: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
7c10: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7c20: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7c30: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7c40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7c50: 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
7c60: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  CE).# define SEL
7c70: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
7c80: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
7c90: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
7ca0: 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a  ABLED 0.#endif..
7cb0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
7cc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
7cd0: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
7ce0: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
7cf0: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
7d00: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
7d10: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
7d20: 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndle..**.** The 
7d30: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7d40: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
7d50: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
7d60: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
7d70: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
7d80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7d90: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
7da0: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
7db0: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
7dc0: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
7dd0: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
7de0: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
7e10: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
7e20: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
7e30: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
7e40: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
7e50: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
7e60: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
7e70: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
7e80: 78 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f  xBusyHandler)(vo
7e90: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
7ea0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
7eb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73   */.  void *pBus
7ec0: 79 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  yArg;           
7ed0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
7ee0: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
7ef0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
7f00: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7f20: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
7f30: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
7f40: 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69  */.  u8 bExtraFi
7f50: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
7f60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64         /* Includ
7f70: 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61  e sqlite3_file a
7f80: 73 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a  s callback arg *
7f90: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
7fa0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7fb0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7fc0: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7fd0: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7fe0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7ff0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
8000: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
8010: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
8020: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
8030: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
8040: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
8050: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
8060: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
8070: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
8080: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
8090: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
80a0: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
80b0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
80c0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80d0: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
80e0: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
80f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
8100: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
8110: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
8120: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
8130: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
8140: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
8150: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
8160: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
8170: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
8180: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
8190: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
81a0: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
81b0: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
81c0: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
81d0: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
81e0: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
81f0: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
8200: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
8210: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
8220: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
8230: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
8240: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
8250: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
8260: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
8270: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
8280: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
8290: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
82a0: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
82b0: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
82c0: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
82d0: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
82e0: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
82f0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
8300: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
8310: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
8320: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
8330: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
8340: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
8350: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
8360: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
8370: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
8380: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
8390: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
83a0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
83b0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
83c0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
83d0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
83e0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
83f0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
8400: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
8410: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
8420: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
8430: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
8440: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
8450: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
8460: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
8470: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
8480: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
8490: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
84a0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
84b0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
84c0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
84d0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
84e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
84f0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
8500: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
8510: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
8520: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
8530: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
8540: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
8550: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
8560: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
8570: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
8580: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
8590: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
85a0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
85b0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
85c0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
85d0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
85e0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
85f0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
8600: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
8610: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8620: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
8630: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
8640: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
8650: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
8660: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
8670: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
8680: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
8690: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
86a0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
86b0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
86c0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
86d0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
86e0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
86f0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
8700: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
8710: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
8720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8730: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
8740: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
8750: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
8760: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
8770: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
8780: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
8790: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
87a0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
87b0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
87c0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
87d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
87e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
87f0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
8800: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
8810: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
8820: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
8830: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
8840: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
8850: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
8860: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
8870: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
8880: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
8890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
88a0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
88b0: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
88c0: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
88d0: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
88e0: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
88f0: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
8900: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
8910: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
8920: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
8930: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
8940: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
8950: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
8960: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
8970: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
8980: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
8990: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
89a0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
89b0: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
89c0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
89d0: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
89e0: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
89f0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
8a00: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
8a10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
8a20: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
8a30: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
8a40: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
8a50: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
8a60: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
8a70: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
8a80: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
8a90: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
8aa0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
8ab0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
8ac0: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
8ad0: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
8ae0: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
8af0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
8b00: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
8b10: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
8b20: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
8b30: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
8b40: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
8b50: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
8b60: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
8b70: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
8b80: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
8b90: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
8ba0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
8bb0: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
8bc0: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
8bd0: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
8be0: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
8bf0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
8c00: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
8c10: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
8c20: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
8c30: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
8c40: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
8c50: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
8c60: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
8c70: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
8c80: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
8c90: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
8ca0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
8cb0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
8cc0: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
8cd0: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
8ce0: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
8cf0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
8d00: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
8d10: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8d20: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
8d30: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
8d40: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
8d50: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
8d60: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
8d70: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
8d80: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
8d90: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
8da0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
8db0: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
8dc0: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
8dd0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
8de0: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
8df0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
8e00: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
8e10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
8e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
8e40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
8e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
8e90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
8ea0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
8eb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8ec0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
8ed0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ee0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
8ef0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
8f00: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
8f10: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
8f20: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
8f30: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
8f40: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f50: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
8f60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8f70: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
8f80: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
8f90: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
8fa0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
8fb0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
8fc0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
8fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fe0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
9000: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
9010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9020: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
9030: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61  RenameToken Rena
9060: 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  meToken;.typedef
9070: 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52   struct RowSet R
9080: 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73  owSet;.typedef s
9090: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
90a0: 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64  Savepoint;.typed
90b0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
90c0: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
90d0: 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68   struct SQLiteTh
90e0: 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61  read SQLiteThrea
90f0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9100: 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c  t SelectDest Sel
9110: 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66  ectDest;.typedef
9120: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
9130: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
9140: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
9150: 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a  str StrAccum; /*
9160: 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20   Internal alias 
9170: 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20  for sqlite3_str 
9180: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
9190: 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74  t Table Table;.t
91a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
91b0: 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63  bleLock TableLoc
91c0: 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  k;.typedef struc
91d0: 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74  t Token Token;.t
91e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
91f0: 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b  eeView TreeView;
9200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9210: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
9220: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9230: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
9240: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
9250: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
9260: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
9270: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
9280: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
9290: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
92a0: 65 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65  edef struct Upse
92b0: 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64  rt Upsert;.typed
92c0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
92d0: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
92e0: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
92f0: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
9300: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
9310: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
9320: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
9330: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
9340: 65 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77  ef struct Window
9350: 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66   Window;.typedef
9360: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
9370: 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  h;.../*.** The b
9380: 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
9390: 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
93a0: 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
93b0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
93c0: 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
93d0: 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
93e0: 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
93f0: 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
9400: 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
9410: 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
9420: 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
9430: 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
9440: 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
9450: 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
9460: 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
9470: 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65  n ix86..*/.#ifde
9480: 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
9490: 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20  _TYPE.  typedef 
94a0: 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
94b0: 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c  YPE Bitmask;.#el
94c0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
94d0: 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66   Bitmask;.#endif
94e0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
94f0: 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
9500: 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
9510: 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
9520: 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
9530: 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
9540: 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
9550: 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
9560: 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
9570: 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
9580: 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
9590: 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
95a0: 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
95b0: 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
95c0: 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c  (n)).#define ALL
95d0: 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d  BITS      ((Bitm
95e0: 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c  ask)-1)../* A VL
95f0: 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72  ist object recor
9600: 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74  ds a mapping bet
9610: 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f  ween parameters/
9620: 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61  variables/wildca
9630: 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51  rds.** in the SQ
9640: 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63  L statement (suc
9650: 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c  h as $abc, @pqr,
9660: 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68   or :xyz) and th
9670: 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72  e integer.** var
9680: 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73  iable number ass
9690: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61  ociated with tha
96a0: 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65  t parameter.  Se
96b0: 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73  e the format des
96c0: 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74  cription.** on t
96d0: 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41  he sqlite3VListA
96e0: 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72  dd() routine for
96f0: 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f   more informatio
9700: 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72  n.  A VList is r
9710: 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e  eally.** just an
9720: 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65   array of intege
9730: 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69  rs..*/.typedef i
9740: 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a  nt VList;../*.**
9750: 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20   Defer sourcing 
9760: 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65  vdbe.h and btree
9770: 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74  .h until after t
9780: 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22  he "u8" and.** "
9790: 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70  BusyHandler" typ
97a0: 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c  edefs. vdbe.h al
97b0: 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65  so requires a fe
97c0: 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a  w of the opaque.
97d0: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73  ** pointer types
97e0: 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20   (i.e. FuncDef) 
97f0: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a  defined above..*
9800: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65  /.#include "btre
9810: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  e.h".#include "v
9820: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
9830: 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75  "pager.h".#inclu
9840: 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69  de "pcache.h".#i
9850: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
9860: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
9870: 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  ../* The SQLITE_
9880: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f  EXTRA_DURABLE co
9890: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
98a0: 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68  n used to set th
98b0: 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e  e default.** syn
98c0: 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67  chronous setting
98d0: 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69   to EXTRA.  It i
98e0: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70  s no longer supp
98f0: 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  orted..*/.#ifdef
9900: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9910: 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20  RABLE.# warning 
9920: 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  Use SQLITE_DEFAU
9930: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33  LT_SYNCHRONOUS=3
9940: 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49   instead of SQLI
9950: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
9960: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9970: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9980: 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f  NOUS 3.#endif../
9990: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e  *.** Default syn
99a0: 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e  chronous levels.
99b0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
99c0: 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20   (for historcal 
99d0: 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47  reasons) the PAG
99e0: 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a  ER_SYNCHRONOUS_*
99f0: 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a   macros differ.*
9a00: 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  * from the SQLIT
9a10: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9a20: 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31  ONOUS value by 1
9a30: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  ..**.**         
9a40: 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e    PAGER_SYNCHRON
9a50: 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c  OUS       DEFAUL
9a60: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a  T_SYNCHRONOUS.**
9a70: 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20     OFF          
9a80: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
9a90: 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20             0.** 
9aa0: 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20    NORMAL        
9ab0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
9ac0: 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20            1.**  
9ad0: 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33   FULL          3
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20           2.**   
9b00: 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20  EXTRA         4 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20          3.**.** 
9b30: 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63  The "PRAGMA sync
9b40: 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65  hronous" stateme
9b50: 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65  nt also uses the
9b60: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9b70: 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ers..** In other
9b80: 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f   words, the zero
9b90: 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61  -based numbers a
9ba0: 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  re used for all 
9bb0: 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61  external interfa
9bc0: 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f  ces.** and the o
9bd0: 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20  ne-based values 
9be0: 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61  are used interna
9bf0: 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  lly..*/.#ifndef 
9c00: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9c10: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66  YNCHRONOUS.# def
9c20: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
9c30: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32  LT_SYNCHRONOUS 2
9c40: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
9c50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9c60: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23  AL_SYNCHRONOUS.#
9c70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
9c80: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9c90: 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45  RONOUS SQLITE_DE
9ca0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
9cb0: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
9cc0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  Each database fi
9cd0: 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65  le to be accesse
9ce0: 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20  d by the system 
9cf0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
9d00: 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * of the followi
9d10: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  ng structure.  T
9d20: 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  here are normall
9d30: 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73  y two of these s
9d40: 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20  tructures.** in 
9d50: 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d  the sqlite.aDb[]
9d60: 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20   array.  aDb[0] 
9d70: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
9d80: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a  base file and.**
9d90: 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64   aDb[1] is the d
9da0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
9db0: 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72  d to hold tempor
9dc0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64  ary tables.  Add
9dd0: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62  itional.** datab
9de0: 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61  ases may be atta
9df0: 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ched..*/.struct 
9e00: 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62  Db {.  char *zDb
9e10: 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  SName;      /* N
9e20: 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61  ame of this data
9e30: 62 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61  base. (schema na
9e40: 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65  me, not filename
9e50: 29 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  ) */.  Btree *pB
9e60: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
9e70: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
9e80: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
9e90: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
9ea0: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
9eb0: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
9ec0: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
9ed0: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
9ee0: 2f 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b  /.  u8 bSyncSet;
9ef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
9f00: 20 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63   if "PRAGMA sync
9f10: 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62  hronous=N" has b
9f20: 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68  een run */.  Sch
9f30: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
9f40: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
9f50: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
9f60: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
9f70: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
9f80: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9f90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
9fa0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
9fb0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
9fc0: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
9fd0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
9fe0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
9ff0: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
a000: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
a010: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
a020: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
a030: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
a040: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
a050: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
a060: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
a070: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
a080: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
a090: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
a0a0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
a0b0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
a0c0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
a0d0: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a  ared object..**.
a0e0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
a0f0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
a100: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
a110: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
a120: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
a130: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
a140: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
a150: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
a160: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
a170: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
a180: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
a190: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
a1a0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
a1b0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
a1c0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
a1d0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
a1e0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
a1f0: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
a200: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
a210: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
a220: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a230: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
a240: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
a250: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
a260: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
a270: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
a280: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
a290: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
a2a0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
a2b0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
a2c0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
a2d0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
a2e0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
a2f0: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
a300: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
a310: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
a320: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
a330: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
a340: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
a350: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
a360: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
a370: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a380: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
a390: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a3a0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
a3b0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a3c0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
a3d0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
a3e0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
a3f0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
a400: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
a410: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
a420: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
a430: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
a440: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
a450: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
a460: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
a470: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
a480: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
a490: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
a4a0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
a4b0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
a4c0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
a4d0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
a4e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
a4f0: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
a500: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
a510: 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46  */.  u16 schemaF
a520: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
a530: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
a540: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
a550: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
a560: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
a570: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
a580: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
a590: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
a5a0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
a5b0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
a5c0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
a5d0: 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70  s in the.** Db.p
a5e0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
a5f0: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
a600: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
a610: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
a620: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a630: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
a640: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
a650: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
a660: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
a670: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a680: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
a690: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
a6a0: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
a6b0: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
a6c0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a6d0: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
a6e0: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
a6f0: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
a700: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a710: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
a720: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
a730: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
a740: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
a750: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
a760: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
a770: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
a780: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
a790: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
a7a0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
a7b0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
a7c0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
a7d0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
a7e0: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
a7f0: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
a800: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
a810: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
a820: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
a830: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
a840: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
a850: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
a860: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
a870: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
a880: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
a890: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
a8a0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
a8b0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
a8c0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
a8d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
a8e0: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
a8f0: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
a900: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
a910: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
a920: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
a930: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
a940: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
a950: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
a960: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65   0 bytes) */.#de
a970: 66 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e  fine DB_ResetWan
a980: 74 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20  ted     0x0008  
a990: 2f 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68  /* Reset the sch
a9a0: 65 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61  ema when nSchema
a9b0: 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a  Lock==0 */../*.*
a9c0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
a9d0: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
a9e0: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
a9f0: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
aa00: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
aa10: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
aa20: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
aa30: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
aa40: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f  (SQLITE_LIMIT_WO
aa50: 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a  RKER_THREADS+1).
aa60: 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  ./*.** Lookaside
aa70: 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74   malloc is a set
aa80: 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62   of fixed-size b
aa90: 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20  uffers that can 
aaa0: 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  be used.** to sa
aab0: 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e  tisfy small tran
aac0: 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c  sient memory all
aad0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73  ocation requests
aae0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20   for objects.** 
aaf0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ab00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ab10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ab20: 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a  .  The use of.**
ab30: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
ab40: 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67  c provides a sig
ab50: 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d  nificant perform
ab60: 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ance enhancement
ab70: 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29  .** (approx 10%)
ab80: 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d   by avoiding num
ab90: 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65  erous malloc/fre
aba0: 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65  e requests while
abb0: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20   parsing.** SQL 
abc0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
abd0: 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20  * The Lookaside 
abe0: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
abf0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e  configuration in
ac00: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
ac10: 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  the.** lookaside
ac20: 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65   malloc subsyste
ac30: 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62  m.  Each availab
ac40: 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
ac50: 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c  tion in.** the l
ac60: 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74  ookaside subsyst
ac70: 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  em is stored on 
ac80: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
ac90: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a   LookasideSlot.*
aca0: 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a  * objects..**.**
acb0: 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   Lookaside alloc
acc0: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
acd0: 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65  allowed for obje
ace0: 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73  cts that are ass
acf0: 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20  ociated.** with 
ad00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ad10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ad20: 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61  .  Hence, schema
ad30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e   information can
ad40: 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64  not.** be stored
ad50: 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65   in lookaside be
ad60: 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20  cause in shared 
ad70: 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73  cache mode the s
ad80: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
ad90: 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62  n.** is shared b
ada0: 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  y multiple datab
adb0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ase connections.
adc0: 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69    Therefore, whi
add0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63  le parsing.** sc
ade0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
adf0: 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e  , the Lookaside.
ae00: 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73  bEnabled flag is
ae10: 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74   cleared so that
ae20: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** lookaside al
ae30: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f  locations are no
ae40: 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72  t used to constr
ae50: 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f  uct the schema o
ae60: 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
ae70: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20  t Lookaside {.  
ae80: 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20  u32 bDisable;   
ae90: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20          /* Only 
aea0: 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b  operate the look
aeb0: 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20  aside when zero 
aec0: 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20  */.  u16 sz;    
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aee0: 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66  Size of each buf
aef0: 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  fer in bytes */.
af00: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
af10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
af20: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
af30: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
af40: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
af50: 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20  u32 nSlot;      
af60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
af70: 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73  r of lookaside s
af80: 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  lots allocated *
af90: 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33  /.  u32 anStat[3
afa0: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
afb0: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
afc0: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
afd0: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
afe0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e  okasideSlot *pIn
aff0: 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  it;   /* List of
b000: 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65   buffers not pre
b010: 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a  viously used */.
b020: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b030: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
b040: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
b050: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
b060: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
b070: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
b080: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
b090: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
b0a0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
b0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
b0c0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
b0d0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
b0e0: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
b0f0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
b100: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b110: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
b120: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
b130: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
b140: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
b150: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
b160: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
b170: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b180: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
b190: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
b1a0: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
b1b0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
b1c0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
b1d0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
b1e0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
b1f0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
b200: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
b210: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
b220: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
b230: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
b240: 63 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20  chain.  Use the 
b250: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b260: 28 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63  ().** macro to c
b270: 6f 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e  ompute a hash on
b280: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61   the function na
b290: 6d 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  me..*/.#define S
b2a0: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b2b0: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
b2c0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
b2d0: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
b2e0: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
b2f0: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
b300: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
b310: 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51  */.};.#define SQ
b320: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43  LITE_FUNC_HASH(C
b330: 2c 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53  ,L) (((C)+(L))%S
b340: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b350: 53 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  SZ)..#ifdef SQLI
b360: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b370: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
b380: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
b390: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
b3a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b3b0: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
b3c0: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
b3d0: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
b3e0: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
b3f0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
b400: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
b410: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
b420: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
b430: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
b440: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
b450: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
b460: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
b470: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
b480: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b490: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
b4a0: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
b4b0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
b4c0: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
b4d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
b4e0: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
b4f0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
b500: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b520: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
b530: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
b540: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
b550: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
b560: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
b570: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
b580: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
b590: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
b5a0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
b5b0: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
b5c0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
b5d0: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
b5e0: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
b5f0: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
b600: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
b610: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
b620: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b630: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
b640: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
b650: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
b660: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
b670: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
b680: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
b690: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
b6a0: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
b6b0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
b6c0: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
b6d0: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
b6e0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
b6f0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
b700: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
b710: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
b720: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
b730: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
b740: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
b750: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
b760: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
b770: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
b780: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
b790: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b7a0: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
b7b0: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
b7c0: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
b7d0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
b7e0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
b7f0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b800: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
b810: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
b820: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
b830: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
b840: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b850: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
b880: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
b890: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
b8a0: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b8b0: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b8c0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b8d0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b8e0: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
b910: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
b920: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b930: 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54  _DEPRECATED./* T
b940: 68 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20  his is an extra 
b950: 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63  SQLITE_TRACE mac
b960: 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ro that indicate
b970: 73 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69  s "legacy" traci
b980: 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79  ng.** in the sty
b990: 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72  le of sqlite3_tr
b9a0: 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  ace().*/.#define
b9b0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45   SQLITE_TRACE_LE
b9c0: 47 41 43 59 20 20 20 20 20 20 20 20 20 20 30 78  GACY          0x
b9d0: 34 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68  40     /* Use th
b9e0: 65 20 6c 65 67 61 63 79 20 78 54 72 61 63 65 20  e legacy xTrace 
b9f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba00: 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45  E_TRACE_XPROFILE
ba10: 20 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20          0x80    
ba20: 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61   /* Use the lega
ba30: 63 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a 23  cy xProfile */.#
ba40: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c  else.#define SQL
ba50: 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59  ITE_TRACE_LEGACY
ba60: 20 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66            0.#def
ba70: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
ba80: 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20  _XPROFILE       
ba90: 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   0.#endif /* SQL
baa0: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
bab0: 54 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TED */.#define S
bac0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 4c  QLITE_TRACE_NONL
bad0: 45 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30 66  EGACY_MASK  0x0f
bae0: 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 66       /* Normal f
baf0: 6c 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  lags */.../*.** 
bb00: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  Each database co
bb10: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69  nnection is an i
bb20: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
bb30: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
bb40: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71  re..*/.struct sq
bb50: 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65  lite3 {.  sqlite
bb60: 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20  3_vfs *pVfs;    
bb70: 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e          /* OS In
bb80: 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72  terface */.  str
bb90: 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b  uct Vdbe *pVdbe;
bba0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
bbb0: 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72  st of active vir
bbc0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f  tual machines */
bbd0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c  .  CollSeq *pDfl
bbe0: 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  tColl;          
bbf0: 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20   /* The default 
bc00: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
bc10: 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20  ce (BINARY) */. 
bc20: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
bc30: 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f  mutex;         /
bc40: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  * Connection mut
bc50: 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b  ex */.  Db *aDb;
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc70: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63        /* All bac
bc80: 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  kends */.  int n
bc90: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
bca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bcb0: 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63  er of backends c
bcc0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
bcd0: 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67  */.  u32 mDbFlag
bce0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
bcf0: 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f     /* flags reco
bd00: 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73  rding internal s
bd10: 74 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c  tate */.  u64 fl
bd20: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
bd30: 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73          /* flags
bd40: 20 73 65 74 74 61 62 6c 65 20 62 79 20 70 72 61   settable by pra
bd50: 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  gmas. See below 
bd60: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
bd70: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
bd80: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
bd90: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
bda0: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
bdb0: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdd0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
bde0: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
bdf0: 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f  .  u32 nSchemaLo
be00: 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
be10: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74   /* Do not reset
be20: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
be30: 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75   non-zero */.  u
be40: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
be50: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
be60: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
be70: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
be80: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
be90: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
bea0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
beb0: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
bec0: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
bed0: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bef0: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
bf00: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
bf10: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
bf20: 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20   int iSysErrno; 
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf40: 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72  * Errno value fr
bf50: 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65  om last system e
bf60: 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62  rror */.  u16 db
bf70: 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20  OptFlags;       
bf80: 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73          /* Flags
bf90: 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62   to enable/disab
bfa0: 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  le optimizations
bfb0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfd0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
bfe0: 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74  ding */.  u8 aut
bff0: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
c000: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
c010: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
c020: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
c030: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
c040: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
c050: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
c060: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
c070: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
c080: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
c090: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
c0a0: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
c0b0: 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d  */.  u8 bBenignM
c0c0: 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  alloc;          
c0d0: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71     /* Do not req
c0e0: 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75  uire OOMs if tru
c0f0: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
c100: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
c110: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
c120: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
c130: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
c140: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
c150: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
c160: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
c170: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
c180: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
c190: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
c1a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
c1b0: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
c1c0: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
c1d0: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
c1e0: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
c1f0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
c200: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
c210: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
c220: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
c230: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
c240: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
c250: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
c260: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
c270: 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20  */.  u8 mTrace; 
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c290: 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f     /* zero or mo
c2a0: 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20  re SQLITE_TRACE 
c2b0: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f  flags */.  u8 no
c2c0: 53 68 61 72 65 64 43 61 63 68 65 3b 20 20 20 20  SharedCache;    
c2d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
c2e0: 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61   if no shared-ca
c2f0: 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  che backends */.
c300: 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20    u8 nSqlExec;  
c310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c320: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e  /* Number of pen
c330: 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20  ding OP_SqlExec 
c340: 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74  opcodes */.  int
c350: 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20   nextPagesize;  
c360: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
c370: 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43  gesize after VAC
c380: 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75  UUM if >0 */.  u
c390: 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20  32 magic;       
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c3b0: 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72  Magic number for
c3c0: 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20   detect library 
c3d0: 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  misuse */.  int 
c3e0: 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  nChange;        
c3f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
c400: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
c410: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
c420: 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c   */.  int nTotal
c430: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
c440: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
c450: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
c460: 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
c470: 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74   */.  int aLimit
c480: 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d  [SQLITE_N_LIMIT]
c490: 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f  ;   /* Limits */
c4a0: 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65  .  int nMaxSorte
c4b0: 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  rMmap;          
c4c0: 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65   /* Maximum size
c4d0: 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70   of regions mapp
c4e0: 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a  ed by sorter */.
c4f0: 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
c500: 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20  InitInfo {      
c510: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
c520: 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69  sed during initi
c530: 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  alization */.   
c540: 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20   int newTnum;   
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c560: 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c  Rootpage of tabl
c570: 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
c580: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44  zed */.    u8 iD
c590: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
c5a0: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
c5b0: 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67  db file is being
c5c0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
c5d0: 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20      u8 busy;    
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65  /* TRUE if curre
c600: 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e  ntly initializin
c610: 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  g */.    unsigne
c620: 64 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20  d orphanTrigger 
c630: 3a 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61  : 1; /* Last sta
c640: 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e  tement is orphan
c650: 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20  ed TEMP trigger 
c660: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c670: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20  imposterTable : 
c680: 31 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61  1; /* Building a
c690: 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65  n imposter table
c6a0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c6b0: 20 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31   reopenMemdb : 1
c6c0: 3b 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73  ;   /* ATTACH is
c6d0: 20 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e   really a reopen
c6e0: 20 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a   using MemDB */.
c6f0: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
c700: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
c710: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c720: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
c730: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
c740: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
c750: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
c760: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c770: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
c780: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
c790: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
c7a0: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
c7b0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c7c0: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
c7d0: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
c7e0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
c7f0: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
c800: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c810: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
c820: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
c830: 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20  int nVDestroy;  
c840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c850: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c860: 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70  e OP_VDestroy op
c870: 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  erations */.  in
c880: 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  t nExtension;   
c890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c8a0: 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20  umber of loaded 
c8b0: 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20  extensions */.  
c8c0: 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f  void **aExtensio
c8d0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
c8e0: 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64   Array of shared
c8f0: 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73   library handles
c900: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72 61   */.  int (*xTra
c910: 63 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f  ce)(u32,void*,vo
c920: 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20  id*,void*);     
c930: 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f  /* Trace functio
c940: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72  n */.  void *pTr
c950: 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  aceArg;         
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c970: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c980: 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69  the trace functi
c990: 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  on */.#ifndef SQ
c9a0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
c9b0: 41 54 45 44 0a 20 20 76 6f 69 64 20 28 2a 78 50  ATED.  void (*xP
c9c0: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
c9d0: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
c9e0: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
c9f0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
ca00: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20   *pProfileArg;  
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
ca30: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
ca40: 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ction */.#endif.
ca50: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
ca60: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
ca70: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
ca80: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
ca90: 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ck() */.  int (*
caa0: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29  xCommitCallback)
cab0: 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49  (void*);    /* I
cac0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
cad0: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
cae0: 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  d *pRollbackArg;
caf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cb00: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52  * Argument to xR
cb10: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
cb20: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52  ) */.  void (*xR
cb30: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
cb40: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
cb50: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
cb60: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
cb70: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
cb80: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
cb90: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
cba0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
cbb0: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
cbc0: 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20 53  int64);.#ifdef S
cbd0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
cbe0: 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f  UPDATE_HOOK.  vo
cbf0: 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72  id *pPreUpdateAr
cc00: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  g;          /* F
cc10: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
cc20: 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62   xPreUpdateCallb
cc30: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ack */.  void (*
cc40: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
cc50: 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74  ck)(   /* Regist
cc60: 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ered using sqlit
cc70: 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f  e3_preupdate_hoo
cc80: 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a  k() */.    void*
cc90: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68  ,sqlite3*,int,ch
cca0: 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63  ar const*,char c
ccb0: 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e  onst*,sqlite3_in
ccc0: 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  t64,sqlite3_int6
ccd0: 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61  4.  );.  PreUpda
cce0: 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20  te *pPreUpdate; 
ccf0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
cd00: 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65  t for active pre
cd10: 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b  -update callback
cd20: 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   */.#endif /* SQ
cd30: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
cd40: 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69  PDATE_HOOK */.#i
cd50: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cd60: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
cd70: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
cd80: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
cd90: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
cda0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
cdb0: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
cdc0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
cdd0: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
cde0: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
cdf0: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
ce00: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
ce10: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
ce20: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
ce30: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
ce40: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
ce50: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
ce60: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
ce70: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
ce80: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
ce90: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
cea0: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73   volatile int is
ceb0: 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20  Interrupted; /* 
cec0: 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f  True if sqlite3_
ced0: 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65  interrupt has be
cee0: 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20  en called */.   
cef0: 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31   double notUsed1
cf00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
cf10: 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31  Spacer */.  } u1
cf20: 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f  ;.  Lookaside lo
cf30: 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
cf40: 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d    /* Lookaside m
cf50: 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74  alloc configurat
cf60: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
cf70: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
cf80: 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  RIZATION.  sqlit
cf90: 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20  e3_xauth xAuth; 
cfa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65           /* Acce
cfb0: 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  ss authorization
cfc0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
cfd0: 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20  oid *pAuthArg;  
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cff0: 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  1st argument to 
d000: 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20  the access auth 
d010: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  function */.#end
d020: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d030: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
d040: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28  CALLBACK.  int (
d050: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
d060: 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20   *);     /* The 
d070: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
d080: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  k */.  void *pPr
d090: 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20  ogressArg;      
d0a0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
d0b0: 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73   to the progress
d0c0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75   callback */.  u
d0d0: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
d0e0: 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  sOps;        /* 
d0f0: 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  Number of opcode
d100: 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63  s for progress c
d110: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
d120: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
d130: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
d140: 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  LE.  int nVTrans
d150: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d160: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
d170: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
d180: 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c  */.  Hash aModul
d190: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
d1a0: 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20     /* populated 
d1b0: 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  by sqlite3_creat
d1c0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
d1d0: 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74  VtabCtx *pVtabCt
d1e0: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
d1f0: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
d200: 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74  ive vtab connect
d210: 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61  /create */.  VTa
d220: 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20  ble **aVTrans;  
d230: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69             /* Vi
d240: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74  rtual tables wit
d250: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
d260: 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ons */.  VTable 
d270: 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20  *pDisconnect;   
d280: 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e         /* Discon
d290: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
d2a0: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
d2b0: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
d2c0: 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20   Hash aFunc;    
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d2e0: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
d2f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
d300: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
d310: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
d320: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
d330: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d340: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
d350: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
d360: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
d370: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
d380: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
d390: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
d3a0: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
d3b0: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
d3c0: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
d3d0: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
d3e0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
d3f0: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
d400: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
d410: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
d420: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
d430: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
d440: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
d450: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
d460: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d470: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
d480: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
d490: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
d4a0: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
d4b0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d4c0: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
d4d0: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
d4e0: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
d4f0: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
d500: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
d510: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
d520: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
d530: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
d540: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
d550: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d560: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
d570: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d580: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
d590: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
d5a0: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
d5b0: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
d5c0: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
d5d0: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
d5e0: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
d5f0: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
d600: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
d610: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
d620: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
d630: 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  STER.  ** mutex,
d640: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
d650: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
d660: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
d670: 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20  notify.c..  **. 
d680: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
d690: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
d6a0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
d6b0: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
d6c0: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
d6d0: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
d6e0: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
d6f0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
d700: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
d710: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
d720: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
d730: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
d740: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
d750: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
d760: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
d770: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
d780: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
d790: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
d7a0: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
d7b0: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
d7c0: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
d7d0: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
d7e0: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
d7f0: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
d800: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
d810: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
d820: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
d830: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
d840: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
d850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
d860: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
d870: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
d880: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
d890: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
d8a0: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
d8b0: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
d8c0: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
d8d0: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
d8e0: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
d8f0: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
d900: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
d910: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
d920: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
d930: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
d940: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
d950: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
d960: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
d970: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
d980: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
d990: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
d9a0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
d9b0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
d9c0: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45  #define SCHEMA_E
d9d0: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
d9e0: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
d9f0: 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  c).#define ENC(d
da00: 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d  b)        ((db)-
da10: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
da20: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
da30: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
da40: 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  gs..**.** Value 
da50: 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
da60: 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
da70: 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c  ()):.**      SQL
da80: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
da90: 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46    == PAGER_FULLF
daa0: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
dab0: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
dac0: 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f  c == PAGER_CKPT_
dad0: 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20  FULLFSYNC.**    
dae0: 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70    SQLITE_CacheSp
daf0: 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f  ill    == PAGER_
db00: 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23  CACHE_SPILL.*/.#
db10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
db20: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
db30: 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74  0000001  /* OK t
db40: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
db50: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
db60: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
db70: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30 30  ileFmt  0x000000
db80: 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  02  /* Create ne
db90: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
dba0: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
dbb0: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
dbc0: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
dbd0: 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  004  /* Show ful
dbe0: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
dbf0: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
dc00: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
dc10: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30  Sync      0x0000
dc20: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
dc30: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
dc40: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
dc50: 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  e SQLITE_CkptFul
dc60: 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30  lFSync  0x000000
dc70: 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  10  /* Use full 
dc80: 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70  fsync for checkp
dc90: 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oint */.#define 
dca0: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
dcb0: 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32 30  l     0x00000020
dcc0: 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c    /* OK to spill
dcd0: 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a   pager cache */.
dce0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
dcf0: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
dd00: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
dd10: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
dd20: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
dd30: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
dd40: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
dd50: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
dd60: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
dd70: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dda0: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
ddb0: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
ddc0: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddf0: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
de00: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
de10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
de20: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
de30: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
de40: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
de50: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
de60: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
de90: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
dea0: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
deb0: 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43  e SQLITE_IgnoreC
dec0: 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30 32  hecks   0x000002
ded0: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e  00  /* Do not en
dee0: 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73  force check cons
def0: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
df00: 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  ne SQLITE_ReadUn
df10: 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30  commit   0x00000
df20: 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43  400  /* READ UNC
df30: 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72  OMMITTED in shar
df40: 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  ed-cache */.#def
df50: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70  ine SQLITE_NoCkp
df60: 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30  tOnClose  0x0000
df70: 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63  0800  /* No chec
df80: 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28  kpoint on close(
df90: 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66  )/DETACH */.#def
dfa0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
dfb0: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 30  seOrder   0x0000
dfc0: 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  1000  /* Reverse
dfd0: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
dfe0: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
dff0: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
e000: 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20      0x00002000  
e010: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
e020: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
e030: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e040: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
e050: 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66  00004000  /* Enf
e060: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
e070: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
e080: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e090: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
e0a0: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e  x00008000  /* En
e0b0: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
e0c0: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
e0d0: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
e0e0: 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30  ension  0x000100
e0f0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
e100: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
e110: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
e120: 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30 78  oadExtFunc    0x
e130: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61  00020000  /* Ena
e140: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
e150: 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f  on() SQL func */
e160: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e170: 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30  EnableTrigger  0
e180: 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72  x00040000  /* Tr
e190: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69  ue to enable tri
e1a0: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
e1b0: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
e1c0: 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30 30         0x0008000
e1d0: 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20  0  /* Defer all 
e1e0: 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  FK constraints *
e1f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e200: 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20  _QueryOnly      
e210: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44  0x00100000  /* D
e220: 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20  isable database 
e230: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e240: 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69  ne SQLITE_CellSi
e250: 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30 30  zeCk     0x00200
e260: 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74  000  /* Check bt
e270: 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f  ree cell sizes o
e280: 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e  n load */.#defin
e290: 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b  e SQLITE_Fts3Tok
e2a0: 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30 30  enizer  0x004000
e2b0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74  00  /* Enable ft
e2c0: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20  s3_tokenizer(2) 
e2d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e2e0: 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20  E_EnableQPSG    
e2f0: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
e300: 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74  Query Planner St
e310: 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65  ability Guarante
e320: 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  e*/.#define SQLI
e330: 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20 20  TE_TriggerEQP   
e340: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
e350: 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45 58   Show trigger EX
e360: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e370: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e380: 54 45 5f 52 65 73 65 74 44 61 74 61 62 61 73 65  TE_ResetDatabase
e390: 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a    0x02000000  /*
e3a0: 20 52 65 73 65 74 20 74 68 65 20 64 61 74 61 62   Reset the datab
e3b0: 61 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ase */.#define S
e3c0: 51 4c 49 54 45 5f 4c 65 67 61 63 79 41 6c 74 65  QLITE_LegacyAlte
e3d0: 72 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20  r    0x04000000 
e3e0: 20 2f 2a 20 4c 65 67 61 63 79 20 41 4c 54 45 52   /* Legacy ALTER
e3f0: 20 54 41 42 4c 45 20 62 65 68 61 76 69 6f 75 72   TABLE behaviour
e400: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e410: 54 45 5f 4e 6f 53 63 68 65 6d 61 45 72 72 6f 72  TE_NoSchemaError
e420: 20 20 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a    0x08000000  /*
e430: 20 44 6f 20 6e 6f 74 20 72 65 70 6f 72 74 20 73   Do not report s
e440: 63 68 65 6d 61 20 70 61 72 73 65 20 65 72 72 6f  chema parse erro
e450: 72 73 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  rs*/.#define SQL
e460: 49 54 45 5f 44 65 66 65 6e 73 69 76 65 20 20 20  ITE_Defensive   
e470: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
e480: 2a 20 49 6e 70 75 74 20 53 51 4c 20 69 73 20 6c  * Input SQL is l
e490: 69 6b 65 6c 79 20 68 6f 73 74 69 6c 65 20 2a 2f  ikely hostile */
e4a0: 0a 0a 2f 2a 20 46 6c 61 67 73 20 75 73 65 64 20  ../* Flags used 
e4b0: 6f 6e 6c 79 20 69 66 20 64 65 62 75 67 67 69 6e  only if debuggin
e4c0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 49 28  g */.#define HI(
e4d0: 58 29 20 20 28 28 75 36 34 29 28 58 29 3c 3c 33  X)  ((u64)(X)<<3
e4e0: 32 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  2).#ifdef SQLITE
e4f0: 5f 44 45 42 55 47 0a 23 64 65 66 69 6e 65 20 53  _DEBUG.#define S
e500: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
e510: 20 20 20 20 20 48 49 28 30 78 30 30 30 31 29 20       HI(0x0001) 
e520: 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20   /* Debug print 
e530: 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74  SQL as it execut
e540: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e550: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
e560: 20 20 20 20 48 49 28 30 78 30 30 30 32 29 20 20      HI(0x0002)  
e570: 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67  /* Debug listing
e580: 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 73 20  s of VDBE progs 
e590: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e5a0: 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20  E_VdbeTrace     
e5b0: 20 48 49 28 30 78 30 30 30 34 29 20 20 2f 2a 20   HI(0x0004)  /* 
e5c0: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
e5d0: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
e5e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
e5f0: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 48 49  dbeAddopTrace HI
e600: 28 30 78 30 30 30 38 29 20 20 2f 2a 20 54 72 61  (0x0008)  /* Tra
e610: 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  ce sqlite3VdbeAd
e620: 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23  dOp() calls */.#
e630: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
e640: 62 65 45 51 50 20 20 20 20 20 20 20 20 48 49 28  beEQP        HI(
e650: 30 78 30 30 31 30 29 20 20 2f 2a 20 44 65 62 75  0x0010)  /* Debu
e660: 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  g EXPLAIN QUERY 
e670: 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  PLAN */.#define 
e680: 53 51 4c 49 54 45 5f 50 61 72 73 65 72 54 72 61  SQLITE_ParserTra
e690: 63 65 20 20 20 20 48 49 28 30 78 30 30 32 30 29  ce    HI(0x0020)
e6a0: 20 20 2f 2a 20 50 52 41 47 4d 41 20 70 61 72 73    /* PRAGMA pars
e6b0: 65 72 5f 74 72 61 63 65 3d 4f 4e 20 2a 2f 0a 23  er_trace=ON */.#
e6c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
e6d0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
e6e0: 73 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67 73  sqlite3.mDbFlags
e6f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c  .*/.#define DBFL
e700: 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 20  AG_SchemaChange 
e710: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 6e 63    0x0001  /* Unc
e720: 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61  ommitted Hash ta
e730: 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ble changes */.#
e740: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 50 72  define DBFLAG_Pr
e750: 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30  eferBuiltin  0x0
e760: 30 30 32 20 20 2f 2a 20 50 72 65 66 65 72 65 6e  002  /* Preferen
e770: 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66  ce to built-in f
e780: 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uncs */.#define 
e790: 44 42 46 4c 41 47 5f 56 61 63 75 75 6d 20 20 20  DBFLAG_Vacuum   
e7a0: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
e7b0: 20 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20   Currently in a 
e7c0: 56 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e  VACUUM */.#defin
e7d0: 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b  e DBFLAG_SchemaK
e7e0: 6e 6f 77 6e 4f 6b 20 20 30 78 30 30 30 38 20 20  nownOk  0x0008  
e7f0: 2f 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e 6f  /* Schema is kno
e800: 77 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20 2a  wn to be valid *
e810: 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66  /../*.** Bits of
e820: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f   the sqlite3.dbO
e830: 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68  ptFlags field th
e840: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74  at are used by t
e850: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  he.** sqlite3_te
e860: 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
e870: 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
e880: 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e  IZATIONS,...) in
e890: 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65  terface to.** se
e8a0: 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c  lectively disabl
e8b0: 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
e8c0: 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  zations..*/.#def
e8d0: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
e8e0: 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31  Flattener 0x0001
e8f0: 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74     /* Query flat
e900: 74 65 6e 69 6e 67 20 2a 2f 0a 20 20 20 20 20 20  tening */.      
e910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e920: 20 20 20 20 2f 2a 20 20 30 78 30 30 30 32 20 20      /*  0x0002  
e930: 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 72   available for r
e940: 65 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  euse */.#define 
e950: 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72  SQLITE_GroupByOr
e960: 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f  der   0x0004   /
e970: 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20  * GROUPBY cover 
e980: 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64  of ORDERBY */.#d
e990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63  efine SQLITE_Fac
e9a0: 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30  torOutConst 0x00
e9b0: 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  08   /* Constant
e9c0: 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64   factoring */.#d
e9d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73  efine SQLITE_Dis
e9e0: 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30  tinctOpt    0x00
e9f0: 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54  10   /* DISTINCT
ea00: 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a   using indexes *
ea10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ea20: 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20  _CoverIdxScan   
ea30: 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76 65  0x0020   /* Cove
ea40: 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73  ring index scans
ea50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ea60: 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69  TE_OrderByIdxJoi
ea70: 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f 52  n 0x0040   /* OR
ea80: 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20  DER BY of joins 
ea90: 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  via index */.#de
eaa0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e  fine SQLITE_Tran
eab0: 73 69 74 69 76 65 20 20 20 20 20 30 78 30 30 38  sitive     0x008
eac0: 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76  0   /* Transitiv
ead0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
eae0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eaf0: 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30  OmitNoopJoin   0
eb00: 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20  x0100   /* Omit 
eb10: 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e  unused tables in
eb20: 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   joins */.#defin
eb30: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f 66  e SQLITE_CountOf
eb40: 56 69 65 77 20 20 20 20 30 78 30 32 30 30 20 20  View    0x0200  
eb50: 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f 66   /* The count-of
eb60: 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74 69  -view optimizati
eb70: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
eb80: 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73  LITE_CursorHints
eb90: 20 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20      0x0400   /* 
eba0: 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e  Add OP_CursorHin
ebb0: 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65  t opcodes */.#de
ebc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74  fine SQLITE_Stat
ebd0: 33 34 20 20 20 20 20 20 20 20 20 30 78 30 38 30  34         0x080
ebe0: 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33  0   /* Use STAT3
ebf0: 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20 2a   or STAT4 data *
ec00: 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65 78 70 65  /.   /* TH3 expe
ec10: 63 74 73 20 74 68 65 20 53 74 61 74 33 34 20 20  cts the Stat34  
ec20: 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20 74 6f 20  ^^^^^^ value to 
ec30: 62 65 20 30 78 30 38 30 30 2e 20 20 44 6f 6e 27  be 0x0800.  Don'
ec40: 74 20 63 68 61 6e 67 65 20 69 74 20 2a 2f 0a 23  t change it */.#
ec50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 75  define SQLITE_Pu
ec60: 73 68 44 6f 77 6e 20 20 20 20 20 20 20 30 78 31  shDown       0x1
ec70: 30 30 30 20 20 20 2f 2a 20 54 68 65 20 70 75 73  000   /* The pus
ec80: 68 2d 64 6f 77 6e 20 6f 70 74 69 6d 69 7a 61 74  h-down optimizat
ec90: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
eca0: 51 4c 49 54 45 5f 53 69 6d 70 6c 69 66 79 4a 6f  QLITE_SimplifyJo
ecb0: 69 6e 20 20 20 30 78 32 30 30 30 20 20 20 2f 2a  in   0x2000   /*
ecc0: 20 43 6f 6e 76 65 72 74 20 4c 45 46 54 20 4a 4f   Convert LEFT JO
ecd0: 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f 0a 23 64  IN to JOIN */.#d
ece0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 6b 69  efine SQLITE_Ski
ecf0: 70 53 63 61 6e 20 20 20 20 20 20 20 30 78 34 30  pScan       0x40
ed00: 30 30 20 20 20 2f 2a 20 53 6b 69 70 2d 73 63 61  00   /* Skip-sca
ed10: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
ed20: 4c 49 54 45 5f 50 72 6f 70 61 67 61 74 65 43 6f  LITE_PropagateCo
ed30: 6e 73 74 20 30 78 38 30 30 30 20 20 20 2f 2a 20  nst 0x8000   /* 
ed40: 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 70 72 6f  The constant pro
ed50: 70 61 67 61 74 69 6f 6e 20 6f 70 74 20 2a 2f 0a  pagation opt */.
ed60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
ed70: 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78  llOpts        0x
ed80: 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70  ffff   /* All op
ed90: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a  timizations */..
eda0: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72  /*.** Macros for
edb0: 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72   testing whether
edc0: 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61   or not optimiza
edd0: 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65  tions are enable
ede0: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a  d or disabled..*
edf0: 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  /.#define Optimi
ee00: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
ee10: 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29  b, mask)  (((db)
ee20: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
ee30: 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  sk))!=0).#define
ee40: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61   OptimizationEna
ee50: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
ee60: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
ee70: 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a  ags&(mask))==0).
ee80: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
ee90: 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66  ue if it OK to f
eea0: 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65  actor constant e
eeb0: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20  xpressions into 
eec0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
eed0: 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20  on.** code. The 
eee0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61  argument is a Pa
eef0: 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74  rse object for t
ef00: 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
ef10: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f  r..*/.#define Co
ef20: 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28  nstFactorOk(P) (
ef30: 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74  (P)->okConstFact
ef40: 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  or)../*.** Possi
ef50: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
ef60: 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20  he sqlite.magic 
ef70: 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75  field..** The nu
ef80: 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e  mbers are obtain
ef90: 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  ed at random and
efa0: 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c   have no special
efb0: 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a   meaning, other.
efc0: 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69  ** than being di
efd0: 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20  stinct from one 
efe0: 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  another..*/.#def
eff0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f000: 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39  _OPEN     0xa029
f010: 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73  a697  /* Databas
f020: 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  e is open */.#de
f030: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
f040: 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33  C_CLOSED   0x9f3
f050: 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61  c2d33  /* Databa
f060: 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a  se is closed */.
f070: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
f080: 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78  AGIC_SICK     0x
f090: 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72  4b771290  /* Err
f0a0: 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20  or and awaiting 
f0b0: 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  close */.#define
f0c0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
f0d0: 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30  SY     0xf03b790
f0e0: 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63  6  /* Database c
f0f0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
f100: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f110: 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20  E_MAGIC_ERROR   
f120: 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20   0xb5357930  /* 
f130: 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  An SQLITE_MISUSE
f140: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
f150: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f160: 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20  E_MAGIC_ZOMBIE  
f170: 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20   0x64cffc7f  /* 
f180: 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20  Close with last 
f190: 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20  statement close 
f1a0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
f1b0: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64  QL function is d
f1c0: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
f1d0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
f1e0: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
f1f0: 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c  ure.  For global
f200: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69   built-in functi
f210: 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72 28  ons (ex: substr(
f220: 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28  ), max(), count(
f230: 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20  )).** a pointer 
f240: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
f250: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65  e is held in the
f260: 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46   sqlite3BuiltinF
f270: 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e  unctions object.
f280: 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e  .** For per-conn
f290: 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74 69  ection applicati
f2a0: 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  on-defined funct
f2b0: 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72 20  ions, a pointer 
f2c0: 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63  to this.** struc
f2d0: 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20  ture is held in 
f2e0: 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68 61  the db->aHash ha
f2f0: 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  sh table..**.** 
f300: 54 68 65 20 75 2e 70 48 61 73 68 20 66 69 65 6c  The u.pHash fiel
f310: 64 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  d is used by the
f320: 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e   global built-in
f330: 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74 72  s.  The u.pDestr
f340: 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69  uctor.** field i
f350: 73 20 75 73 65 64 20 62 79 20 70 65 72 2d 63 6f  s used by per-co
f360: 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65 66  nnection app-def
f370: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73   functions..*/.s
f380: 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a  truct FuncDef {.
f390: 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20 20    i8 nArg;      
f3a0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
f3b0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
f3c0: 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74  -1 means unlimit
f3d0: 65 64 20 2a 2f 0a 20 20 75 33 32 20 66 75 6e 63  ed */.  u32 func
f3e0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
f3f0: 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  Some combination
f400: 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   of SQLITE_FUNC_
f410: 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  * */.  void *pUs
f420: 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55  erData;     /* U
f430: 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74  ser data paramet
f440: 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20  er */.  FuncDef 
f450: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
f460: 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69  Next function wi
f470: 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a  th same name */.
f480: 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63 29    void (*xSFunc)
f490: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
f4a0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
f4b0: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20  lue**); /* func 
f4c0: 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20  or agg-step */. 
f4d0: 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a   void (*xFinaliz
f4e0: 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  e)(sqlite3_conte
f4f0: 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  xt*);           
f500: 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66 69         /* Agg fi
f510: 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76 6f 69  nalizer */.  voi
f520: 64 20 28 2a 78 56 61 6c 75 65 29 28 73 71 6c 69  d (*xValue)(sqli
f530: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
f540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f550: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 67     /* Current ag
f560: 67 20 76 61 6c 75 65 20 2a 2f 0a 20 20 76 6f 69  g value */.  voi
f570: 64 20 28 2a 78 49 6e 76 65 72 73 65 29 28 73 71  d (*xInverse)(sq
f580: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
f590: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
f5a0: 2a 2a 29 3b 20 2f 2a 20 69 6e 76 65 72 73 65 20  **); /* inverse 
f5b0: 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 63 6f  agg-step */.  co
f5c0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
f5d0: 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f     /* SQL name o
f5e0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  f the function. 
f5f0: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
f600: 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b   FuncDef *pHash;
f610: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
f620: 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e  th a different n
f630: 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65  ame but the same
f640: 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e   hash */.    Fun
f650: 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
f660: 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52  structor;   /* R
f670: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64  eference counted
f680: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
f690: 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d  tion */.  } u;.}
f6a0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
f6b0: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
f6c0: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
f6d0: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
f6e0: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
f6f0: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
f700: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
f710: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
f720: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
f730: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
f740: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
f750: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
f760: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
f770: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
f780: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
f790: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
f7a0: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
f7b0: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
f7c0: 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68   is set to.** th
f7d0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
f7e0: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
f7f0: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
f800: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
f810: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
f820: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
f830: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
f840: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
f850: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
f860: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
f870: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
f880: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
f890: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
f8a0: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
f8b0: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
f8c0: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
f8d0: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
f8e0: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
f8f0: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
f900: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
f910: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
f920: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
f930: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
f940: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
f950: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
f960: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
f970: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
f980: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
f990: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
f9a0: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
f9b0: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
f9c0: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
f9d0: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
f9e0: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
f9f0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
fa00: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
fa10: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
fa20: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
fa30: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
fa40: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
fa50: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
fa60: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
fa70: 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a  PEOFARG.  And.**
fa80: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fa90: 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68  STANT must be th
faa0: 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45  e same as SQLITE
fab0: 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20  _DETERMINISTIC. 
fac0: 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73   There.** are as
fad0: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
fae0: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f  s in the code to
faf0: 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a   verify this..**
fb00: 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
fb10: 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
fb20: 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
fb30: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
fb40: 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20  C_MINMAX    ==  
fb50: 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  NC_MinMaxAgg    
fb60: 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67    == SF_MinMaxAg
fb70: 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  g.**     SQLITE_
fb80: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d  FUNC_LENGTH    =
fb90: 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  =  OPFLAG_LENGTH
fba0: 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  ARG.**     SQLIT
fbb0: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
fbc0: 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45   ==  OPFLAG_TYPE
fbd0: 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c  OFARG.**     SQL
fbe0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fbf0: 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45  T  ==  SQLITE_DE
fc00: 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d  TERMINISTIC from
fc10: 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20   the API.**     
fc20: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
fc30: 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e  ASK   depends on
fc40: 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63   SQLITE_UTF* mac
fc50: 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a  ros in the API.*
fc60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fc70: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30  _FUNC_ENCMASK  0
fc80: 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f  x0003 /* SQLITE_
fc90: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46  UTF8, SQLITE_UTF
fca0: 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20  16BE or UTF16LE 
fcb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fcc0: 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20  E_FUNC_LIKE     
fcd0: 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64  0x0004 /* Candid
fce0: 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45  ate for the LIKE
fcf0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
fd00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fd10: 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78  FUNC_CASE     0x
fd20: 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0008 /* Case-sen
fd30: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
fd40: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
fd50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fd60: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30  _EPHEM    0x0010
fd70: 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20   /* Ephemeral.  
fd80: 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45  Delete with VDBE
fd90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fda0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
fdb0: 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74   0x0020 /* sqlit
fdc0: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
fdd0: 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  () might be call
fde0: 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ed*/.#define SQL
fdf0: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
fe00: 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c    0x0040 /* Buil
fe10: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
fe20: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
fe30: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
fe40: 50 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a  PEOF   0x0080 /*
fe50: 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66   Built-in typeof
fe60: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
fe70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
fe80: 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31  NC_COUNT    0x01
fe90: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  00 /* Built-in c
fea0: 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74  ount(*) aggregat
feb0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
fec0: 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43  ITE_FUNC_COALESC
fed0: 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c  E 0x0200 /* Buil
fee0: 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
fef0: 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23  or ifnull() */.#
ff00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ff10: 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34  NC_UNLIKELY 0x04
ff20: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75  00 /* Built-in u
ff30: 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69  nlikely() functi
ff40: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
ff50: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
ff60: 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e  NT 0x0800 /* Con
ff70: 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76  stant inputs giv
ff80: 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74  e a constant out
ff90: 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
ffa0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
ffb0: 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72  X   0x1000 /* Tr
ffc0: 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64  ue for min() and
ffd0: 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
ffe0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
fff0: 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
10000 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f    0x2000 /* "Slo
10010 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65  w Change". Value
10020 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67   constant during
10030 20 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   a.             
10040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10050 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65         ** single
10060 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63   query - might c
10070 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20  hange over time 
10080 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
10090 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20  E_FUNC_AFFINITY 
100a0 30 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x4000 /* Built-
100b0 69 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66 75  in affinity() fu
100c0 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
100d0 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f 46  e SQLITE_FUNC_OF
100e0 46 53 45 54 20 20 20 30 78 38 30 30 30 20 2f 2a  FSET   0x8000 /*
100f0 20 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65   Built-in sqlite
10100 5f 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69  _offset() functi
10110 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
10120 4c 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57  LITE_FUNC_WINDOW
10130 20 20 20 30 78 30 30 30 31 30 30 30 30 20 2f 2a     0x00010000 /*
10140 20 42 75 69 6c 74 2d 69 6e 20 77 69 6e 64 6f 77   Built-in window
10150 2d 6f 6e 6c 79 20 66 75 6e 63 74 69 6f 6e 20 2a  -only function *
10160 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10170 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 5f 53 49 5a  _FUNC_WINDOW_SIZ
10180 45 20 30 78 32 30 30 30 30 20 2f 2a 20 52 65 71  E 0x20000 /* Req
10190 75 69 72 65 73 20 70 61 72 74 69 74 69 6f 6e 20  uires partition 
101a0 73 69 7a 65 20 61 73 20 61 72 67 2e 20 2a 2f 0a  size as arg. */.
101b0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
101c0 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30  UNC_INTERNAL 0x0
101d0 30 30 34 30 30 30 30 20 2f 2a 20 46 6f 72 20 75  0040000 /* For u
101e0 73 65 20 62 79 20 4e 65 73 74 65 64 50 61 72 73  se by NestedPars
101f0 65 28 29 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 0a  e() only */../*.
10200 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
10210 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46   three macros, F
10220 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46  UNCTION(), LIKEF
10230 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47  UNC() and AGGREG
10240 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65  ATE() are.** use
10250 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20  d to create the 
10260 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72  initializers for
10270 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72   the FuncDef str
10280 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20  uctures..**.**  
10290 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
102a0 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
102b0 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
102c0 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
102d0 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
102e0 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
102f0 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a   function zName.
10300 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74  **     implement
10310 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e  ed by C function
10320 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65   xFunc that acce
10330 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
10340 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76  ts. The.**     v
10350 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69  alue passed as i
10360 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
10370 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64   (void*) and mad
10380 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20  e available.**  
10390 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64     as the user-d
103a0 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
103b0 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68  r_data()) for th
103c0 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a  e function. If.*
103d0 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62  *     argument b
103e0 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  NC is true, then
103f0 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
10400 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69  _NEEDCOLL flag i
10410 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56  s set..**.**   V
10420 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10430 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
10440 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
10450 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
10460 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
10470 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
10480 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  STANT flag..**.*
10490 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e  *   DFUNCTION(zN
104a0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
104b0 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
104c0 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f      Like FUNCTIO
104d0 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74  N except it omit
104e0 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  s the SQLITE_FUN
104f0 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20  C_CONSTANT flag 
10500 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20  and.**     adds 
10510 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
10520 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55  SLOCHNG flag.  U
10530 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20 74  sed for date & t
10540 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ime functions.**
10550 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f       and functio
10560 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76  ns like sqlite_v
10570 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61  ersion() that ca
10580 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f  n change, but no
10590 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20  t during.**     
105a0 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 20  a single query. 
105b0 20 54 68 65 20 69 41 72 67 20 69 73 20 69 67 6e   The iArg is ign
105c0 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65 72 2d  ored.  The user-
105d0 64 61 74 61 20 69 73 20 61 6c 77 61 79 73 20 73  data is always s
105e0 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20 4e  et.**     to a N
105f0 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68  ULL pointer.  Th
10600 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20  e bNC parameter 
10610 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
10620 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45 28 7a  **   PURE_DATE(z
10630 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10640 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
10650 20 20 20 20 20 55 73 65 64 20 66 6f 72 20 22 70       Used for "p
10660 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65 20 66  ure" date/time f
10670 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73 20 6d  unctions, this m
10680 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44 46 55  acro is like DFU
10690 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65 78  NCTION.**     ex
106a0 63 65 70 74 20 74 68 61 74 20 69 74 20 64 6f 65  cept that it doe
106b0 73 20 73 65 74 20 74 68 65 20 53 51 4c 49 54 45  s set the SQLITE
106c0 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
106d0 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73 0a 2a  lags.  iArg is.*
106e0 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20 61 6e  *     ignored an
106f0 64 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20  d the user-data 
10700 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63 74 69  for these functi
10710 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20 61 6e  ons is set to an
10720 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74 72 61   .**     arbitra
10730 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e  ry non-NULL poin
10740 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61  ter.  The bNC pa
10750 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75  rameter is not u
10760 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47  sed..**.**   AGG
10770 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
10780 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10790 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a  Step, xFinal).**
107a0 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
107b0 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65  ate an aggregate
107c0 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
107d0 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
107e0 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43   by.**     the C
107f0 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70   functions xStep
10800 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65   and xFinal. The
10810 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61   first four para
10820 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72  meters.**     ar
10830 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e  e interpreted in
10840 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
10850 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72   the first 4 par
10860 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20  ameters to.**   
10870 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a    FUNCTION()..**
10880 0a 2a 2a 20 20 20 57 46 55 4e 43 54 49 4f 4e 28  .**   WFUNCTION(
10890 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
108a0 67 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  g, xStep, xFinal
108b0 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65 72  , xValue, xInver
108c0 73 65 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  se).**     Used 
108d0 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
108e0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
108f0 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
10900 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
10910 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
10920 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
10930 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
10940 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
10950 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
10960 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
10970 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
10980 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
10990 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
109a0 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45  ()..**.**   LIKE
109b0 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
109c0 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a  , pArg, flags).*
109d0 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
109e0 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
109f0 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
10a00 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
10a10 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61  zName.**     tha
10a20 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
10a30 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
10a40 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
10a50 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20   call to C.**   
10a60 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46    function likeF
10a70 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41  unc. Argument pA
10a80 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
10a90 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64  (void *) and mad
10aa0 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62  e.**     availab
10ab0 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69  le as the functi
10ac0 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  on user-data (sq
10ad0 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
10ae0 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46  )). The.**     F
10af0 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72  uncDef.flags var
10b00 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
10b10 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64  the value passed
10b20 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a   as the flags.**
10b30 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a       parameter..
10b40 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54  */.#define FUNCT
10b50 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
10b60 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
10b70 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
10b80 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
10b90 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NT|SQLITE_UTF8|(
10ba0 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
10bb0 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
10bc0 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
10bd0 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
10be0 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
10bf0 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
10c00 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e VFUNCTION(zNam
10c10 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
10c20 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
10c30 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
10c40 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
10c50 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
10c60 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
10c70 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
10c80 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
10c90 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
10ca0 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a  fine DFUNCTION(z
10cb0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10cc0 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
10cd0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10ce0 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
10cf0 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20 30  ITE_UTF8, \.   0
10d00 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10d10 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10d20 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52 45 5f   }.#define PURE_
10d30 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  DATE(zName, nArg
10d40 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10d50 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10d60 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10d70 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 53  NG|SQLITE_UTF8|S
10d80 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
10d90 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64 2a  ANT, \.   (void*
10da0 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c  )&sqlite3Config,
10db0 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
10dc0 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
10dd0 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  }.#define FUNCTI
10de0 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ON2(zName, nArg,
10df0 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
10e00 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  c, extraFlags) \
10e10 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f  .  {nArg,SQLITE_
10e20 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
10e30 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
10e40 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
10e50 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
10e60 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
10e70 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
10e80 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c   xFunc, 0, 0, 0,
10e90 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
10ea0 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54  define STR_FUNCT
10eb0 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
10ec0 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   pArg, bNC, xFun
10ed0 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
10ee0 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
10ef0 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  G|SQLITE_UTF8|(b
10f00 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
10f10 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70  EEDCOLL), \.   p
10f20 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  Arg, 0, xFunc, 0
10f30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10f40 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55  }.#define LIKEFU
10f50 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
10f60 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20  arg, flags) \.  
10f70 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10f80 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
10f90 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c  TE_UTF8|flags, \
10fa0 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  .   (void *)arg,
10fb0 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
10fc0 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b   0, 0, #zName, {
10fd0 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  0} }.#define AGG
10fe0 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
10ff0 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
11000 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c  ep, xFinal, xVal
11010 75 65 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  ue) \.  {nArg, S
11020 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
11030 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
11040 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
11050 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
11060 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  ), 0, xStep,xFin
11070 61 6c 2c 78 56 61 6c 75 65 2c 30 2c 23 7a 4e 61  al,xValue,0,#zNa
11080 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65  me, {0}}.#define
11090 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d   AGGREGATE2(zNam
110a0 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
110b0 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c  , xStep, xFinal,
110c0 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
110d0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
110e0 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
110f0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
11100 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53  traFlags, \.   S
11110 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
11120 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
11130 78 46 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30 2c  xFinal,xFinal,0,
11140 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65  #zName, {0}}.#de
11150 66 69 6e 65 20 57 41 47 47 52 45 47 41 54 45 28  fine WAGGREGATE(
11160 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
11170 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
11180 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e  nal, xValue, xIn
11190 76 65 72 73 65 2c 20 66 29 20 5c 0a 20 20 7b 6e  verse, f) \.  {n
111a0 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
111b0 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
111c0 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66 2c 20 5c 0a  _NEEDCOLL)|f, \.
111d0 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
111e0 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53  _PTR(arg), 0, xS
111f0 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75  tep,xFinal,xValu
11200 65 2c 78 49 6e 76 65 72 73 65 2c 23 7a 4e 61 6d  e,xInverse,#zNam
11210 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20  e, {0}}.#define 
11220 49 4e 54 45 52 4e 41 4c 5f 46 55 4e 43 54 49 4f  INTERNAL_FUNCTIO
11230 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 78  N(zName, nArg, x
11240 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
11250 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e 54   SQLITE_FUNC_INT
11260 45 52 4e 41 4c 7c 53 51 4c 49 54 45 5f 55 54 46  ERNAL|SQLITE_UTF
11270 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  8|SQLITE_FUNC_CO
11280 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 30 2c 20  NSTANT, \.   0, 
11290 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
112a0 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
112b0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72  .../*.** All cur
112c0 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20  rent savepoints 
112d0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
112e0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
112f0 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74  ting at.** sqlit
11300 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54  e3.pSavepoint. T
11310 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
11320 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20   in the list is 
11330 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c  the most recentl
11340 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65  y.** opened save
11350 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74  point. Savepoint
11360 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74  s are added to t
11370 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76  he list by the v
11380 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f  dbe.** OP_Savepo
11390 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
113a0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70  .*/.struct Savep
113b0 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a  oint {.  char *z
113c0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
113e0 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28  Savepoint name (
113f0 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20  nul-terminated) 
11400 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
11410 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
11420 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11430 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66  er of deferred f
11440 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a  k violations */.
11450 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
11460 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
11470 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11480 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20  of deferred imm 
11490 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  fk. */.  Savepoi
114a0 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  nt *pNext;      
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
114c0 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  Parent savepoint
114d0 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a   (if any) */.};.
114e0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
114f0 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73  wing are used as
11500 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
11510 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
11520 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20  Savepoint(),.** 
11530 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72  and as the P1 ar
11540 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50  gument to the OP
11550 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
11560 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  uction..*/.#defi
11570 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  ne SAVEPOINT_BEG
11580 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e  IN      0.#defin
11590 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  e SAVEPOINT_RELE
115a0 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65  ASE    1.#define
115b0 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42   SAVEPOINT_ROLLB
115c0 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20  ACK   2.../*.** 
115d0 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75  Each SQLite modu
115e0 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c  le (virtual tabl
115f0 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73  e definition) is
11600 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a   defined by an.*
11610 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
11620 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11630 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e  cture, stored in
11640 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f   the sqlite3.aMo
11650 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62  dule.** hash tab
11660 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f  le..*/.struct Mo
11670 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73  dule {.  const s
11680 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
11690 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a  Module;       /*
116a0 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65   Callback pointe
116b0 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  rs */.  const ch
116c0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
116e0 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63  Name passed to c
116f0 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
11700 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11720 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
11730 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
11740 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
11750 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
11760 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
11770 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
11780 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
11790 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  on */.  Table *p
117a0 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20  EpoTab;         
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
117c0 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20  Eponymous table 
117d0 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20  for this module 
117e0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
117f0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
11800 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
11810 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
11820 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
11830 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
11840 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
11850 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
11860 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
11870 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
11880 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e  lumn, \000, then
11890 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45   the type */.  E
118a0 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20  xpr *pDflt;     
118b0 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65  /* Default value
118c0 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
118d0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
118e0 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
118f0 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
11900 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
11910 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
11920 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
11930 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20  An OE_ code for 
11940 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e  handling a NOT N
11950 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
11960 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
11970 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
11980 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
11990 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  . values */.  u8
119a0 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f   szEst;        /
119b0 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
119c0 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69   of value in thi
119d0 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66  s column. sizeof
119e0 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38  (INT)==1 */.  u8
119f0 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f   colFlags;     /
11a00 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  * Boolean proper
11a10 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c  ties.  See COLFL
11a20 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f  AG_ defines belo
11a30 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  w */.};../* Allo
11a40 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43  wed values for C
11a50 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a  olumn.colFlags:.
11a60 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11a70 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30  AG_PRIMKEY  0x00
11a80 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  01    /* Column 
11a90 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  is part of the p
11aa0 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
11ab0 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49  efine COLFLAG_HI
11ac0 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20  DDEN   0x0002   
11ad0 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c   /* A hidden col
11ae0 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c  umn in a virtual
11af0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
11b00 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50  e COLFLAG_HASTYP
11b10 45 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20  E  0x0004    /* 
11b20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77  Type name follow
11b30 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f  s column name */
11b40 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
11b50 5f 55 4e 49 51 55 45 20 20 20 30 78 30 30 30 38  _UNIQUE   0x0008
11b60 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 64 65      /* Column de
11b70 66 20 63 6f 6e 74 61 69 6e 73 20 22 55 4e 49 51  f contains "UNIQ
11b80 55 45 22 20 6f 72 20 22 50 4b 22 20 2a 2f 0a 23  UE" or "PK" */.#
11b90 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 53  define COLFLAG_S
11ba0 4f 52 54 45 52 52 45 46 20 30 78 30 30 31 30 20  ORTERREF 0x0010 
11bb0 20 20 2f 2a 20 55 73 65 20 73 6f 72 74 65 72 2d    /* Use sorter-
11bc0 72 65 66 73 20 77 69 74 68 20 74 68 69 73 20 63  refs with this c
11bd0 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  olumn */../*.** 
11be0 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71  A "Collating Seq
11bf0 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65  uence" is define
11c00 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
11c10 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
11c20 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
11c30 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20  Conceptually, a 
11c40 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11c50 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ce consists of a
11c60 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63   name and.** a c
11c70 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e  omparison routin
11c80 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
11c90 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74  he order of that
11ca0 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a   sequence..**.**
11cb0 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70   If CollSeq.xCmp
11cc0 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61   is NULL, it mea
11cd0 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
11ce0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11cf0 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
11d00 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
11d10 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
11d20 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
11d30 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
11d40 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
11d50 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
11d60 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
11d70 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
11d80 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c  Name of the coll
11d90 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
11da0 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
11db0 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
11dc0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
11dd0 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65   encoding handle
11de0 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20  d by xCmp() */. 
11df0 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20   void *pUser;   
11e00 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
11e10 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70  argument to xCmp
11e20 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
11e30 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  mp)(void*,int, c
11e40 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
11e50 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20   const void*);. 
11e60 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
11e70 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75  id*);  /* Destru
11e80 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a  ctor for pUser *
11e90 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  /.};../*.** A so
11ea0 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
11eb0 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
11ec0 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
11ed0 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
11ee0 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
11ef0 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
11f00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
11f10 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
11f20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
11f30 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
11f40 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
11f50 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31 20  SO_UNDEFINED -1 
11f60 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72  /* No sort order
11f70 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f   specified */../
11f80 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69  *.** Column affi
11f90 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a  nity types..**.*
11fa0 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20  * These used to 
11fb0 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61  have mnemonic na
11fc0 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20  me like 'i' for 
11fd0 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
11fe0 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f  ER and.** 't' fo
11ff0 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  r SQLITE_AFF_TEX
12000 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73  T.  But we can s
12010 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61  ave a little spa
12020 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a  ce and improve.*
12030 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69  * the speed a li
12040 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e  ttle by numberin
12050 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e  g the values con
12060 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a  secutively..**.*
12070 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
12080 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
12090 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
120a0 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61  th 'A'.  That wa
120b0 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
120c0 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
120d0 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
120e0 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
120f0 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
12100 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
12110 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
12120 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
12130 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
12140 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
12150 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
12160 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
12170 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
12180 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
12190 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
121a0 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20  rison.  And the 
121b0 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69 72  BLOB type is fir
121c0 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  st..*/.#define S
121d0 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20  QLITE_AFF_BLOB  
121e0 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53     'A'.#define S
121f0 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20  QLITE_AFF_TEXT  
12200 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53     'B'.#define S
12210 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
12220 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53  C  'C'.#define S
12230 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
12240 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53  R  'D'.#define S
12250 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20  QLITE_AFF_REAL  
12260 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20     'E'..#define 
12270 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63  sqlite3IsNumeric
12280 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58  Affinity(X)  ((X
12290 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  )>=SQLITE_AFF_NU
122a0 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  MERIC)../*.** Th
122b0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
122c0 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f  K values masks o
122d0 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61  ff the significa
122e0 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a  nt bits of an.**
122f0 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e   affinity value.
12300 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
12310 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20  TE_AFF_MASK     
12320 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69  0x47../*.** Addi
12330 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65  tional bit value
12340 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52  s that can be OR
12350 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e  ed with an affin
12360 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63  ity without.** c
12370 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69  hanging the affi
12380 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  nity..**.** The 
12390 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66  SQLITE_NOTNULL f
123a0 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61  lag is a combina
123b0 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61  tion of NULLEQ a
123c0 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a  nd JUMPIFNULL..*
123d0 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61  * It causes an a
123e0 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20  ssert() to fire 
123f0 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
12400 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f  d to a compariso
12410 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73  n.** operator is
12420 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64   NULL.  It is ad
12430 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63  ded to certain c
12440 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
12450 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20  ors to.** prove 
12460 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64  that the operand
12470 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54  s are always NOT
12480 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e   NULL..*/.#defin
12490 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c  e SQLITE_KEEPNUL
124a0 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 55  L     0x08  /* U
124b0 73 65 64 20 62 79 20 76 65 63 74 6f 72 20 3d 3d  sed by vector ==
124c0 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e   or <> */.#defin
124d0 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
124e0 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a  ULL   0x10  /* j
124f0 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f  umps if either o
12500 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a  perand is NULL *
12510 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12520 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78  _STOREP2      0x
12530 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  20  /* Store res
12540 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72  ult in reg[P2] r
12550 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20  ather than jump 
12560 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12570 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30  E_NULLEQ       0
12580 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c  x80  /* NULL=NUL
12590 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
125a0 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20  ITE_NOTNULL     
125b0 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74   0x90  /* Assert
125c0 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61   that operands a
125d0 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f  re never NULL */
125e0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
125f0 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
12600 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
12610 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ch virtual table
12620 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74   present in.** t
12630 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
12640 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ma..**.** If the
12650 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
12660 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e   is shared, then
12670 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e   there is one in
12680 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a  stance of this.*
12690 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  * structure for 
126a0 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
126b0 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65  nnection (sqlite
126c0 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68  3*) that uses th
126d0 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65  e shared.** sche
126e0 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ma. This is beca
126f0 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73  use each databas
12700 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71  e connection req
12710 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e  uires its own un
12720 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  ique.** instance
12730 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
12740 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65  vtab* handle use
12750 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
12760 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a  virtual table.**
12770 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
12780 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
12790 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
127a0 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
127b0 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
127c0 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
127d0 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
127e0 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
127f0 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61  tabase.** schema
12800 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74   is shared, as t
12810 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
12820 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74  n often stores t
12830 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
12840 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
12850 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69   passed to it vi
12860 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29  a the xConnect()
12870 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65   or xCreate() me
12880 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69  thod.** during i
12890 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
128a0 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64  ternally. This d
128b0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
128c0 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a  on handle may.**
128d0 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79   then be used by
128e0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
128f0 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
12900 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c  n to access real
12910 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69   tables.** withi
12920 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
12930 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
12940 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
12950 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72  he callers.** tr
12960 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
12970 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
12980 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
12990 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 0a  e same database.
129a0 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  ** connection as
129b0 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65 78   that used to ex
129c0 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74  ecute SQL operat
129d0 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74  ions on the virt
129e0 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ual table..**.**
129f0 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65   All VTable obje
12a00 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73 70  cts that corresp
12a10 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  ond to a single 
12a20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65  table in a share
12a30 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63  d.** database sc
12a40 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c  hema are initial
12a50 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  ly stored in a l
12a60 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74  inked-list point
12a70 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20  ed to by.** the 
12a80 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65  Table.pVTable me
12a90 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66  mber variable of
12aa0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
12ab0 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e  ng Table object.
12ac0 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69  .** When an sqli
12ad0 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70  te3_prepare() op
12ae0 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69  eration is requi
12af0 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  red to access th
12b00 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  e virtual.** tab
12b10 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73 20  le, it searches 
12b20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65  the list for the
12b30 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72   VTable that cor
12b40 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a  responds to the.
12b50 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
12b60 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65  ection doing the
12b70 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73   preparing so as
12b80 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72   to use the corr
12b90 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76  ect.** sqlite3_v
12ba0 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74  tab* handle in t
12bb0 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
12bc0 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e  y..**.** When an
12bd0 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65   in-memory Table
12be0 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74   object is delet
12bf0 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20  ed (for example 
12c00 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65  when the.** sche
12c10 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f  ma is being relo
12c20 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65  aded for some re
12c30 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c  ason), the VTabl
12c40 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f  e objects are no
12c50 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64  t.** deleted and
12c60 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
12c70 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e  b* handles are n
12c80 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29  ot xDisconnect()
12c90 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ed.** immediatel
12ca0 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
12cb0 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
12cc0 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
12cd0 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
12ce0 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
12cf0 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
12d00 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
12d10 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
12d20 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
12d30 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
12d40 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
12d50 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
12d60 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74  onnected.** next
12d70 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e   time a statemen
12d80 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73  t is prepared us
12d90 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33  ing said sqlite3
12da0 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a  *. This is done.
12db0 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64  ** to avoid dead
12dc0 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f  lock issues invo
12dd0 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73  lving multiple s
12de0 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
12df0 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74  exes..** Refer t
12e00 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65  o comments above
12e10 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   function sqlite
12e20 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
12e30 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c  ) for an.** expl
12e40 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68  anation as to wh
12e50 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20  y it is safe to 
12e60 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20  add an entry to 
12e70 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  an sqlite3.pDisc
12e80 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77  onnect.** list w
12e90 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74  ithout holding t
12ea0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
12eb0 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
12ec0 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  utex..**.** The 
12ed0 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63  memory for objec
12ee0 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ts of this type 
12ef0 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61  is always alloca
12f00 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  ted by.** sqlite
12f10 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69  3DbMalloc(), usi
12f20 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
12f30 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20  n handle stored 
12f40 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 0a  in VTable.db as.
12f50 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67  ** the first arg
12f60 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ument..*/.struct
12f70 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69   VTable {.  sqli
12f80 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
12f90 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
12fa0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73  e connection ass
12fb0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
12fc0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64  s table */.  Mod
12fd0 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20  ule *pMod;      
12fe0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
12ff0 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c  r to module impl
13000 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
13010 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
13020 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69  tab;      /* Poi
13030 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73  nter to vtab ins
13040 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  tance */.  int n
13050 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
13060 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13070 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
13080 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  is structure */.
13090 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74    u8 bConstraint
130a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
130b0 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
130c0 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ts are supported
130d0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70   */.  int iSavep
130e0 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
130f0 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20  /* Depth of the 
13100 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20  SAVEPOINT stack 
13110 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65  */.  VTable *pNe
13120 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
13130 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64  * Next in linked
13140 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65   list (see above
13150 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
13160 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61  he schema for ea
13170 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e 64  ch SQL table and
13180 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73 65   view is represe
13190 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
131a0 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  * by an instance
131b0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
131c0 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
131d0 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
131e0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
131f0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
13200 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
13210 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a  ew */.  Column *
13220 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  aCol;        /* 
13230 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
13240 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  t each column */
13250 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78  .  Index *pIndex
13260 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  ;       /* List 
13270 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
13280 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
13290 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
132a0 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
132b0 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
132c0 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
132d0 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
132e0 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
132f0 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
13300 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
13310 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
13320 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
13330 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
13340 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
13350 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
13360 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
13370 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
13380 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c  pCheck;    /* Al
13390 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  l CHECK constrai
133a0 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nts */.         
133b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
133c0 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64     ... also used
133d0 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20   as column name 
133e0 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57 20 2a  list in a VIEW *
133f0 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
13400 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
13410 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72 20   BTree page for 
13420 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
13430 75 33 32 20 6e 54 61 62 52 65 66 3b 20 20 20 20  u32 nTabRef;    
13440 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13450 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
13460 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75 33  is Table */.  u3
13470 32 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20  2 tabFlags;     
13480 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46     /* Mask of TF
13490 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
134a0 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20  16 iPKey;       
134b0 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65      /* If not ne
134c0 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c  gative, use aCol
134d0 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72  [iPKey] as the r
134e0 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43  owid */.  i16 nC
134f0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
13500 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
13510 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
13520 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52  e */.  LogEst nR
13530 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45  owLogEst;   /* E
13540 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e  stimated rows in
13550 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71   table - from sq
13560 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
13570 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54   */.  LogEst szT
13580 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  abRow;     /* Es
13590 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
135a0 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69  each table row i
135b0 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65  n bytes */.#ifde
135c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
135d0 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73  COSTMULT.  LogEs
135e0 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20  t costMult;     
135f0 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69  /* Cost multipli
13600 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69  er for using thi
13610 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  s table */.#endi
13620 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20  f.  u8 keyConf; 
13630 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74           /* What
13640 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f   to do in case o
13650 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  f uniqueness con
13660 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a  flict on iPKey *
13670 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
13680 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
13690 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66  .  int addColOff
136a0 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65  set;    /* Offse
136b0 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c  t in CREATE TABL
136c0 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20  E stmt to add a 
136d0 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65  new column */.#e
136e0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
136f0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
13700 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64  TABLE.  int nMod
13710 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20  uleArg;      /* 
13720 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
13730 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  nts to the modul
13740 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
13750 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30  ModuleArg;  /* 0
13760 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68 65  : module 1: sche
13770 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65 20  ma 2: vtab name 
13780 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20  3...: args */.  
13790 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b  VTable *pVTable;
137a0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
137b0 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20  VTable objects. 
137c0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67  */.#endif.  Trig
137d0 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
137e0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67   /* List of trig
137f0 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70  gers stored in p
13800 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65  Schema */.  Sche
13810 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
13820 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20   /* Schema that 
13830 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61  contains this ta
13840 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ble */.  Table *
13850 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a  pNextZombie;  /*
13860 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72   Next on the Par
13870 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69  se.pZombieTab li
13880 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
13890 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
138a0 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67  or Table.tabFlag
138b0 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48  s..**.** TF_OOOH
138c0 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f  idden applies to
138d0 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77 20   tables or view 
138e0 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65 6e  that have hidden
138f0 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72   columns that ar
13900 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79  e.** followed by
13910 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
13920 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20  mns.  Example:  
13930 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  "CREATE VIRTUAL 
13940 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a  TABLE x USING.**
13950 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c   vtab1(a HIDDEN,
13960 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62   b);".  Since "b
13970 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65  " is a non-hidde
13980 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22  n column but "a"
13990 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74   is hidden,.** t
139a0 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  he TF_OOOHidden 
139b0 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20  attribute would 
139c0 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61  apply in this ca
139d0 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73  se.  Such tables
139e0 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63   require.** spec
139f0 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72  ial handling dur
13a00 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65  ing INSERT proce
13a10 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ssing..*/.#defin
13a20 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20  e TF_Readonly   
13a30 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
13a40 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74  * Read-only syst
13a50 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  em table */.#def
13a60 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c  ine TF_Ephemeral
13a70 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20 20         0x0002   
13a80 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c   /* An ephemeral
13a90 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
13aa0 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b  e TF_HasPrimaryK
13ab0 65 79 20 20 20 30 78 30 30 30 34 20 20 20 20 2f  ey   0x0004    /
13ac0 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72  * Table has a pr
13ad0 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
13ae0 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72  fine TF_Autoincr
13af0 65 6d 65 6e 74 20 20 20 30 78 30 30 30 38 20 20  ement   0x0008  
13b00 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69    /* Integer pri
13b10 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f  mary key is auto
13b20 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65  increment */.#de
13b30 66 69 6e 65 20 54 46 5f 48 61 73 53 74 61 74 31  fine TF_HasStat1
13b40 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20          0x0010  
13b50 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73 74 20    /* nRowLogEst 
13b60 73 65 74 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  set from sqlite_
13b70 73 74 61 74 31 20 2a 2f 0a 23 64 65 66 69 6e 65  stat1 */.#define
13b80 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
13b90 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a      0x0020    /*
13ba0 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d   No rowid.  PRIM
13bb0 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b  ARY KEY is the k
13bc0 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
13bd0 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20  _NoVisibleRowid 
13be0 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 4e 6f   0x0040    /* No
13bf0 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72   user-visible "r
13c00 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  owid" column */.
13c10 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69  #define TF_OOOHi
13c20 64 64 65 6e 20 20 20 20 20 20 20 30 78 30 30 38  dden       0x008
13c30 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f  0    /* Out-of-O
13c40 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75  rder hidden colu
13c50 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  mns */.#define T
13c60 46 5f 53 74 61 74 73 55 73 65 64 20 20 20 20 20  F_StatsUsed     
13c70 20 20 30 78 30 31 30 30 20 20 20 20 2f 2a 20 51    0x0100    /* Q
13c80 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 64 65 63  uery planner dec
13c90 69 73 69 6f 6e 73 20 61 66 66 65 63 74 65 64 20  isions affected 
13ca0 62 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  by.             
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cc0 20 20 20 20 20 20 20 20 2a 2a 20 49 6e 64 65 78          ** Index
13cd0 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 5d 20 76  .aiRowLogEst[] v
13ce0 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  alues */.#define
13cf0 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20 20   TF_HasNotNull  
13d00 20 20 20 20 30 78 30 32 30 30 20 20 20 20 2f 2a      0x0200    /*
13d10 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54 20 4e 55   Contains NOT NU
13d20 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  LL constraints *
13d30 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53 68 61  /.#define TF_Sha
13d40 64 6f 77 20 20 20 20 20 20 20 20 20 20 30 78 30  dow          0x0
13d50 34 30 30 20 20 20 20 2f 2a 20 54 72 75 65 20 66  400    /* True f
13d60 6f 72 20 61 20 73 68 61 64 6f 77 20 74 61 62 6c  or a shadow tabl
13d70 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74  e */../*.** Test
13d80 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20   to see whether 
13d90 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69  or not a table i
13da0 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
13db0 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64  e.  This is.** d
13dc0 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73  one as a macro s
13dd0 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62  o that it will b
13de0 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20  e optimized out 
13df0 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20  when virtual.** 
13e00 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73  table support is
13e10 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
13e20 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e  e build..*/.#ifn
13e30 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13e40 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
13e50 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
13e60 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6e  (X)      ((X)->n
13e70 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73 65  ModuleArg).#else
13e80 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
13e90 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23  tual(X)      0.#
13ea0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
13eb0 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
13ec0 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   if a column is 
13ed0 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e  hidden.  IsOrdin
13ee0 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
13ef0 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ).** only works 
13f00 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20  for non-virtual 
13f10 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79  tables (ordinary
13f20 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77   tables and view
13f30 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77  s) and is.** alw
13f40 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73  ays false unless
13f50 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48   SQLITE_ENABLE_H
13f60 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73  IDDEN_COLUMNS is
13f70 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a   defined.  The.*
13f80 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  * IsHiddenColumn
13f90 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65  () macro is gene
13fa0 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a  ral purpose..*/.
13fb0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
13fc0 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
13fd0 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66  _COLUMNS).#  def
13fe0 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
13ff0 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28  mn(X)         ((
14000 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
14010 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
14020 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
14030 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
14040 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63  lumn(X) (((X)->c
14050 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
14060 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65  G_HIDDEN)!=0).#e
14070 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  lif !defined(SQL
14080 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
14090 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65  TABLE).#  define
140a0 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
140b0 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29  X)         (((X)
140c0 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
140d0 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
140e0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
140f0 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
14100 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20  n(X) 0.#else.#  
14110 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
14120 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
14130 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f   0.#  define IsO
14140 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
14150 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  umn(X) 0.#endif.
14160 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61  ../* Does the ta
14170 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64  ble have a rowid
14180 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52   */.#define HasR
14190 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58  owid(X)     (((X
141a0 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
141b0 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d  _WithoutRowid)==
141c0 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62  0).#define Visib
141d0 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58 29  leRowid(X) (((X)
141e0 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
141f0 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d  NoVisibleRowid)=
14200 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  =0)../*.** Each 
14210 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
14220 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73  traint is an ins
14230 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
14240 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
14250 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67  ..**.** A foreig
14260 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61  n key is associa
14270 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62  ted with two tab
14280 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22  les.  The "from"
14290 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65   table is.** the
142a0 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
142b0 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e  ains the REFEREN
142c0 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20  CES clause that 
142d0 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65  creates the fore
142e0 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65  ign.** key.  The
142f0 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74   "to" table is t
14300 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
14310 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45   named in the RE
14320 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e  FERENCES clause.
14330 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69  .** Consider thi
14340 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a  s example:.**.**
14350 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
14360 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20  E ex1(.**       
14370 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
14380 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20  Y KEY,.**       
14390 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52  b INTEGER CONSTR
143a0 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e  AINT fk1 REFEREN
143b0 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20  CES ex2(x).**   
143c0 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66    );.**.** For f
143d0 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22  oreign key "fk1"
143e0 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  , the from-table
143f0 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68   is "ex1" and th
14400 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65  e to-table is "e
14410 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65  x2"..** Equivale
14420 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20  nt names:.**.** 
14430 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d      from-table =
14440 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a  = child-table.**
14450 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20         to-table 
14460 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a  == parent-table.
14470 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52  **.** Each REFER
14480 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e  ENCES clause gen
14490 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e  erates an instan
144a0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
144b0 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
144c0 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68   which is attach
144d0 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74  ed to the from-t
144e0 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61  able.  The to-ta
144f0 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69  ble need not exi
14500 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66  st when.** the f
14510 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65  rom-table is cre
14520 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74  ated.  The exist
14530 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74  ence of the to-t
14540 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63  able is not chec
14550 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c  ked..**.** The l
14560 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e  ist of all paren
14570 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62  ts for child Tab
14580 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20  le X is held at 
14590 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41  X.pFKey..**.** A
145a0 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69   list of all chi
145b0 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c  ldren for a tabl
145c0 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68  e named Z (which
145d0 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20   might not even 
145e0 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c  exist).** is hel
145f0 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79  d in Schema.fkey
14600 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68  Hash with a hash
14610 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74   key of Z..*/.st
14620 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61  ruct FKey {.  Ta
14630 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20  ble *pFrom;     
14640 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e  /* Table contain
14650 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43  ing the REFERENC
14660 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20  ES clause (aka: 
14670 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79  Child) */.  FKey
14680 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a   *pNextFrom;  /*
14690 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20   Next FKey with 
146a0 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f  the same in pFro
146b0 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f  m. Next parent o
146c0 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61  f pFrom */.  cha
146d0 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f  r *zTo;        /
146e0 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20  * Name of table 
146f0 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69  that the key poi
14700 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72  nts to (aka: Par
14710 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ent) */.  FKey *
14720 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e  pNextTo;    /* N
14730 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d  ext with the sam
14740 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c  e zTo. Next chil
14750 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46  d of zTo. */.  F
14760 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20  Key *pPrevTo;   
14770 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74   /* Previous wit
14780 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a  h the same zTo *
14790 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  /.  int nCol;   
147a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
147b0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
147c0 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45  is key */.  /* E
147d0 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37  V: R-30323-21917
147e0 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72   */.  u8 isDefer
147f0 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72  red;       /* Tr
14800 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
14810 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66   checking is def
14820 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49  erred till COMMI
14830 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f  T */.  u8 aActio
14840 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  n[2];        /* 
14850 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e  ON DELETE and ON
14860 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c   UPDATE actions,
14870 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f   respectively */
14880 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72  .  Trigger *apTr
14890 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67  igger[2];/* Trig
148a0 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e  gers for aAction
148b0 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  [] actions */.  
148c0 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b  struct sColMap {
148d0 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67        /* Mapping
148e0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70   of columns in p
148f0 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  From to columns 
14900 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e  in zTo */.    in
14910 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20  t iFrom;        
14920 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
14930 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20  column in pFrom 
14940 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f  */.    char *zCo
14950 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
14960 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  Name of column i
14970 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20  n zTo.  If NULL 
14980 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  use PRIMARY KEY 
14990 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20  */.  } aCol[1]; 
149a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
149b0 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
149c0 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73   of nCol columns
149d0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51   */.};../*.** SQ
149e0 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61  Lite supports ma
149f0 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79  ny different way
14a00 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63  s to resolve a c
14a10 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
14a20 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72  or.  ROLLBACK pr
14a30 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
14a40 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  hat a constraint
14a50 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61   violation.** ca
14a60 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69  uses the operati
14a70 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f  on in process to
14a80 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68   fail and for th
14a90 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
14aa0 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72  ction.** to be r
14ab0 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f  olled back.  ABO
14ac0 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  RT processing me
14ad0 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ans the operatio
14ae0 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20  n in process.** 
14af0 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72  fails and any pr
14b00 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d  ior changes from
14b10 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74   that one operat
14b20 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f  ion are backed o
14b30 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74  ut,.** but the t
14b40 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
14b50 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  t rolled back.  
14b60 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20  FAIL processing 
14b70 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68  means that.** th
14b80 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
14b90 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e  rogress stops an
14ba0 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72  d returns an err
14bb0 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72  or code.  But pr
14bc0 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64  ior.** changes d
14bd0 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f  ue to the same o
14be0 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74  peration are not
14bf0 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20   backed out and 
14c00 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f  no rollback.** o
14c10 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d  ccurs.  IGNORE m
14c20 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61  eans that the pa
14c30 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61  rticular row tha
14c40 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e  t caused the con
14c50 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
14c60 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64   is not inserted
14c70 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72   or updated.  Pr
14c80 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
14c90 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a  es and no error.
14ca0 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  ** is returned. 
14cb0 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74   REPLACE means t
14cc0 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20  hat preexisting 
14cd0 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68  database rows th
14ce0 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55  at caused.** a U
14cf0 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
14d00 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72   violation are r
14d10 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74  emoved so that t
14d20 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72  he new insert or
14d30 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70  .** update can p
14d40 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73  roceed.  Process
14d50 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e  ing continues an
14d60 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65  d no error is re
14d70 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45  ported..**.** RE
14d80 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c  STRICT, SETNULL,
14d90 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74   and CASCADE act
14da0 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20  ions apply only 
14db0 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e  to foreign keys.
14dc0 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20  .** RESTRICT is 
14dd0 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52  the same as ABOR
14de0 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20  T for IMMEDIATE 
14df0 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64  foreign keys and
14e00 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20   the.** same as 
14e10 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46  ROLLBACK for DEF
14e20 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54  ERRED keys.  SET
14e30 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20  NULL means that 
14e40 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
14e50 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ey is set to NUL
14e60 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e  L.  CASCADE mean
14e70 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20  s that a DELETE 
14e80 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65  or UPDATE of the
14e90 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74  .** referenced t
14ea0 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70  able row is prop
14eb0 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20  agated into the 
14ec0 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74  row that holds t
14ed0 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65  he.** foreign ke
14ee0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  y..**.** The fol
14ef0 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20  lowing symbolic 
14f00 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20  values are used 
14f10 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20  to record which 
14f20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f  type.** of actio
14f30 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64  n to take..*/.#d
14f40 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20  efine OE_None   
14f50 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69    0   /* There i
14f60 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20  s no constraint 
14f70 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66  to check */.#def
14f80 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  ine OE_Rollback 
14f90 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20  1   /* Fail the 
14fa0 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f  operation and ro
14fb0 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73  llback the trans
14fc0 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
14fd0 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20  e OE_Abort    2 
14fe0 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68    /* Back out ch
14ff0 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20  anges but do no 
15000 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63  rollback transac
15010 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
15020 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20  OE_Fail     3   
15030 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72  /* Stop the oper
15040 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20  ation but leave 
15050 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65  all prior change
15060 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  s */.#define OE_
15070 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20  Ignore   4   /* 
15080 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72  Ignore the error
15090 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20  . Do not do the 
150a0 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
150b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
150c0 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44  eplace  5   /* D
150d0 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72  elete existing r
150e0 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49  ecord, then do I
150f0 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
15100 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 55 70  */.#define OE_Up
15110 64 61 74 65 20 20 20 36 20 20 20 2f 2a 20 50 72  date   6   /* Pr
15120 6f 63 65 73 73 20 61 73 20 61 20 44 4f 20 55 50  ocess as a DO UP
15130 44 41 54 45 20 69 6e 20 61 6e 20 75 70 73 65 72  DATE in an upser
15140 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
15150 52 65 73 74 72 69 63 74 20 37 20 20 20 2f 2a 20  Restrict 7   /* 
15160 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d  OE_Abort for IMM
15170 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62  EDIATE, OE_Rollb
15180 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ack for DEFERRED
15190 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
151a0 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f 2a 20 53  etNull  8   /* S
151b0 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
151c0 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  ey value to NULL
151d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
151e0 65 74 44 66 6c 74 20 20 39 20 20 20 2f 2a 20 53  etDflt  9   /* S
151f0 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
15200 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20  ey value to its 
15210 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69  default */.#defi
15220 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 31  ne OE_Cascade  1
15230 30 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68  0  /* Cascade th
15240 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
15250 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20  fine OE_Default 
15260 20 31 31 20 20 2f 2a 20 44 6f 20 77 68 61 74 65   11  /* Do whate
15270 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  ver the default 
15280 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f  action is */.../
15290 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
152a0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
152b0 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  g structure is p
152c0 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72  assed as the fir
152d0 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74  st.** argument t
152e0 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79  o sqlite3VdbeKey
152f0 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75  Compare and is u
15300 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74  sed to control t
15310 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
15320 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65   of the two inde
15330 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  x keys..**.** No
15340 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64  te that aSortOrd
15350 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d  er[] and aColl[]
15360 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73   have nField+1 s
15370 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20  lots.  There.** 
15380 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73  are nField slots
15390 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73   for the columns
153a0 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65   of an index the
153b0 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74  n one extra slot
153c0 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69  .** for the rowi
153d0 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  d at the end..*/
153e0 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20  .struct KeyInfo 
153f0 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20  {.  u32 nRef;   
15400 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15410 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20  r of references 
15420 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20  to this KeyInfo 
15430 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65  object */.  u8 e
15440 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
15450 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
15460 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51   - one of the SQ
15470 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73  LITE_UTF* values
15480 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46 69   */.  u16 nKeyFi
15490 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  eld;      /* Num
154a0 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d  ber of key colum
154b0 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ns in the index 
154c0 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69 65  */.  u16 nAllFie
154d0 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74 61  ld;      /* Tota
154e0 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75  l columns, inclu
154f0 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f 74  ding key plus ot
15500 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  hers */.  sqlite
15510 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
15520 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   The database co
15530 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  nnection */.  u8
15540 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
15550 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20    /* Sort order 
15560 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e  for each column.
15570 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61   */.  CollSeq *a
15580 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c  Coll[1];  /* Col
15590 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
155a0 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66  for each term of
155b0 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a   the key */.};..
155c0 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63  /*.** This objec
155d0 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64  t holds a record
155e0 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20   which has been 
155f0 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
15600 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69  individual.** fi
15610 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75  elds, for the pu
15620 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20  rposes of doing 
15630 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a  a comparison..**
15640 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20  .** A record is 
15650 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  an object that c
15660 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
15670 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61  ore fields of da
15680 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61  ta..** Records a
15690 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  re used to store
156a0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
156b0 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
156c0 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  to store.** the 
156d0 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e  key of an index.
156e0 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e    A blob encodin
156f0 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73  g of a record is
15700 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74   created by.** t
15710 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
15720 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56   opcode of the V
15730 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73  DBE and is disas
15740 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a  sembled by the.*
15750 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  * OP_Column opco
15760 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73  de..**.** An ins
15770 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
15780 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61  ject serves as a
15790 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67   "key" for doing
157a0 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20   a search on.** 
157b0 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e  an index b+tree.
157c0 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65   The goal of the
157d0 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69   search is to fi
157e0 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  nd the entry tha
157f0 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74  t.** is closed t
15800 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69  o the key descri
15810 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65  bed by this obje
15820 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74  ct.  This object
15830 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a   might hold.** j
15840 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20  ust a prefix of 
15850 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75  the key.  The nu
15860 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
15870 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b  s given by.** pK
15880 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a  eyInfo->nField..
15890 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64  **.** The r1 and
158a0 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74   r2 fields are t
158b0 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74  he values to ret
158c0 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20  urn if this key 
158d0 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  is less than.** 
158e0 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
158f0 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72  a key in the btr
15900 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ee, respectively
15910 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72  .  These are nor
15920 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20  mally.** -1 and 
15930 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  +1 respectively,
15940 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e   but might be in
15950 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64  verted to +1 and
15960 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65   -1 if the b-tre
15970 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20  e.** is in DESC 
15980 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  order..**.** The
15990 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20   key comparison 
159a0 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c  functions actual
159b0 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c  ly return defaul
159c0 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66  t_rc when they f
159d0 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73  ind.** an equals
159e0 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65   comparison.  de
159f0 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
15a00 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49  -1, 0, or +1.  I
15a10 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d  f there are.** m
15a20 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20  ultiple entries 
15a30 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69  in the b-tree wi
15a40 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20  th the same key 
15a50 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69  (when only looki
15a60 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72  ng.** at the fir
15a70 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  st pKeyInfo->nFi
15a80 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61  elds,) then defa
15a90 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65  ult_rc can be se
15aa0 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61  t to -1 to.** ca
15ab0 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74  use the search t
15ac0 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20  o find the last 
15ad0 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20  match, or +1 to 
15ae0 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
15af0 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20   to.** find the 
15b00 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a  first match..**.
15b10 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61  ** The key compa
15b20 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  rison functions 
15b30 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20  will set eqSeen 
15b40 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20  to true if they 
15b50 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20  ever.** get and 
15b60 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68  equal results wh
15b70 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69  en comparing thi
15b80 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61  s structure to a
15b90 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a   b-tree record..
15ba0 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f  ** When default_
15bb0 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63  rc!=0, the searc
15bc0 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f  h might end up o
15bd0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d  n the record imm
15be0 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f  ediately.** befo
15bf0 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74  re the first mat
15c00 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c  ch or immediatel
15c10 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74  y after the last
15c20 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20   match.  The.** 
15c30 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c  eqSeen field wil
15c40 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68  l indicate wheth
15c50 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61  er or not an exa
15c60 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20  ct match exists 
15c70 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65  in the.** b-tree
15c80 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
15c90 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
15ca0 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
15cb0 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
15cc0 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
15cd0 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
15ce0 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20  Mem *aMem;      
15cf0 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f      /* Values */
15d00 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
15d10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15d20 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
15d30 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64  pMem[] */.  i8 d
15d40 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20  efault_rc;      
15d50 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
15d60 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65  sult if keys are
15d70 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65   equal */.  u8 e
15d80 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
15d90 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65  /* Error detecte
15da0 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70  d by xRecordComp
15db0 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20  are (CORRUPT or 
15dc0 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72  NOMEM) */.  i8 r
15dd0 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1;              
15de0 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
15df0 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68 73  rn if (lhs < rhs
15e00 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20  ) */.  i8 r2;   
15e10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
15e20 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66  lue to return if
15e30 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a   (lhs > rhs) */.
15e40 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20    u8 eqSeen;    
15e50 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
15e60 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d   an equality com
15e70 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e  parison has been
15e80 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a   seen */.};.../*
15e90 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64  .** Each SQL ind
15ea0 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ex is represente
15eb0 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61  d in memory by a
15ec0 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
15ed0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
15ee0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
15ef0 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  The columns of t
15f00 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72  he table that ar
15f10 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  e to be indexed 
15f20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a  are described.**
15f30 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e   by the aiColumn
15f40 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73  [] field of this
15f50 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72   structure.  For
15f60 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73   example, suppos
15f70 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65  e.** we have the
15f80 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65   following table
15f90 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a   and index:.**.*
15fa0 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
15fb0 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63  LE Ex1(c1 int, c
15fc0 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b  2 int, c3 text);
15fd0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49  .**     CREATE I
15fe0 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28  NDEX Ex2 ON Ex1(
15ff0 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e  c3,c1);.**.** In
16000 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63   the Table struc
16010 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20  ture describing 
16020 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63  Ex1, nCol==3 bec
16030 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a  ause there are.*
16040 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20  * three columns 
16050 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
16060 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75  n the Index stru
16070 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
16080 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e  .** Ex2, nColumn
16090 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74  ==2 since 2 of t
160a0 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  he 3 columns of 
160b0 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e  Ex1 are indexed.
160c0 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
160d0 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c   aiColumn is {2,
160e0 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30   0}.  aiColumn[0
160f0 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65  ]==2 because the
16100 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  .** first column
16110 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
16120 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c3) has an index
16130 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f   of 2 in Ex1.aCo
16140 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f  l[]..** The seco
16150 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  nd column to be 
16160 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73  indexed (c1) has
16170 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69   an index of 0 i
16180 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c  n.** Ex1.aCol[],
16190 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c   hence Ex2.aiCol
161a0 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a  umn[1]==0..**.**
161b0 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72   The Index.onErr
161c0 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69  or field determi
161d0 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
161e0 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63  ot the indexed c
161f0 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62  olumns.** must b
16200 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61  e unique and wha
16210 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20  t to do if they 
16220 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49  are not.  When I
16230 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f  ndex.onError=OE_
16240 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e  None,.** it mean
16250 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20  s this is not a 
16260 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f  unique index.  O
16270 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61  therwise it is a
16280 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a   unique index.**
16290 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f   and the value o
162a0 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  f Index.onError 
162b0 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69  indicate the whi
162c0 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ch conflict reso
162d0 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69  lution.** algori
162e0 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68  thm to employ wh
162f0 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70  enever an attemp
16300 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73  t is made to ins
16310 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65  ert a non-unique
16320 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a  .** element..**.
16330 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67  ** While parsing
16340 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
16350 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  or CREATE INDEX 
16360 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64  statement in ord
16370 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74  er to.** generat
16380 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20  e VDBE code (as 
16390 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69  opposed to parsi
163a0 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d  ng one read from
163b0 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   an sqlite_maste
163c0 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61  r.** table as pa
163d0 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e  rt of parsing an
163e0 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
163f0 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e  se schema), tran
16400 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a  sient instances.
16410 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
16420 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61  ture may be crea
16430 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ted. In this cas
16440 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d  e the Index.tnum
16450 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20   variable is.** 
16460 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
16470 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56  e address of a V
16480 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c  DBE instruction,
16490 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20   not a database 
164a0 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28  page.** number (
164b0 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20  it cannot - the 
164c0 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73  database page is
164d0 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75   not allocated u
164e0 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a  ntil the VDBE.**
164f0 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63   program is exec
16500 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65  uted). See conve
16510 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64  rtToWithoutRowid
16520 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61  Table() for deta
16530 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ils..*/.struct I
16540 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndex {.  char *z
16550 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
16560 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
16570 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36  s index */.  i16
16580 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20   *aiColumn;     
16590 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63        /* Which c
165a0 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
165b0 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20  by this index.  
165c0 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f  1st is 0 */.  Lo
165d0 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73  gEst *aiRowLogEs
165e0 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41  t;     /* From A
165f0 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77  NALYZE: Est. row
16600 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61  s selected by ea
16610 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54  ch column */.  T
16620 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20  able *pTable;   
16630 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53          /* The S
16640 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  QL table being i
16650 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72  ndexed */.  char
16660 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
16670 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
16680 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
16690 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
166a0 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
166b0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
166c0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e    /* The next in
166d0 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
166e0 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62  ith the same tab
166f0 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  le */.  Schema *
16700 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
16710 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
16720 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78  ining this index
16730 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
16740 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
16750 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * for each colum
16760 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46  n: True==DESC, F
16770 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63  alse==ASC */.  c
16780 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f  onst char **azCo
16790 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ll;     /* Array
167a0 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65   of collation se
167b0 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72  quence names for
167c0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72   index */.  Expr
167d0 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b   *pPartIdxWhere;
167e0 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
167f0 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c  ause for partial
16800 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78   indices */.  Ex
16810 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72  prList *aColExpr
16820 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  ;      /* Column
16830 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
16840 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
16850 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42             /* DB
16860 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67   Page containing
16870 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e   root of this in
16880 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  dex */.  LogEst 
16890 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20  szIdxRow;       
168a0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61    /* Estimated a
168b0 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20  verage row size 
168c0 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31  in bytes */.  u1
168d0 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20  6 nKeyCol;      
168e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
168f0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d   of columns form
16900 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20  ing the key */. 
16910 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   u16 nColumn;   
16920 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16930 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ber of columns s
16940 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64  tored in the ind
16950 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72  ex */.  u8 onErr
16960 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  or;             
16970 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45   /* OE_Abort, OE
16980 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c  _Ignore, OE_Repl
16990 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20  ace, or OE_None 
169a0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64  */.  unsigned id
169b0 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a  xType:2;      /*
169c0 20 30 3a 4e 6f 72 6d 61 6c 20 31 3a 55 4e 49 51   0:Normal 1:UNIQ
169d0 55 45 2c 20 32 3a 50 52 49 4d 41 52 59 20 4b 45  UE, 2:PRIMARY KE
169e0 59 2c 20 33 3a 49 50 4b 20 2a 2f 0a 20 20 75 6e  Y, 3:IPK */.  un
169f0 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65  signed bUnordere
16a00 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68  d:1;   /* Use th
16a10 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20  is index for == 
16a20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e  or IN queries on
16a30 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ly */.  unsigned
16a40 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20   uniqNotNull:1; 
16a50 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51   /* True if UNIQ
16a60 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20  UE and NOT NULL 
16a70 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  for all columns 
16a80 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
16a90 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a  Resized:1;    /*
16aa0 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65 49   True if resizeI
16ab0 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73  ndexObject() has
16ac0 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
16ad0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76    unsigned isCov
16ae0 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72  ering:1;   /* Tr
16af0 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61 20  ue if this is a 
16b00 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a  covering index *
16b10 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53  /.  unsigned noS
16b20 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20  kipScan:1;   /* 
16b30 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73  Do not try to us
16b40 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74  e skip-scan if t
16b50 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  rue */.  unsigne
16b60 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20 20 20  d hasStat1:1;   
16b70 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45 73 74    /* aiRowLogEst
16b80 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66 72 6f   values come fro
16b90 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a  m sqlite_stat1 *
16ba0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 4e 6f  /.  unsigned bNo
16bb0 51 75 65 72 79 3a 31 3b 20 20 20 20 20 2f 2a 20  Query:1;     /* 
16bc0 44 6f 20 6e 6f 74 20 75 73 65 20 74 68 69 73 20  Do not use this 
16bd0 69 6e 64 65 78 20 74 6f 20 6f 70 74 69 6d 69 7a  index to optimiz
16be0 65 20 71 75 65 72 69 65 73 20 2a 2f 0a 23 69 66  e queries */.#if
16bf0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
16c00 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
16c10 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20  .  int nSample; 
16c20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16c30 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
16c40 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a  s in aSample[] *
16c50 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43  /.  int nSampleC
16c60 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ol;          /* 
16c70 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d  Size of IndexSam
16c80 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73  ple.anEq[] and s
16c90 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  o on */.  tRowcn
16ca0 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20  t *aAvgEq;      
16cb0 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45     /* Average nE
16cc0 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79  q values for key
16cd0 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65  s not in aSample
16ce0 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c   */.  IndexSampl
16cf0 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f  e *aSample;    /
16d00 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65  * Samples of the
16d10 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a   left-most key *
16d20 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52  /.  tRowcnt *aiR
16d30 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20  owEst;       /* 
16d40 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
16d50 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74  stat1 data for t
16d60 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74  his index */.  t
16d70 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b  Rowcnt nRowEst0;
16d80 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c          /* Non-l
16d90 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65  ogarithmic numbe
16da0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
16db0 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66   index */.#endif
16dc0 0a 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 4e 6f  .  Bitmask colNo
16dd0 74 49 64 78 65 64 3b 20 20 20 20 20 2f 2a 20 30  tIdxed;     /* 0
16de0 20 66 6f 72 20 75 6e 69 6e 64 65 78 65 64 20 63   for unindexed c
16df0 6f 6c 75 6d 6e 73 20 69 6e 20 70 54 61 62 20 2a  olumns in pTab *
16e00 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
16e10 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49  wed values for I
16e20 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a  ndex.idxType.*/.
16e30 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
16e40 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20  DXTYPE_APPDEF   
16e50 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65     0   /* Create
16e60 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49  d using CREATE I
16e70 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
16e80 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55  SQLITE_IDXTYPE_U
16e90 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f  NIQUE      1   /
16ea0 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55  * Implements a U
16eb0 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
16ec0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
16ed0 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
16ee0 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73  RYKEY  2   /* Is
16ef0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
16f00 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a   for the table *
16f10 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
16f20 5f 49 44 58 54 59 50 45 5f 49 50 4b 20 20 20 20  _IDXTYPE_IPK    
16f30 20 20 20 20 20 33 20 20 20 2f 2a 20 49 4e 54 45       3   /* INTE
16f40 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
16f50 69 6e 64 65 78 20 2a 2f 0a 0a 2f 2a 20 52 65 74  index */../* Ret
16f60 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
16f70 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59  x X is a PRIMARY
16f80 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64   KEY index */.#d
16f90 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b  efine IsPrimaryK
16fa0 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29  eyIndex(X)  ((X)
16fb0 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54  ->idxType==SQLIT
16fc0 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
16fd0 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e  YKEY)../* Return
16fe0 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
16ff0 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64   is a UNIQUE ind
17000 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
17010 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20  UniqueIndex(X)  
17020 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f      ((X)->onErro
17030 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20  r!=OE_None)../* 
17040 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75  The Index.aiColu
17050 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20  mn[] values are 
17060 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76  normally positiv
17070 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a  e integer.  But.
17080 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d  ** there are som
17090 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  e negative value
170a0 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65 63  s that have spec
170b0 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a  ial meaning:.*/.
170c0 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44  #define XN_ROWID
170d0 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a       (-1)     /*
170e0 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20   Indexed column 
170f0 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  is the rowid */.
17100 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20  #define XN_EXPR 
17110 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a       (-2)     /*
17120 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20   Indexed column 
17130 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
17140 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
17150 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e  sample stored in
17160 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
17170 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  3 table is repre
17180 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
17190 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75  .** using a stru
171a0 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79  cture of this ty
171b0 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e  pe.  See documen
171c0 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f  tation at the to
171d0 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c  p of the.** anal
171e0 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c  yze.c source fil
171f0 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
17200 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
17210 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d  .struct IndexSam
17220 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b  ple {.  void *p;
17230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
17240 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20  nter to sampled 
17250 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
17260 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
17270 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20   Size of record 
17280 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52  in bytes */.  tR
17290 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20  owcnt *anEq;    
172a0 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
172b0 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65  f rows where the
172c0 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73   key equals this
172d0 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
172e0 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f  wcnt *anLt;    /
172f0 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
17300 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20   rows where key 
17310 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  is less than thi
17320 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
17330 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20  owcnt *anDLt;   
17340 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
17350 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20  f distinct keys 
17360 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
17370 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ample */.};../*.
17380 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
17390 65 73 20 74 6f 20 75 73 65 20 77 69 74 68 69 6e  es to use within
173a0 20 74 68 65 20 66 6c 61 67 73 20 61 72 67 75 6d   the flags argum
173b0 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 47 65  ent to sqlite3Ge
173c0 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23 64 65  tToken()..*/.#de
173d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45  fine SQLITE_TOKE
173e0 4e 5f 51 55 4f 54 45 44 20 20 20 20 30 78 31 20  N_QUOTED    0x1 
173f0 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61 20 71 75  /* Token is a qu
17400 6f 74 65 64 20 69 64 65 6e 74 69 66 69 65 72 2e  oted identifier.
17410 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
17420 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f 52 44  TE_TOKEN_KEYWORD
17430 20 20 20 30 78 32 20 2f 2a 20 54 6f 6b 65 6e 20     0x2 /* Token 
17440 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20 2a 2f  is a keyword. */
17450 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
17460 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
17470 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
17480 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
17490 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
174a0 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
174b0 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
174c0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
174d0 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
174e0 20 74 68 61 74 20 22 7a 22 20 70 6f 69 6e 74 73   that "z" points
174f0 20 74 6f 20 69 73 20 6f 77 6e 65 64 20 62 79 20   to is owned by 
17500 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 2e 20 20  other objects.  
17510 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20 74 68 61  Take care.** tha
17520 74 20 74 68 65 20 6f 77 6e 65 72 20 6f 66 20 74  t the owner of t
17530 68 65 20 22 7a 22 20 73 74 72 69 6e 67 20 64 6f  he "z" string do
17540 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f 63 61 74  es not deallocat
17550 65 20 74 68 65 20 73 74 72 69 6e 67 20 62 65 66  e the string bef
17560 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f 6b 65 6e  ore.** the Token
17570 20 67 6f 65 73 20 6f 75 74 20 6f 66 20 73 63 6f   goes out of sco
17580 70 65 21 20 20 56 65 72 79 20 6f 66 74 65 6e 2c  pe!  Very often,
17590 20 74 68 65 20 22 7a 22 20 70 6f 69 6e 74 73 20   the "z" points 
175a0 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65 0a 2a 2a  to some place.**
175b0 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f   in the middle o
175c0 66 20 74 68 65 20 50 61 72 73 65 2e 7a 53 71 6c  f the Parse.zSql
175d0 20 74 65 78 74 2e 20 20 42 75 74 20 69 74 20 6d   text.  But it m
175e0 69 67 68 74 20 61 6c 73 6f 20 70 6f 69 6e 74 20  ight also point 
175f0 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69 63 20 73  to a.** static s
17600 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74  tring..*/.struct
17610 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74   Token {.  const
17620 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a   char *z;     /*
17630 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b   Text of the tok
17640 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65  en.  Not NULL-te
17650 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75  rminated! */.  u
17660 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20  nsigned int n;  
17670 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
17680 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69  haracters in thi
17690 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  s token */.};../
176a0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
176b0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
176c0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
176d0 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
176e0 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
176f0 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20  de for a SELECT 
17700 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67  that contains ag
17710 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17720 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72  s..**.** If Expr
17730 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55  .op==TK_AGG_COLU
17740 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e  MN or TK_AGG_FUN
17750 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e  CTION then Expr.
17760 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a  pAggInfo is a.**
17770 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
17780 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
17790 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69   Expr.iColumn fi
177a0 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78  eld is the index
177b0 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61   in.** AggInfo.a
177c0 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f  Col[] or AggInfo
177d0 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f  .aFunc[] of info
177e0 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
177f0 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
17800 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65  de for that node
17810 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  ..**.** AggInfo.
17820 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67  pGroupBy and Agg
17830 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72  Info.aFunc.pExpr
17840 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73   point to fields
17850 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f   within the.** o
17860 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73  riginal Select s
17870 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
17880 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45  scribes the SELE
17890 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
178a0 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64  hese.** fields d
178b0 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
178c0 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c   freed when deal
178d0 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67  locating the Agg
178e0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a  Info structure..
178f0 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66  */.struct AggInf
17900 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d  o {.  u8 directM
17910 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ode;          /*
17920 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e   Direct renderin
17930 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b  g mode means tak
17940 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a  e data directly.
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17960 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f            ** fro
17970 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  m source tables 
17980 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d  rather than from
17990 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f   accumulators */
179a0 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67  .  u8 useSorting
179b0 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e  Idx;       /* In
179c0 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65   direct mode, re
179d0 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74  ference the sort
179e0 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72  ing index rather
179f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17a00 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
17a10 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  an the source ta
17a20 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  ble */.  int sor
17a30 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20  tingIdx;        
17a40 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
17a50 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67  r of the sorting
17a60 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
17a70 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20  sortingIdxPTab; 
17a80 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
17a90 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74  mber of pseudo-t
17aa0 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  able */.  int nS
17ab0 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20  ortingColumn;   
17ac0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
17ad0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f  olumns in the so
17ae0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
17af0 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65   int mnReg, mxRe
17b00 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67  g;       /* Rang
17b10 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  e of registers a
17b20 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f  llocated for aCo
17b30 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20  l and aFunc */. 
17b40 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
17b50 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  pBy;     /* The 
17b60 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20  group by clause 
17b70 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
17b80 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20  nfo_col {    /* 
17b90 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  For each column 
17ba0 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74  used in source t
17bb0 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62  ables */.    Tab
17bc0 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
17bd0 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20        /* Source 
17be0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
17bf0 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
17c00 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
17c10 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
17c20 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
17c30 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
17c40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
17c50 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68  lumn number with
17c60 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  in the source ta
17c70 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
17c80 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20  SorterColumn;   
17c90 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
17ca0 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74  mber in the sort
17cb0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  ing index */.   
17cc0 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
17cd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
17ce0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
17cf0 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
17d00 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70  lator */.    Exp
17d10 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
17d20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69        /* The ori
17d30 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ginal expression
17d40 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20   */.  } *aCol;. 
17d50 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   int nColumn;   
17d60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17d70 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69  er of used entri
17d80 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a  es in aCol[] */.
17d90 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74    int nAccumulat
17da0 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  or;       /* Num
17db0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  ber of columns t
17dc0 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68  hat show through
17dd0 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a   to the output..
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17df0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64            ** Add
17e00 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20  itional columns 
17e10 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73  are used only as
17e20 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20   parameters to. 
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e40 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72           ** aggr
17e50 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
17e60 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
17e70 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20  nfo_func {   /* 
17e80 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61  For each aggrega
17e90 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  te function */. 
17ea0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
17ec0 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69  xpression encodi
17ed0 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ng the function 
17ee0 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a  */.    FuncDef *
17ef0 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  pFunc;          
17f00 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65  /* The aggregate
17f10 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
17f20 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  entation */.    
17f30 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
17f40 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
17f50 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
17f60 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
17f70 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ator */.    int 
17f80 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20  iDistinct;      
17f90 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61       /* Ephemera
17fa0 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20  l table used to 
17fb0 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54  enforce DISTINCT
17fc0 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a   */.  } *aFunc;.
17fd0 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20    int nFunc;    
17fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17ff0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
18000 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a  n aFunc[] */.};.
18010 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74  ./*.** The datat
18020 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73  ype ynVar is a s
18030 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65  igned integer, e
18040 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20  ither 16-bit or 
18050 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c  32-bit..** Usual
18060 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73  ly it is 16-bits
18070 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45  .  But if SQLITE
18080 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
18090 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a  MBER is greater.
180a0 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65  ** than 32767 we
180b0 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74   have to make it
180c0 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74   32-bit.  16-bit
180d0 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65   is preferred be
180e0 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73  cause.** it uses
180f0 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20   less memory in 
18100 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c  the Expr object,
18110 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20   which is a big 
18120 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69  memory user.** i
18130 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c  n systems with l
18140 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20  ots of prepared 
18150 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64  statements.  And
18160 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e   few application
18170 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74  s.** need more t
18180 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20  han about 10 or 
18190 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42  20 variables.  B
181a0 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20  ut some extreme 
181b0 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f  users want.** to
181c0 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73   have prepared s
181d0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f  tatements with o
181e0 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62  ver 32767 variab
181f0 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65  les, and for the
18200 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20  m.** the option 
18210 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74  is available (at
18220 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a   compile-time)..
18230 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
18240 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
18250 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66  R<=32767.typedef
18260 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73   i16 ynVar;.#els
18270 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e  e.typedef int yn
18280 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Var;.#endif../*.
18290 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20  ** Each node of 
182a0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
182b0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
182c0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
182d0 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
182e0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ure..**.** Expr.
182f0 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65  op is the opcode
18300 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61  . The integer pa
18310 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73  rser token codes
18320 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61   are reused.** a
18330 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20  s opcodes here. 
18340 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
18350 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20   parser defines 
18360 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69  TK_GE to be an i
18370 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72  nteger.** code r
18380 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
18390 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54  ">=" operator. T
183a0 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72  his same integer
183b0 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a   code is reused.
183c0 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20  ** to represent 
183d0 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e  the greater-than
183e0 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65  -or-equal-to ope
183f0 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70  rator in the exp
18400 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e  ression.** tree.
18410 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
18420 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
18430 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49  QL literal (TK_I
18440 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54  NTEGER, TK_FLOAT
18450 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72  , TK_BLOB,.** or
18460 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65   TK_STRING), the
18470 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
18480 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f  tains the text o
18490 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61  f the SQL litera
184a0 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70  l. If.** the exp
184b0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72  ression is a var
184c0 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42  iable (TK_VARIAB
184d0 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  LE), then Expr.t
184e0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
184f0 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61  e.** variable na
18500 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  me. Finally, if 
18510 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
18520 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
18530 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c  n (TK_FUNCTION),
18540 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  .** then Expr.to
18550 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
18560 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
18570 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  ction..**.** Exp
18580 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70  r.pRight and Exp
18590 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20  r.pLeft are the 
185a0 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73  left and right s
185b0 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66  ubexpressions of
185c0 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65   a.** binary ope
185d0 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72  rator. Either or
185e0 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c   both may be NUL
185f0 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e  L..**.** Expr.x.
18600 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20  pList is a list 
18610 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20  of arguments if 
18620 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
18630 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
18640 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70  n,.** a CASE exp
18650 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e  ression or an IN
18660 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
18670 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
18680 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22  N (<y>, <z>...)"
18690 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c  ..** Expr.x.pSel
186a0 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74  ect is used if t
186b0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
186c0 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72   a sub-select or
186d0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
186e0 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c  f.** the form "<
186f0 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20  lhs> IN (SELECT 
18700 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50  ...)". If the EP
18710 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69  _xIsSelect bit i
18720 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20  s set in the.** 
18730 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
18740 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65   then Expr.x.pSe
18750 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f  lect is valid. O
18760 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78  therwise, Expr.x
18770 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c  .pList is.** val
18780 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70  id..**.** An exp
18790 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
187a0 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20  orm ID or ID.ID 
187b0 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75  refers to a colu
187c0 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a  mn in a table..*
187d0 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65  * For such expre
187e0 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20  ssions, Expr.op 
187f0 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c  is set to TK_COL
18800 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61  UMN and Expr.iTa
18810 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e  ble is.** the in
18820 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d  teger cursor num
18830 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75  ber of a VDBE cu
18840 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
18850 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a   that table and.
18860 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  ** Expr.iColumn 
18870 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75  is the column nu
18880 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65  mber for the spe
18890 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49  cific column.  I
188a0 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73  f the.** express
188b0 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61  ion is used as a
188c0 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67   result in an ag
188d0 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20  gregate SELECT, 
188e0 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
188f0 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64  e is also stored
18900 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67   in the Expr.iAg
18910 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  g column in the 
18920 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61  aggregate so tha
18930 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61  t.** it can be a
18940 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c  ccessed after al
18950 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65  l aggregates are
18960 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a   computed..**.**
18970 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
18980 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64  on is an unbound
18990 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72   variable marker
189a0 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72   (a question mar
189b0 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27  k.** character '
189c0 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  ?' in the origin
189d0 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65  al SQL) then the
189e0 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c   Expr.iTable hol
189f0 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20  ds the index.** 
18a00 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20  number for that 
18a10 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  variable..**.** 
18a20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
18a30 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20  n is a subquery 
18a40 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d  then Expr.iColum
18a50 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  n holds an integ
18a60 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e  er.** register n
18a70 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67  umber containing
18a80 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
18a90 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66  he subquery.  If
18aa0 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79   the.** subquery
18ab0 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e   gives a constan
18ac0 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69  t result, then i
18ad0 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66  Table is -1.  If
18ae0 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a   the subquery.**
18af0 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65   gives a differe
18b00 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66  nt answer at dif
18b10 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72  ferent times dur
18b20 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72  ing statement pr
18b30 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e  ocessing.** then
18b40 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61   iTable is the a
18b50 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72  ddress of a subr
18b60 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70  outine that comp
18b70 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72  utes the subquer
18b80 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  y..**.** If the 
18b90 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20  Expr is of type 
18ba0 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74  OP_Column, and t
18bb0 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73  he table it is s
18bc0 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a  electing from.**
18bd0 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65   is a disk table
18be0 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20   or the "old.*" 
18bf0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68  pseudo-table, th
18c00 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74  en pTab points t
18c10 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  o the.** corresp
18c20 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66  onding table def
18c30 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41  inition..**.** A
18c40 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a  LLOCATION NOTES:
18c50 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65  .**.** Expr obje
18c60 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f  cts can use a lo
18c70 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  t of memory spac
18c80 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63  e in database sc
18c90 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c  hema.  To.** hel
18ca0 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20  p reduce memory 
18cb0 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f  requirements, so
18cc0 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20  metimes an Expr 
18cd0 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a  object will be.*
18ce0 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e  * truncated.  An
18cf0 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20  d to reduce the 
18d00 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
18d10 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f   allocations, so
18d20 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f  metimes.** two o
18d30 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65  r more Expr obje
18d40 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  cts will be stor
18d50 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d  ed in a single m
18d60 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
18d70 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69  ,.** together wi
18d80 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73  th Expr.zToken s
18d90 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  trings..**.** If
18da0 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
18db0 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  and EP_TokenOnly
18dc0 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77   flags are set w
18dd0 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f  hen.** an Expr o
18de0 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74  bject is truncat
18df0 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64  ed.  When EP_Red
18e00 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65  uced is set, the
18e10 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69  n all.** the chi
18e20 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ld Expr objects 
18e30 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66  in the Expr.pLef
18e40 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68  t and Expr.pRigh
18e50 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72  t subtrees.** ar
18e60 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  e contained with
18e70 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f  in the same memo
18e80 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ry allocation.  
18e90 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74  Note, however, t
18ea0 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72  hat.** the subtr
18eb0 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c  ees in Expr.x.pL
18ec0 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53  ist or Expr.x.pS
18ed0 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73  elect are always
18ee0 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61   separately.** a
18ef0 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64  llocated, regard
18f00 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
18f10 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65  or not EP_Reduce
18f20 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72  d is set..*/.str
18f30 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20  uct Expr {.  u8 
18f40 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
18f50 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e      /* Operation
18f60 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68   performed by th
18f70 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61  is node */.  cha
18f80 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
18f90 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
18fa0 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ity of the colum
18fb0 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20  n or 0 if not a 
18fc0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20  column */.  u32 
18fd0 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
18fe0 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c     /* Various fl
18ff0 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62  ags.  EP_* See b
19000 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  elow */.  union 
19010 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b  {.    char *zTok
19020 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  en;          /* 
19030 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72  Token value. Zer
19040 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64  o terminated and
19050 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20   dequoted */.   
19060 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20   int iValue;    
19070 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e          /* Non-n
19080 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20  egative integer 
19090 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56  value if EP_IntV
190a0 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a  alue */.  } u;..
190b0 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54    /* If the EP_T
190c0 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73  okenOnly flag is
190d0 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
190e0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
190f0 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
19100 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
19110 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
19120 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
19130 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
19140 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
19150 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
19160 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
19170 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
19180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
191c0 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20  .  Expr *pLeft; 
191d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66            /* Lef
191e0 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45  t subnode */.  E
191f0 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20  xpr *pRight;    
19200 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73        /* Right s
19210 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  ubnode */.  unio
19220 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
19230 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20   *pList;     /* 
19240 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
19250 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46   SELECT, CASE, F
19260 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e  UNCTION, BETWEEN
19270 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
19280 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
19290 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64  EP_xIsSelect and
192a0 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
192b0 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20  , SELECT */.  } 
192c0 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  x;..  /* If the 
192d0 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
192e0 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
192f0 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
19300 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
19310 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
19320 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
19330 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
19340 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
19350 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
19360 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
19370 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
19380 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
19390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193d0 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  /..#if SQLITE_MA
193e0 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
193f0 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
19400 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
19410 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
19420 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
19430 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  e */.#endif.  in
19440 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
19450 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
19460 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  N: cursor number
19470 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e   of table holdin
19480 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  g column.       
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194a0 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    ** TK_REGISTER
194b0 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  : register numbe
194c0 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
194d0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
194e0 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e  _TRIGGER: 1 -> n
194f0 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20  ew, 0 -> old.   
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19510 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69        ** EP_Unli
19520 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38  kely:  134217728
19530 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f   times likelihoo
19540 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
19550 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
19560 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67  _SELECT: 1st reg
19570 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20  ister of result 
19580 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61  vector */.  ynVa
19590 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
195a0 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
195b0 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
195c0 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
195f0 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
19600 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
19610 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20  = 1)..          
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19630 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55  * TK_SELECT_COLU
19640 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  MN: column of th
19650 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20  e result vector 
19660 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20  */.  i16 iAgg;  
19670 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
19680 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41  hich entry in pA
19690 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f  ggInfo->aCol[] o
196a0 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20  r ->aFunc[] */. 
196b0 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54   i16 iRightJoinT
196c0 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50  able;   /* If EP
196d0 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72  _FromJoin, the r
196e0 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68  ight table of th
196f0 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f  e join */.  u8 o
19700 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p2;             
19710 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45     /* TK_REGISTE
19720 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75  R: original valu
19730 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20  e of Expr.op.   
19740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19750 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55        ** TK_COLU
19760 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  MN: the value of
19770 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d   p5 for OP_Colum
19780 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
19790 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
197a0 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e  _AGG_FUNCTION: n
197b0 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a  esting depth */.
197c0 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
197d0 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64  nfo;     /* Used
197e0 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d   by TK_AGG_COLUM
197f0 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e  N and TK_AGG_FUN
19800 43 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e 69 6f 6e  CTION */.  union
19810 20 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54   {.    Table *pT
19820 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
19830 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54 61 62 6c   TK_COLUMN: Tabl
19840 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6c  e containing col
19850 75 6d 6e 2e 20 43 61 6e 20 62 65 20 4e 55 4c 4c  umn. Can be NULL
19860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19870 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
19880 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  or a column of a
19890 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78  n index on an ex
198a0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
198b0 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20  Window *pWin;   
198c0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 46 55 4e         /* TK_FUN
198d0 43 54 49 4f 4e 3a 20 57 69 6e 64 6f 77 20 64 65  CTION: Window de
198e0 66 69 6e 69 74 69 6f 6e 20 66 6f 72 20 74 68 65  finition for the
198f0 20 66 75 6e 63 20 2a 2f 0a 20 20 20 20 73 74 72   func */.    str
19900 75 63 74 20 7b 20 20 20 20 20 20 20 20 20 20 20  uct {           
19910 20 20 20 20 2f 2a 20 54 4b 5f 49 4e 2c 20 54 4b      /* TK_IN, TK
19920 5f 53 45 4c 45 43 54 2c 20 61 6e 64 20 54 4b 5f  _SELECT, and TK_
19930 45 58 49 53 54 53 20 2a 2f 0a 20 20 20 20 20 20  EXISTS */.      
19940 69 6e 74 20 69 41 64 64 72 3b 20 20 20 20 20 20  int iAddr;      
19950 20 20 20 20 20 20 20 2f 2a 20 53 75 62 72 6f 75         /* Subrou
19960 74 69 6e 65 20 65 6e 74 72 79 20 61 64 64 72 65  tine entry addre
19970 73 73 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20  ss */.      int 
19980 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 20 20  regReturn;      
19990 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75     /* Register u
199a0 73 65 64 20 74 6f 20 68 6f 6c 64 20 72 65 74 75  sed to hold retu
199b0 72 6e 20 61 64 64 72 65 73 73 20 2a 2f 0a 20 20  rn address */.  
199c0 20 20 7d 20 73 75 62 3b 0a 20 20 7d 20 79 3b 0a    } sub;.  } y;.
199d0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
199e0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
199f0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73  meanings of bits
19a00 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
19a10 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
19a20 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  fine EP_FromJoin
19a30 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72    0x000001 /* Or
19a40 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55  iginates in ON/U
19a50 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f  SING clause of o
19a60 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
19a70 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
19a80 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f    0x000002 /* Co
19a90 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
19aa0 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
19ab0 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
19ac0 65 20 45 50 5f 48 61 73 46 75 6e 63 20 20 20 30  e EP_HasFunc   0
19ad0 78 30 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61  x000004 /* Conta
19ae0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
19af0 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79  functions of any
19b00 20 6b 69 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65   kind */.#define
19b10 20 45 50 5f 46 69 78 65 64 43 6f 6c 20 20 30 78   EP_FixedCol  0x
19b20 30 30 30 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c  000008 /* TK_Col
19b30 75 6d 6e 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e  umn with a known
19b40 20 66 69 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a   fixed value */.
19b50 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
19b60 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a  nct  0x000010 /*
19b70 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
19b80 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
19b90 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
19ba0 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
19bb0 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
19bc0 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
19bd0 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
19be0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
19bf0 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
19c00 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
19c10 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
19c20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
19c30 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
19c40 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
19c50 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
19c60 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
19c70 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
19c80 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
19c90 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
19ca0 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
19cb0 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
19cc0 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
19cd0 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
19ce0 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
19cf0 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
19d00 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
19d10 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
19d20 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
19d30 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
19d40 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
19d50 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
19d60 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
19d70 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
19d80 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
19d90 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
19da0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
19db0 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
19dc0 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c   /* COLLATE, AS,
19dd0 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a   or UNLIKELY */.
19de0 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
19df0 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
19e00 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
19e10 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
19e20 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
19e30 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
19e40 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
19e50 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
19e60 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
19e70 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
19e80 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30  e EP_Static    0
19e90 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20  x008000 /* Held 
19ea0 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
19eb0 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
19ec0 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
19ed0 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
19ee0 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
19ef0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
19f00 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
19f10 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
19f20 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
19f30 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
19f40 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
19f50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
19f60 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
19f70 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
19f80 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
19f90 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
19fa0 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63  ine EP_ConstFunc
19fb0 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53   0x080000 /* A S
19fc0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
19fd0 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20  ANT or _SLOCHNG 
19fe0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
19ff0 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c  ine EP_CanBeNull
1a000 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e   0x100000 /* Can
1a010 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65   be null despite
1a020 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
1a030 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
1a040 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32  EP_Subquery  0x2
1a050 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00000 /* Tree co
1a060 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45  ntains a TK_SELE
1a070 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  CT operator */.#
1a080 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20  define EP_Alias 
1a090 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20      0x400000 /* 
1a0a0 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  Is an alias for 
1a0b0 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  a result set col
1a0c0 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  umn */.#define E
1a0d0 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78 38 30  P_Leaf      0x80
1a0e0 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65  0000 /* Expr.pLe
1a0f0 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e  ft, .pRight, .u.
1a100 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c  pSelect all NULL
1a110 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 57   */.#define EP_W
1a120 69 6e 46 75 6e 63 20 20 30 78 31 30 30 30 30 30  inFunc  0x100000
1a130 30 20 2f 2a 20 54 4b 5f 46 55 4e 43 54 49 4f 4e  0 /* TK_FUNCTION
1a140 20 77 69 74 68 20 45 78 70 72 2e 79 2e 70 57 69   with Expr.y.pWi
1a150 6e 20 73 65 74 20 2a 2f 0a 23 64 65 66 69 6e 65  n set */.#define
1a160 20 45 50 5f 53 75 62 72 74 6e 20 20 20 30 78 32   EP_Subrtn   0x2
1a170 30 30 30 30 30 30 20 2f 2a 20 55 73 65 73 20 45  000000 /* Uses E
1a180 78 70 72 2e 79 2e 73 75 62 2e 20 54 4b 5f 49 4e  xpr.y.sub. TK_IN
1a190 2c 20 5f 53 45 4c 45 43 54 2c 20 6f 72 20 5f 45  , _SELECT, or _E
1a1a0 58 49 53 54 53 20 2a 2f 0a 23 64 65 66 69 6e 65  XISTS */.#define
1a1b0 20 45 50 5f 51 75 6f 74 65 64 20 20 20 30 78 34   EP_Quoted   0x4
1a1c0 30 30 30 30 30 30 20 2f 2a 20 54 4b 5f 49 44 20  000000 /* TK_ID 
1a1d0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 71  was originally q
1a1e0 75 6f 74 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  uoted */../*.** 
1a1f0 54 68 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  The EP_Propagate
1a200 20 6d 61 73 6b 20 69 73 20 61 20 73 65 74 20 6f   mask is a set o
1a210 66 20 70 72 6f 70 65 72 74 69 65 73 20 74 68 61  f properties tha
1a220 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  t automatically 
1a230 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70 77  propagate.** upw
1a240 61 72 64 73 20 69 6e 74 6f 20 70 61 72 65 6e 74  ards into parent
1a250 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69   nodes..*/.#defi
1a260 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20  ne EP_Propagate 
1a270 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53  (EP_Collate|EP_S
1a280 75 62 71 75 65 72 79 7c 45 50 5f 48 61 73 46 75  ubquery|EP_HasFu
1a290 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  nc)../*.** These
1a2a0 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75   macros can be u
1a2b0 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74  sed to test, set
1a2c0 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20  , or clear bits 
1a2d0 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
1a2e0 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
1a2f0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72  define ExprHasPr
1a300 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
1a310 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
1a320 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78  )!=0).#define Ex
1a330 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79  prHasAllProperty
1a340 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c  (E,P)  (((E)->fl
1a350 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
1a360 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72  define ExprSetPr
1a370 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
1a380 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
1a390 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61  #define ExprClea
1a3a0 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  rProperty(E,P)  
1a3b0 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50   (E)->flags&=~(P
1a3c0 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65  )../* The ExprSe
1a3d0 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d  tVVAProperty() m
1a3e0 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
1a3f0 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56   Verification, V
1a400 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e  alidation,.** an
1a410 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20  d Accreditation 
1a420 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20  only.  It works 
1a430 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70  like ExprSetProp
1a440 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56  erty() during VV
1a450 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62  A.** processes b
1a460 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f  ut is a no-op fo
1a470 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23  r delivery..*/.#
1a480 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1a490 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  UG.# define Expr
1a4a0 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
1a4b0 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c  ,P)  (E)->flags|
1a4c0 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  =(P).#else.# def
1a4d0 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
1a4e0 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64  operty(E,P).#end
1a4f0 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
1a500 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
1a510 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
1a520 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20  s required by a 
1a530 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73  normal Expr.** s
1a540 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73  truct, an Expr s
1a550 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
1a560 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73  P_Reduced flag s
1a570 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73  et in Expr.flags
1a580 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20  .** and an Expr 
1a590 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
1a5a0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
1a5b0 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  g set..*/.#defin
1a5c0 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20  e EXPR_FULLSIZE 
1a5d0 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
1a5e0 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20  (Expr)          
1a5f0 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f   /* Full size */
1a600 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45  .#define EXPR_RE
1a610 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20  DUCEDSIZE       
1a620 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69   offsetof(Expr,i
1a630 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f  Table)  /* Commo
1a640 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64  n features */.#d
1a650 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e  efine EXPR_TOKEN
1a660 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66  ONLYSIZE      of
1a670 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66  fsetof(Expr,pLef
1a680 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65  t)   /* Fewer fe
1a690 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  atures */../*.**
1a6a0 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
1a6b0 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72   the sqlite3Expr
1a6c0 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  Dup() function. 
1a6d0 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63  See the header c
1a6e0 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20  omment.** above 
1a6f0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
1a700 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
1a710 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50  .#define EXPRDUP
1a720 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20  _REDUCE         
1a730 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20  0x0001  /* Used 
1a740 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70  reduced-size Exp
1a750 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  r nodes */../*.*
1a760 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72  * A list of expr
1a770 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65  essions.  Each e
1a780 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70  xpression may op
1a790 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a  tionally have a.
1a7a0 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70  ** name.  An exp
1a7b0 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69  r/name combinati
1a7c0 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
1a7d0 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
1a7e0 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c  such.** as the l
1a7f0 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20  ist of "expr AS 
1a800 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f  ID" fields follo
1a810 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20  wing a "SELECT" 
1a820 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73  or in the.** lis
1a830 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22  t of "ID = expr"
1a840 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44   items in an UPD
1a850 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20  ATE.  A list of 
1a860 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a  expressions can.
1a870 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ** also be used 
1a880 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
1a890 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69  to a function, i
1a8a0 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
1a8b0 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c   a.zName.** fiel
1a8c0 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  d is not used..*
1a8d0 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20  *.** By default 
1a8e0 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66  the Expr.zSpan f
1a8f0 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d  ield holds a hum
1a900 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63  an-readable desc
1a910 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ription of.** th
1a920 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
1a930 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  t is used in the
1a940 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65   generation of e
1a950 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e  rror messages an
1a960 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65  d.** column labe
1a970 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ls.  In this cas
1a980 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73  e, Expr.zSpan is
1a990 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74   typically the t
1a9a0 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75  ext of a.** colu
1a9b0 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  mn expression as
1a9c0 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20   it exists in a 
1a9d0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1a9e0 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a  .  However, if.*
1a9f0 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62  * the bSpanIsTab
1aa00 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
1aa10 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72  en zSpan is over
1aa20 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74  loaded to mean t
1aa30 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68  he name.** of th
1aa40 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
1aa50 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54  in the form: DAT
1aa60 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55  ABASE.TABLE.COLU
1aa70 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a  MN.  This later.
1aa80 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20  ** form is used 
1aa90 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  for name resolut
1aaa0 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20  ion with nested 
1aab0 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f  FROM clauses..*/
1aac0 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
1aad0 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1aaf0 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
1ab00 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
1ab10 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
1ab20 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
1ab30 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
1ab40 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
1ab50 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
1ab60 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  pr;            /
1ab70 2a 20 54 68 65 20 70 61 72 73 65 20 74 72 65 65  * The parse tree
1ab80 20 66 6f 72 20 74 68 69 73 20 65 78 70 72 65 73   for this expres
1ab90 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
1aba0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
1abb0 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73      /* Token ass
1abc0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
1abd0 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
1abe0 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b      char *zSpan;
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1ac00 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20  riginal text of 
1ac10 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  the expression *
1ac20 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64  /.    u8 sortOrd
1ac30 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
1ac40 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30   1 for DESC or 0
1ac50 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20   for ASC */.    
1ac60 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31  unsigned done :1
1ac70 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61  ;       /* A fla
1ac80 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68  g to indicate wh
1ac90 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  en processing is
1aca0 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20   finished */.   
1acb0 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49   unsigned bSpanI
1acc0 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61  sTab :1; /* zSpa
1acd0 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45  n holds DB.TABLE
1ace0 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75  .COLUMN */.    u
1acf0 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65  nsigned reusable
1ad00 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61   :1;   /* Consta
1ad10 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  nt expression is
1ad20 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20   reusable */.   
1ad30 20 75 6e 73 69 67 6e 65 64 20 62 53 6f 72 74 65   unsigned bSorte
1ad40 72 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65  rRef :1; /* Defe
1ad50 72 20 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74  r evaluation unt
1ad60 69 6c 20 61 66 74 65 72 20 73 6f 72 74 69 6e 67  il after sorting
1ad70 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
1ad80 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20        struct {. 
1ad90 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65         u16 iOrde
1ada0 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20  rByCol;      /* 
1adb0 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f  For ORDER BY, co
1adc0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72  lumn number in r
1add0 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20  esult set */.   
1ade0 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b       u16 iAlias;
1adf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1ae00 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61  dex into Parse.a
1ae10 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d  Alias[] for zNam
1ae20 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a  e */.      } x;.
1ae30 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74        int iConst
1ae40 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a  ExprReg;      /*
1ae50 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69   Register in whi
1ae60 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73  ch Expr value is
1ae70 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d   cached */.    }
1ae80 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   u;.  } a[1];   
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1aea0 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65  * One slot for e
1aeb0 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ach expression i
1aec0 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1aed0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1aee0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
1aef0 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
1af00 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
1af10 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
1af20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
1af30 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
1af40 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
1af50 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
1af60 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
1af70 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
1af80 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
1af90 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
1afa0 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
1afb0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
1afc0 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
1afd0 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
1afe0 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
1aff0 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
1b000 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
1b010 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
1b020 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
1b030 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
1b040 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
1b050 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
1b060 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
1b070 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
1b080 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
1b090 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
1b0a0 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
1b0b0 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
1b0c0 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
1b0d0 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
1b0e0 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
1b0f0 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
1b100 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
1b110 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
1b120 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
1b130 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
1b140 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
1b150 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1b160 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
1b170 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
1b180 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
1b190 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
1b1a0 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
1b1b0 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
1b1c0 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
1b1d0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
1b1e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1b1f0 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73  ucture describes
1b200 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1b210 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
1b220 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20  tement..** Each 
1b230 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
1b240 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
1b250 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61  ause is a separa
1b260 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a  te element of.**
1b270 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d   the SrcList.a[]
1b280 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69   array..**.** Wi
1b290 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  th the addition 
1b2a0 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  of multiple data
1b2b0 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68  base support, th
1b2c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1b2d0 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73  cture.** can als
1b2e0 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73  o be used to des
1b2f0 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c  cribe a particul
1b300 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73  ar table such as
1b310 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a   the table that.
1b320 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62  ** is modified b
1b330 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  y an INSERT, DEL
1b340 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73  ETE, or UPDATE s
1b350 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74  tatement.  In st
1b360 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73  andard SQL,.** s
1b370 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74  uch a table must
1b380 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d   be a simple nam
1b390 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53  e: ID.  But in S
1b3a0 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65  QLite, the table
1b3b0 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69   can.** now be i
1b3c0 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64  dentified by a d
1b3d0 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20  atabase name, a 
1b3e0 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61  dot, then the ta
1b3f0 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e  ble name: ID.ID.
1b400 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74  .**.** The joint
1b410 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73  ype starts out s
1b420 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20  howing the join 
1b430 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65  type between the
1b440 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a   current table.*
1b450 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74  * and the next t
1b460 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74  able on the list
1b470 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75  .  The parser bu
1b480 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68  ilds the list th
1b490 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73  is way..** But s
1b4a0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
1b4b0 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74  ftJoinType() lat
1b4c0 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f  er shifts the jo
1b4d0 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20  intypes so that 
1b4e0 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65  each.** jointype
1b4f0 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a   expresses the j
1b500 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20  oin between the 
1b510 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
1b520 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a  evious table..**
1b530 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73  .** In the colUs
1b540 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69  ed field, the hi
1b550 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69  gh-order bit (bi
1b560 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20  t 63) is set if 
1b570 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e  the table.** con
1b580 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
1b590 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74  63 columns and t
1b5a0 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65  he 64-th or late
1b5b0 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  r column is used
1b5c0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c  ..*/.struct SrcL
1b5d0 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63  ist {.  int nSrc
1b5e0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1b5f0 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20  er of tables or 
1b600 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68  subqueries in th
1b610 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
1b620 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20  .  u32 nAlloc;  
1b630 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b640 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
1b650 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20  ed in a[] below 
1b660 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c  */.  struct SrcL
1b670 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53  ist_item {.    S
1b680 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
1b690 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68   /* Schema to wh
1b6a0 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73  ich this item is
1b6b0 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68   fixed */.    ch
1b6c0 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
1b6d0 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
1b6e0 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
1b6f0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
1b700 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1b710 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
1b720 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
1b730 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
1b740 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
1b750 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
1b760 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
1b770 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
1b780 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
1b790 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
1b7a0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1b7b0 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
1b7c0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
1b7d0 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
1b7e0 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
1b7f0 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
1b800 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
1b810 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
1b820 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
1b830 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
1b840 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
1b850 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
1b860 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
1b870 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
1b880 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
1b890 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e  illSub */.    in
1b8a0 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
1b8b0 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c  /* Registers hol
1b8c0 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20  ding results of 
1b8d0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
1b8e0 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
1b8f0 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20     u8 jointype; 
1b900 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20       /* Type of 
1b910 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69  join between thi
1b920 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  s table and the 
1b930 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20  previous */.    
1b940 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e    unsigned notIn
1b950 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20  dexed :1;    /* 
1b960 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
1b970 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63   a NOT INDEXED c
1b980 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75  lause */.      u
1b990 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65  nsigned isIndexe
1b9a0 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75  dBy :1;   /* Tru
1b9b0 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  e if there is an
1b9c0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
1b9d0 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  se */.      unsi
1b9e0 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a  gned isTabFunc :
1b9f0 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  1;     /* True i
1ba00 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66  f table-valued-f
1ba10 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a  unction syntax *
1ba20 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1ba30 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31   isCorrelated :1
1ba40 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75  ;  /* True if su
1ba50 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65  b-query is corre
1ba60 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75  lated */.      u
1ba70 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75  nsigned viaCorou
1ba80 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70  tine :1;  /* Imp
1ba90 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f  lemented as a co
1baa0 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20  -routine */.    
1bab0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63    unsigned isRec
1bac0 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20  ursive :1;   /* 
1bad0 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69  True for recursi
1bae0 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20  ve reference in 
1baf0 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67  WITH */.    } fg
1bb00 3b 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f  ;.    int iCurso
1bb10 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56  r;      /* The V
1bb20 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  DBE cursor numbe
1bb30 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  r used to access
1bb40 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
1bb50 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20     Expr *pOn;   
1bb60 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63       /* The ON c
1bb70 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
1bb80 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70  */.    IdList *p
1bb90 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20  Using;   /* The 
1bba0 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
1bbb0 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69  a join */.    Bi
1bbc0 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20  tmask colUsed;  
1bbd0 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20  /* Bit N (1<<N) 
1bbe0 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20  set if column N 
1bbf0 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20  of pTab is used 
1bc00 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
1bc10 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65       char *zInde
1bc20 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65  xedBy;    /* Ide
1bc30 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e  ntifier from "IN
1bc40 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78  DEXED BY <zIndex
1bc50 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  >" clause */.   
1bc60 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75     ExprList *pFu
1bc70 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d  ncArg;  /* Argum
1bc80 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61  ents to table-va
1bc90 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f  lued-function */
1bca0 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49  .    } u1;.    I
1bcb0 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20  ndex *pIBIndex; 
1bcc0 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74   /* Index struct
1bcd0 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ure correspondin
1bce0 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64  g to u1.zIndexed
1bcf0 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  By */.  } a[1]; 
1bd00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1bd10 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
1bd20 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
1bd30 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
1bd40 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
1bd50 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
1bd60 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
1bd70 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
1bd80 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
1bd90 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
1bda0 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
1bdb0 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
1bdc0 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
1bdd0 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
1bde0 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
1bdf0 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
1be00 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
1be10 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
1be20 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
1be30 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
1be40 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1be50 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
1be60 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
1be70 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
1be80 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
1be90 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
1bea0 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
1beb0 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
1bec0 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
1bed0 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
1bee0 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
1bef0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
1bf00 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
1bf10 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
1bf20 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
1bf30 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
1bf40 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69  * Flags appropri
1bf50 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72  ate for the wctr
1bf60 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  lFlags parameter
1bf70 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65   of sqlite3Where
1bf80 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74  Begin().** and t
1bf90 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74  he WhereInfo.wct
1bfa0 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a  rlFlags member..
1bfb0 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1bfc0 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
1bfd0 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
1bfe0 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53  .**     WHERE_US
1bff0 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46  E_LIMIT  == SF_F
1c000 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65  ixedLimit.*/.#de
1c010 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1c020 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30  BY_NORMAL   0x00
1c030 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23  00 /* No-op */.#
1c040 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1c050 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78  ERBY_MIN      0x
1c060 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59  0001 /* ORDER BY
1c070 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
1c080 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  min() func */.#d
1c090 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1c0a0 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30  RBY_MAX      0x0
1c0b0 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  002 /* ORDER BY 
1c0c0 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
1c0d0 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  ax() func */.#de
1c0e0 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
1c0f0 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30  SS_DESIRED  0x00
1c100 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f  04 /* Want to do
1c110 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45   one-pass UPDATE
1c120 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  /DELETE */.#defi
1c130 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
1c140 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38  _MULTIROW 0x0008
1c150 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f   /* ONEPASS is o
1c160 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  k with multiple 
1c170 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1c180 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
1c190 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a  _OK    0x0010 /*
1c1a0 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
1c1b0 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
1c1c0 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
1c1d0 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45  ERE_OR_SUBCLAUSE
1c1e0 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50       0x0020 /* P
1c1f0 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d  rocessing a sub-
1c200 57 48 45 52 45 20 61 73 20 70 61 72 74 20 6f 66  WHERE as part of
1c210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c230 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52         ** the OR
1c240 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a   optimization  *
1c250 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c260 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20  GROUPBY         
1c270 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65   0x0040 /* pOrde
1c280 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rBy is really a 
1c290 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
1c2a0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1c2b0 43 54 42 59 20 20 20 20 20 20 20 30 78 30 30 38  CTBY       0x008
1c2c0 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73  0 /* pOrderby is
1c2d0 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e   really a DISTIN
1c2e0 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  CT clause */.#de
1c2f0 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f  fine WHERE_WANT_
1c300 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 31  DISTINCT    0x01
1c310 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74  00 /* All output
1c320 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73   needs to be dis
1c330 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65  tinct */.#define
1c340 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f   WHERE_SORTBYGRO
1c350 55 50 20 20 20 20 20 20 30 78 30 32 30 30 20 2f  UP      0x0200 /
1c360 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65  * Support sqlite
1c370 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29  3WhereIsSorted()
1c380 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c390 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20  E_SEEK_TABLE    
1c3a0 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20     0x0400 /* Do 
1c3b0 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20  not defer seeks 
1c3c0 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f  on main table */
1c3d0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1c3e0 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20  RDERBY_LIMIT    
1c3f0 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42  0x0800 /* ORDERB
1c400 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69  Y+LIMIT on the i
1c410 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65  nner loop */.#de
1c420 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f  fine WHERE_SEEK_
1c430 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30  UNIQ_TABLE  0x10
1c440 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66  00 /* Do not def
1c450 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71  er seeks if uniq
1c460 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ue */.          
1c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c480 20 20 20 20 20 30 78 32 30 30 30 20 20 20 20 6e       0x2000    n
1c490 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1c4a0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
1c4b0 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20  RE_USE_LIMIT    
1c4c0 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73      0x4000 /* Us
1c4d0 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63  e the LIMIT in c
1c4e0 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f  ost estimates */
1c4f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c500 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1c510 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x8000    not cu
1c520 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1c530 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  ./* Allowed retu
1c540 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
1c550 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
1c560 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69  tinct().*/.#defi
1c570 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1c580 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f  T_NOOP      0  /
1c590 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  * DISTINCT keywo
1c5a0 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  rd not used */.#
1c5b0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1c5c0 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20  TINCT_UNIQUE    
1c5d0 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61  1  /* No duplica
1c5e0 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  tes */.#define W
1c5f0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52  HERE_DISTINCT_OR
1c600 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c  DERED   2  /* Al
1c610 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65  l duplicates are
1c620 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65   adjacent */.#de
1c630 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1c640 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20  NCT_UNORDERED 3 
1c650 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61   /* Duplicates a
1c660 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a  re scattered */.
1c670 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e  ./*.** A NameCon
1c680 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63  text defines a c
1c690 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20  ontext in which 
1c6a0 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65  to resolve table
1c6b0 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e   and column.** n
1c6c0 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65  ames.  The conte
1c6d0 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  xt consists of a
1c6e0 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20   list of tables 
1c6f0 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66  (the pSrcList) f
1c700 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69  ield and.** a li
1c710 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72  st of named expr
1c720 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e  ession (pEList).
1c730 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72    The named expr
1c740 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a  ession list may.
1c750 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65  ** be NULL.  The
1c760 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64   pSrc correspond
1c770 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c  s to the FROM cl
1c780 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
1c790 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61   or.** to the ta
1c7a0 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74  ble being operat
1c7b0 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c  ed on by INSERT,
1c7c0 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45   UPDATE, or DELE
1c7d0 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69  TE.  The.** pELi
1c7e0 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
1c7f0 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  o the result set
1c800 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64   of a SELECT and
1c810 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20   is NULL for.** 
1c820 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73  other statements
1c830 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74  ..**.** NameCont
1c840 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74  exts can be nest
1c850 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76  ed.  When resolv
1c860 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69  ing names, the i
1c870 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e  nner-most.** con
1c880 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
1c890 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
1c8a0 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
1c8b0 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
1c8c0 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
1c8d0 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
1c8e0 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
1c8f0 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
1c900 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
1c910 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
1c920 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
1c930 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
1c940 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
1c950 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
1c960 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
1c970 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
1c980 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
1c990 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
1c9a0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
1c9b0 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
1c9c0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  ted..**.** Each 
1c9d0 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20  subquery gets a 
1c9e0 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e  new NameContext.
1c9f0 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c    The pNext fiel
1ca00 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  d points to the.
1ca10 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69  ** NameContext i
1ca20 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65  n the parent que
1ca30 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72  ry.  Thus the pr
1ca40 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e  ocess of scannin
1ca50 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  g the.** NameCon
1ca60 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73  text list corres
1ca70 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69  ponds to searchi
1ca80 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65  ng through succe
1ca90 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a  ssively outer.**
1caa0 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b   subqueries look
1cab0 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e  ing for a match.
1cac0 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43  .*/.struct NameC
1cad0 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65  ontext {.  Parse
1cae0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1caf0 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f  /* The parser */
1cb00 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
1cb10 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  List;   /* One o
1cb20 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73  r more tables us
1cb30 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61  ed to resolve na
1cb40 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  mes */.  union {
1cb50 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
1cb60 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74  EList;    /* Opt
1cb70 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65  ional list of re
1cb80 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73  sult-set columns
1cb90 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f 20   */.    AggInfo 
1cba0 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20  *pAggInfo;   /* 
1cbb0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
1cbc0 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20  t aggregates at 
1cbd0 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  this level */.  
1cbe0 20 20 55 70 73 65 72 74 20 2a 70 55 70 73 65 72    Upsert *pUpser
1cbf0 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e  t;     /* ON CON
1cc00 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e 66  FLICT clause inf
1cc10 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 6e  ormation from an
1cc20 20 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20 75   upsert */.  } u
1cc30 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78  NC;.  NameContex
1cc40 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  t *pNext;  /* Ne
1cc50 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f  xt outer name co
1cc60 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72  ntext.  NULL for
1cc70 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20   outermost */.  
1cc80 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
1cc90 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1cca0 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64  f names resolved
1ccb0 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74   by this context
1ccc0 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
1ccd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1cce0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65  mber of errors e
1ccf0 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65  ncountered while
1cd00 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
1cd10 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67   */.  u16 ncFlag
1cd20 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65  s;         /* Ze
1cd30 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20  ro or more NC_* 
1cd40 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65  flags defined be
1cd50 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  low */.  Select 
1cd60 2a 70 57 69 6e 53 65 6c 65 63 74 3b 20 20 2f 2a  *pWinSelect;  /*
1cd70 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1cd80 74 20 66 6f 72 20 61 6e 79 20 77 69 6e 64 6f 77  t for any window
1cd90 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b   functions */.};
1cda0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1cdb0 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e  values for the N
1cdc0 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c  ameContext, ncFl
1cdd0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
1cde0 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1cdf0 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20  ts (all checked 
1ce00 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
1ce10 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20  *    NC_HasAgg  
1ce20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a    == SF_HasAgg.*
1ce30 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  *    NC_MinMaxAg
1ce40 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67  g == SF_MinMaxAg
1ce50 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43  g == SQLITE_FUNC
1ce60 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64  _MINMAX.**.*/.#d
1ce70 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67  efine NC_AllowAg
1ce80 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67  g  0x0001  /* Ag
1ce90 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1cea0 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65  s are allowed he
1ceb0 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  re */.#define NC
1cec0 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30 30  _PartIdx   0x000
1ced0 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  2  /* True if re
1cee0 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61  solving a partia
1cef0 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f  l index WHERE */
1cf00 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68  .#define NC_IsCh
1cf10 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a  eck   0x0004  /*
1cf20 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1cf30 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48  ng names in a CH
1cf40 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ECK constraint *
1cf50 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41  /.#define NC_InA
1cf60 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f  ggFunc 0x0008  /
1cf70 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a  * True if analyz
1cf80 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ing arguments to
1cf90 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a   an agg func */.
1cfa0 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67  #define NC_HasAg
1cfb0 67 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  g    0x0010  /* 
1cfc0 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  One or more aggr
1cfd0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
1cfe0 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1cff0 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78 30  NC_IdxExpr   0x0
1d000 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  020  /* True if 
1d010 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e  resolving column
1d020 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45  s of CREATE INDE
1d030 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  X */.#define NC_
1d040 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 34 30  VarSelect 0x0040
1d050 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74 65    /* A correlate
1d060 64 20 73 75 62 71 75 65 72 79 20 68 61 73 20 62  d subquery has b
1d070 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  een seen */.#def
1d080 69 6e 65 20 4e 43 5f 55 45 4c 69 73 74 20 20 20  ine NC_UEList   
1d090 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65   0x0080  /* True
1d0a0 20 69 66 20 75 4e 43 2e 70 45 4c 69 73 74 20 69   if uNC.pEList i
1d0b0 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  s used */.#defin
1d0c0 65 20 4e 43 5f 55 41 67 67 49 6e 66 6f 20 20 30  e NC_UAggInfo  0
1d0d0 78 30 31 30 30 20 20 2f 2a 20 54 72 75 65 20 69  x0100  /* True i
1d0e0 66 20 75 4e 43 2e 70 41 67 67 49 6e 66 6f 20 69  f uNC.pAggInfo i
1d0f0 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  s used */.#defin
1d100 65 20 4e 43 5f 55 55 70 73 65 72 74 20 20 20 30  e NC_UUpsert   0
1d110 78 30 32 30 30 20 20 2f 2a 20 54 72 75 65 20 69  x0200  /* True i
1d120 66 20 75 4e 43 2e 70 55 70 73 65 72 74 20 69 73  f uNC.pUpsert is
1d130 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1d140 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78   NC_MinMaxAgg 0x
1d150 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78  1000  /* min/max
1d160 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e   aggregates seen
1d170 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76  .  See note abov
1d180 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  e */.#define NC_
1d190 43 6f 6d 70 6c 65 78 20 20 20 30 78 32 30 30 30  Complex   0x2000
1d1a0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 66    /* True if a f
1d1b0 75 6e 63 74 69 6f 6e 20 6f 72 20 73 75 62 71 75  unction or subqu
1d1c0 65 72 79 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ery seen */.#def
1d1d0 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20  ine NC_AllowWin 
1d1e0 20 30 78 34 30 30 30 20 20 2f 2a 20 57 69 6e 64   0x4000  /* Wind
1d1f0 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  ow functions are
1d200 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
1d210 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1d220 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1d230 77 69 6e 67 20 6f 62 6a 65 63 74 20 64 65 73 63  wing object desc
1d240 72 69 62 65 73 20 61 20 73 69 6e 67 6c 65 20 4f  ribes a single O
1d250 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c  N CONFLICT.** cl
1d260 61 75 73 65 20 69 6e 20 61 6e 20 75 70 73 65 72  ause in an upser
1d270 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 55 70  t..**.** The pUp
1d280 73 65 72 74 54 61 72 67 65 74 20 66 69 65 6c 64  sertTarget field
1d290 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 69 66 20   is only set if 
1d2a0 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1d2b0 63 6c 61 75 73 65 20 69 6e 63 6c 75 64 65 73 0a  clause includes.
1d2c0 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67  ** conflict-targ
1d2d0 65 74 20 63 6c 61 75 73 65 2e 20 20 28 49 6e 20  et clause.  (In 
1d2e0 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 61 2c 62  "ON CONFLICT(a,b
1d2f0 29 22 20 74 68 65 20 22 28 61 2c 62 29 22 20 69  )" the "(a,b)" i
1d300 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63  s the.** conflic
1d310 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e  t-target clause.
1d320 29 20 20 54 68 65 20 70 55 70 73 65 72 74 54 61  )  The pUpsertTa
1d330 72 67 65 74 57 68 65 72 65 20 69 73 20 74 68 65  rgetWhere is the
1d340 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45   optional.** WHE
1d350 52 45 20 63 6c 61 75 73 65 20 75 73 65 64 20 74  RE clause used t
1d360 6f 20 69 64 65 6e 74 69 66 79 20 70 61 72 74 69  o identify parti
1d370 61 6c 20 75 6e 69 71 75 65 20 69 6e 64 65 78 65  al unique indexe
1d380 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65 72 74  s..**.** pUpsert
1d390 53 65 74 20 69 73 20 74 68 65 20 6c 69 73 74 20  Set is the list 
1d3a0 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70 72 20 74  of column=expr t
1d3b0 65 72 6d 73 20 6f 66 20 74 68 65 20 55 50 44 41  erms of the UPDA
1d3c0 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 2a  TE statement. .*
1d3d0 2a 20 54 68 65 20 70 55 70 73 65 72 74 53 65 74  * The pUpsertSet
1d3e0 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c 20 66   field is NULL f
1d3f0 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  or a ON CONFLICT
1d400 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20 54 68   DO NOTHING.  Th
1d410 65 0a 2a 2a 20 70 55 70 73 65 72 74 57 68 65 72  e.** pUpsertWher
1d420 65 20 69 73 20 74 68 65 20 57 48 45 52 45 20 63  e is the WHERE c
1d430 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 55 50  lause for the UP
1d440 44 41 54 45 20 61 6e 64 20 69 73 20 4e 55 4c 4c  DATE and is NULL
1d450 20 69 66 20 74 68 65 0a 2a 2a 20 57 48 45 52 45   if the.** WHERE
1d460 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74   clause is omitt
1d470 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 70  ed..*/.struct Up
1d480 73 65 72 74 20 7b 0a 20 20 45 78 70 72 4c 69 73  sert {.  ExprLis
1d490 74 20 2a 70 55 70 73 65 72 74 54 61 72 67 65 74  t *pUpsertTarget
1d4a0 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64  ;  /* Optional d
1d4b0 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 63 6f  escription of co
1d4c0 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 20  nflicting index 
1d4d0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73 65  */.  Expr *pUpse
1d4e0 72 74 54 61 72 67 65 74 57 68 65 72 65 3b 20 2f  rtTargetWhere; /
1d4f0 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  * WHERE clause f
1d500 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78  or partial index
1d510 20 74 61 72 67 65 74 73 20 2a 2f 0a 20 20 45 78   targets */.  Ex
1d520 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53  prList *pUpsertS
1d530 65 74 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 53  et;     /* The S
1d540 45 54 20 63 6c 61 75 73 65 20 66 72 6f 6d 20 61  ET clause from a
1d550 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50  n ON CONFLICT UP
1d560 44 41 54 45 20 2a 2f 0a 20 20 45 78 70 72 20 2a  DATE */.  Expr *
1d570 70 55 70 73 65 72 74 57 68 65 72 65 3b 20 20 20  pUpsertWhere;   
1d580 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
1d590 75 73 65 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  use for the ON C
1d5a0 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a  ONFLICT UPDATE *
1d5b0 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64  /.  /* The field
1d5c0 73 20 61 62 6f 76 65 20 63 6f 6d 70 72 69 73 65  s above comprise
1d5d0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
1d5e0 66 6f 72 20 74 68 65 20 75 70 73 65 72 74 20 63  for the upsert c
1d5f0 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54 68 65 20  lause..  ** The 
1d600 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 61 72 65  fields below are
1d610 20 75 73 65 64 20 74 6f 20 74 72 61 6e 73 66 65   used to transfe
1d620 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  r information fr
1d630 6f 6d 20 74 68 65 20 49 4e 53 45 52 54 0a 20 20  om the INSERT.  
1d640 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 64 6f  ** processing do
1d650 77 6e 20 69 6e 74 6f 20 74 68 65 20 55 50 44 41  wn into the UPDA
1d660 54 45 20 70 72 6f 63 65 73 73 69 6e 67 20 77 68  TE processing wh
1d670 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67 20 63  ile generating c
1d680 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73 65 72 74  ode..  ** Upsert
1d690 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d 6f 72 79   owns the memory
1d6a0 20 61 6c 6c 6f 63 61 74 65 64 20 61 62 6f 76 65   allocated above
1d6b0 2c 20 62 75 74 20 6e 6f 74 20 74 68 65 20 6d 65  , but not the me
1d6c0 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20  mory below. */. 
1d6d0 20 49 6e 64 65 78 20 2a 70 55 70 73 65 72 74 49   Index *pUpsertI
1d6e0 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  dx;        /* Co
1d6f0 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20 70 55  nstraint that pU
1d700 70 73 65 72 74 54 61 72 67 65 74 20 69 64 65 6e  psertTarget iden
1d710 74 69 66 69 65 73 20 2a 2f 0a 20 20 53 72 63 4c  tifies */.  SrcL
1d720 69 73 74 20 2a 70 55 70 73 65 72 74 53 72 63 3b  ist *pUpsertSrc;
1d730 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
1d740 6f 20 62 65 20 75 70 64 61 74 65 64 20 2a 2f 0a  o be updated */.
1d750 20 20 69 6e 74 20 72 65 67 44 61 74 61 3b 20 20    int regData;  
1d760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1d770 69 72 73 74 20 72 65 67 69 73 74 65 72 20 68 6f  irst register ho
1d780 6c 64 69 6e 67 20 61 72 72 61 79 20 6f 66 20 56  lding array of V
1d790 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e 74 20 69  ALUES */.  int i
1d7a0 44 61 74 61 43 75 72 3b 20 20 20 20 20 20 20 20  DataCur;        
1d7b0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1d7c0 20 74 68 65 20 64 61 74 61 20 63 75 72 73 6f 72   the data cursor
1d7d0 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78 43 75   */.  int iIdxCu
1d7e0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1d7f0 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1d800 66 69 72 73 74 20 69 6e 64 65 78 20 63 75 72 73  first index curs
1d810 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  or */.};../*.** 
1d820 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1d830 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1d840 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
1d850 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
1d860 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
1d870 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
1d880 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
1d890 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
1d8a0 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63  See the header c
1d8b0 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20 63 6f  omment on the co
1d8c0 6d 70 75 74 65 4c 69 6d 69 74 52 65 67 69 73 74  mputeLimitRegist
1d8d0 65 72 73 28 29 20 72 6f 75 74 69 6e 65 20 66 6f  ers() routine fo
1d8e0 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c 65 64 20  r a.** detailed 
1d8f0 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74  description of t
1d900 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
1d910 65 20 69 4c 69 6d 69 74 20 61 6e 64 20 69 4f 66  e iLimit and iOf
1d920 66 73 65 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a  fset fields..**.
1d930 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  ** addrOpenEphm[
1d940 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69  ] entries contai
1d950 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  n the address of
1d960 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1d970 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68  l opcodes..** Th
1d980 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75  ese addresses mu
1d990 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20  st be stored so 
1d9a0 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62  that we can go b
1d9b0 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a  ack and fill in.
1d9c0 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46  ** the P4_KEYINF
1d9d0 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74  O and P2 paramet
1d9e0 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74  ers later.  Neit
1d9f0 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20  her the KeyInfo 
1da00 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  nor.** the numbe
1da10 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1da20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74  P2 can be comput
1da30 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  ed at the same t
1da40 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50  ime.** as the OP
1da50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75  _OpenEphm instru
1da60 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62  ction is coded b
1da70 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e  ecause not.** en
1da80 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ough information
1da90 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f   about the compo
1daa0 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f  und query is kno
1dab0 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74  wn at that point
1dac0 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f  ..** The KeyInfo
1dad0 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61   for addrOpenTra
1dae0 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e  n[0] and [1] con
1daf0 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20  tains collating 
1db00 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72  sequences.** for
1db10 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1db20 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f    The KeyInfo fo
1db30 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  r addrOpenEphm[2
1db40 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
1db50 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ting.** sequence
1db60 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20  s for the ORDER 
1db70 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  BY clause..*/.st
1db80 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20  ruct Select {.  
1db90 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
1dba0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69  ;      /* The fi
1dbb0 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75  elds of the resu
1dbc0 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  lt */.  u8 op;  
1dbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dbe0 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49  * One of: TK_UNI
1dbf0 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54  ON TK_ALL TK_INT
1dc00 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54  ERSECT TK_EXCEPT
1dc10 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65   */.  LogEst nSe
1dc20 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20  lectRow;     /* 
1dc30 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
1dc40 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
1dc50 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67  */.  u32 selFlag
1dc60 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  s;          /* V
1dc70 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75  arious SF_* valu
1dc80 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  es */.  int iLim
1dc90 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f  it, iOffset;   /
1dca0 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
1dcb0 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54  rs holding LIMIT
1dcc0 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65   & OFFSET counte
1dcd0 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 49  rs */.  u32 selI
1dce0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
1dcf0 2a 20 55 6e 69 71 75 65 20 69 64 65 6e 74 69 66  * Unique identif
1dd00 69 65 72 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ier number for t
1dd10 68 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20  his SELECT */.  
1dd20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  int addrOpenEphm
1dd30 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  [2];   /* OP_Ope
1dd40 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72  nEphem opcodes r
1dd50 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73  elated to this s
1dd60 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69  elect */.  SrcLi
1dd70 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20  st *pSrc;       
1dd80 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c    /* The FROM cl
1dd90 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
1dda0 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20  pWhere;         
1ddb0 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c   /* The WHERE cl
1ddc0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
1ddd0 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
1dde0 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59   /* The GROUP BY
1ddf0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1de00 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20  r *pHaving;     
1de10 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e      /* The HAVIN
1de20 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  G clause */.  Ex
1de30 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
1de40 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45  ;    /* The ORDE
1de50 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  R BY clause */. 
1de60 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b   Select *pPrior;
1de70 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72          /* Prior
1de80 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d   select in a com
1de90 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61  pound select sta
1dea0 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65  tement */.  Sele
1deb0 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ct *pNext;      
1dec0 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63     /* Next selec
1ded0 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e  t to the left in
1dee0 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20   a compound */. 
1def0 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20   Expr *pLimit;  
1df00 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54          /* LIMIT
1df10 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
1df20 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
1df30 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
1df40 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
1df50 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
1df60 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
1df70 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
1df80 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1df90 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43  _OMIT_WINDOWFUNC
1dfa0 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b  .  Window *pWin;
1dfb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
1dfc0 74 20 6f 66 20 77 69 6e 64 6f 77 20 66 75 6e 63  t of window func
1dfd0 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e 64 6f  tions */.  Windo
1dfe0 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20 20 20 20  w *pWinDefn;    
1dff0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 6e 61 6d    /* List of nam
1e000 65 64 20 77 69 6e 64 6f 77 20 64 65 66 69 6e 69  ed window defini
1e010 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  tions */.#endif.
1e020 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1e030 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
1e040 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
1e050 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
1e060 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
1e070 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a  lect Flag"..**.*
1e080 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1e090 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1e0a0 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a   via assert()).*
1e0b0 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67 20  *     SF_HasAgg 
1e0c0 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67      == NC_HasAgg
1e0d0 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61  .**     SF_MinMa
1e0e0 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d  xAgg  == NC_MinM
1e0f0 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c  axAgg     == SQL
1e100 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1e110 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c  **     SF_FixedL
1e120 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53  imit == WHERE_US
1e130 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69  E_LIMIT.*/.#defi
1e140 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
1e150 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a       0x00001  /*
1e160 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62   Output should b
1e170 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64  e DISTINCT */.#d
1e180 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20  efine SF_All    
1e190 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32 20          0x00002 
1e1a0 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65   /* Includes the
1e1b0 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a   ALL keyword */.
1e1c0 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c  #define SF_Resol
1e1d0 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30 30  ved       0x0000
1e1e0 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72  4  /* Identifier
1e1f0 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
1e200 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lved */.#define 
1e210 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20  SF_Aggregate    
1e220 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f    0x00008  /* Co
1e230 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74  ntains agg funct
1e240 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20  ions or a GROUP 
1e250 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  BY */.#define SF
1e260 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20 20  _HasAgg         
1e270 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74  0x00010  /* Cont
1e280 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
1e290 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
1e2a0 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
1e2b0 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f  eral  0x00020  /
1e2c0 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
1e2d0 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
1e2e0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
1e2f0 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78 30  panded       0x0
1e300 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0040  /* sqlite3
1e310 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
1e320 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
1e330 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
1e340 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30  ypeInfo    0x000
1e350 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  80  /* FROM subq
1e360 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
1e370 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64  e metadata */.#d
1e380 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
1e390 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30 20  d       0x00100 
1e3a0 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
1e3b0 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
1e3c0 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
1e3d0 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32 30  s         0x0020
1e3e0 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
1e3f0 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
1e400 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1e410 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20  SF_MultiValue   
1e420 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69    0x00400  /* Si
1e430 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d  ngle VALUES term
1e440 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1e450 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ows */.#define S
1e460 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
1e470 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72   0x00800  /* Par
1e480 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
1e490 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
1e4a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1e4b0 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30 78  inMaxAgg      0x
1e4c0 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  01000  /* Aggreg
1e4d0 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
1e4e0 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
1e4f0 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
1e500 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32 30  rsive      0x020
1e510 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
1e520 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
1e530 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
1e540 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64  #define SF_Fixed
1e550 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30 30  Limit     0x0400
1e560 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77  0  /* nSelectRow
1e570 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61   set by a consta
1e580 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66  nt LIMIT */.#def
1e590 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
1e5a0 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20 2f  ert   0x08000  /
1e5b0 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
1e5c0 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1e5d0 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1e5e0 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64  ine SF_Converted
1e5f0 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20 2f        0x10000  /
1e600 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70  * By convertComp
1e610 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1e620 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1e630 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64  e SF_IncludeHidd
1e640 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20  en  0x20000  /* 
1e650 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63  Include hidden c
1e660 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74  olumns in output
1e670 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1e680 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20 30 78  omplexResult  0x
1e690 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75 6c 74  40000  /* Result
1e6a0 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71 75 65   contains subque
1e6b0 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  ry or function *
1e6c0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73  /../*.** The res
1e6d0 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54  ults of a SELECT
1e6e0 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75   can be distribu
1e6f0 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  ted in several w
1e700 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a  ays, as defined.
1e710 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ** by one of the
1e720 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1e730 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72  s.  The "SRT" pr
1e740 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45  efix means "SELE
1e750 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70  CT Result.** Typ
1e760 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  e"..**.**     SR
1e770 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74  T_Union       St
1e780 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61  ore results as a
1e790 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72   key in a tempor
1e7a0 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20  ary index.**    
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7c0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70   identified by p
1e7d0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1e7e0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63  *.**     SRT_Exc
1e7f0 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20  ept      Remove 
1e800 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65  results from the
1e810 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
1e820 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1e830 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1e840 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65  xists      Store
1e850 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63   a 1 in memory c
1e860 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ell pDest->iSDPa
1e870 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  rm if the result
1e880 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e890 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e          set is n
1e8a0 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  ot empty..**.** 
1e8b0 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20      SRT_Discard 
1e8c0 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65      Throw the re
1e8d0 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69  sults away.  Thi
1e8e0 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c  s is used by SEL
1e8f0 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ECT.**          
1e900 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
1e910 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
1e920 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79  ggers whose only
1e930 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20   purpose is.**  
1e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e950 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65     the side-effe
1e960 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73  cts of functions
1e970 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
1e980 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65  he above are fre
1e990 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69  e to ignore thei
1e9a0 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  r ORDER BY claus
1e9b0 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a  e. Those that.**
1e9c0 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e   follow must hon
1e9d0 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
1e9e0 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
1e9f0 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20    SRT_Output    
1ea00 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77    Generate a row
1ea10 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e   of output (usin
1ea20 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52  g the OP_ResultR
1ea30 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
1ea40 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65            opcode
1ea50 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  ) for each row i
1ea60 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
1ea70 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1ea80 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79  Mem         Only
1ea90 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65   valid if the re
1eaa0 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65  sult is a single
1eab0 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20   column..**     
1eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ead0 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  Store the first 
1eae0 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69  column of the fi
1eaf0 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a  rst result row.*
1eb00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1eb10 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65        in registe
1eb20 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
1eb30 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68   then abandon th
1eb40 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20  e rest.**       
1eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1eb60 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69   the query.  Thi
1eb70 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d  s destination im
1eb80 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e  plies "LIMIT 1".
1eb90 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53  .**.**     SRT_S
1eba0 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72  et         The r
1ebb0 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20  esult must be a 
1ebc0 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20  single column.  
1ebd0 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20  Store each.**   
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebf0 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20    row of result 
1ec00 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61  as the key in ta
1ec10 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1ec20 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  rm..**          
1ec30 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79             Apply
1ec40 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44   the affinity pD
1ec50 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66  est->affSdst bef
1ec60 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20  ore storing.**  
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec80 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65     results.  Use
1ec90 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22  d to implement "
1eca0 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22  IN (SELECT ...)"
1ecb0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1ecc0 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61  EphemTab    Crea
1ecd0 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20  te an temporary 
1ece0 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1ecf0 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a  Parm and store.*
1ed00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ed10 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74        the result
1ed20 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73   there. The curs
1ed30 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20  or is left open 
1ed40 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20  after.**        
1ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1ed60 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73  urning.  This is
1ed70 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
1ed80 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20  except that.**  
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eda0 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74     this destinat
1edb0 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e  ion uses OP_Open
1edc0 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65  Ephemeral to cre
1edd0 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ate.**          
1ede0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74             the t
1edf0 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a  able first..**.*
1ee00 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74  *     SRT_Corout
1ee10 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61  ine   Generate a
1ee20 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74   co-routine that
1ee30 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72   returns a new r
1ee40 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20  ow of.**        
1ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
1ee60 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69  ults each time i
1ee70 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54  t is invoked.  T
1ee80 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a  he entry point.*
1ee90 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1eea0 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d        of the co-
1eeb0 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65  routine is store
1eec0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44  d in register pD
1eed0 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20  est->iSDParm.** 
1eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eef0 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75      and the resu
1ef00 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64  lt row is stored
1ef10 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74   in pDest->nDest
1ef20 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20   registers.**   
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef40 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20    starting with 
1ef50 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a  pDest->iSdst..**
1ef60 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c  .**     SRT_Tabl
1ef70 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1ef80 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61  sults in tempora
1ef90 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1efa0 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
1efb0 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1efc0 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
1efd0 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74  _EphemTab except
1efe0 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a   that the table.
1eff0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f000 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65         is assume
1f010 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20  d to already be 
1f020 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20  open.  SRT_Fifo 
1f030 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  has.**          
1f040 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61             the a
1f050 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72  dditional proper
1f060 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65  ty of being able
1f070 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20   to ignore.**   
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f090 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63    the ORDER BY c
1f0a0 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  lause..**.**    
1f0b0 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20   SRT_DistFifo   
1f0c0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1f0d0 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61  n a temporary ta
1f0e0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1f0f0 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  rm..**          
1f100 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61             But a
1f110 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72  lso use temporar
1f120 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1f130 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20  SDParm+1 as.**  
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f150 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61     a record of a
1f160 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73  ll prior results
1f170 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20   and ignore any 
1f180 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20  duplicate.**    
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1a0 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61   rows.  Name mea
1f1b0 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46  ns:  "Distinct F
1f1c0 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ifo"..**.**     
1f1d0 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20  SRT_Queue       
1f1e0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1f1f0 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
1f200 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28  pDest->iSDParm (
1f210 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20  really.**       
1f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
1f230 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64   index).  Append
1f240 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62   a sequence numb
1f250 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65  er so that all e
1f260 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20  ntries.**       
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
1f280 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a  e distinct..**.*
1f290 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75  *     SRT_DistQu
1f2a0 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75  eue   Store resu
1f2b0 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20  lts in priority 
1f2c0 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44  queue pDest->iSD
1f2d0 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20  Parm only if.** 
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2f0 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63      the same rec
1f300 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65  ord has never be
1f310 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65  en stored before
1f320 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20  .  The.**       
1f330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1f340 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53  dex at pDest->iS
1f350 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c  DParm+1 hold all
1f360 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a   prior stores..*
1f370 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e  /.#define SRT_Un
1f380 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a  ion        1  /*
1f390 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1f3a0 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
1f3b0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1f3c0 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20  _Except       2 
1f3d0 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c   /* Remove resul
1f3e0 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69  t from a UNION i
1f3f0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1f400 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
1f410 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69   3  /* Store 1 i
1f420 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
1f430 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65  not empty */.#de
1f440 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64  fine SRT_Discard
1f450 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e        4  /* Do n
1f460 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75  ot save the resu
1f470 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a  lts anywhere */.
1f480 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f  #define SRT_Fifo
1f490 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53           5  /* S
1f4a0 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
1f4b0 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
1f4c0 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23  matic rowid */.#
1f4d0 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46  define SRT_DistF
1f4e0 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69  ifo     6  /* Li
1f4f0 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74  ke SRT_Fifo, but
1f500 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
1f510 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
1f520 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20  SRT_Queue       
1f530 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   7  /* Store res
1f540 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20  ult in an queue 
1f550 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1f560 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f  istQueue    8  /
1f570 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65  * Like SRT_Queue
1f580 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73  , but unique res
1f590 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a  ults only */../*
1f5a0 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
1f5b0 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20  ause is ignored 
1f5c0 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61  for all of the a
1f5d0 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  bove */.#define 
1f5e0 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79  IgnorableOrderby
1f5f0 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c  (X) ((X->eDest)<
1f600 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a  =SRT_DistQueue).
1f610 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74  .#define SRT_Out
1f620 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20  put       9  /* 
1f630 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20  Output each row 
1f640 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65  of result */.#de
1f650 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20  fine SRT_Mem    
1f660 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72       10  /* Stor
1f670 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65  e result in a me
1f680 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65  mory cell */.#de
1f690 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20  fine SRT_Set    
1f6a0 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72       11  /* Stor
1f6b0 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79  e results as key
1f6c0 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
1f6d0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68  .#define SRT_Eph
1f6e0 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20  emTab    12  /* 
1f6f0 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74  Create transient
1f700 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c   tab and store l
1f710 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f  ike SRT_Table */
1f720 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72  .#define SRT_Cor
1f730 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20  outine   13  /* 
1f740 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c  Generate a singl
1f750 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  e row of result 
1f760 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54  */.#define SRT_T
1f770 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f  able       14  /
1f780 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1f790 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61  s data with an a
1f7a0 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a  utomatic rowid *
1f7b0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1f7c0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
1f7d0 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68  ect describes wh
1f7e0 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68  ere to put of th
1f7f0 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20  e results of.** 
1f800 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1f810 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  nt..*/.struct Se
1f820 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20  lectDest {.  u8 
1f830 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20  eDest;          
1f840 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70    /* How to disp
1f850 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ose of the resul
1f860 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a  ts.  On of SRT_*
1f870 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74   above. */.  int
1f880 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20   iSDParm;       
1f890 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
1f8a0 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
1f8b0 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
1f8c0 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
1f8d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1f8e0 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68  Base register wh
1f8f0 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  ere results are 
1f900 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
1f910 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   nSdst;         
1f920 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
1f930 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
1f940 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  ed */.  char *zA
1f950 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f 2a 20  ffSdst;      /* 
1f960 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68  Affinity used wh
1f970 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65  en eDest==SRT_Se
1f980 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  t */.  ExprList 
1f990 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b  *pOrderBy;  /* K
1f9a0 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53  ey columns for S
1f9b0 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54  RT_Queue and SRT
1f9c0 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b  _DistQueue */.};
1f9d0 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63  ../*.** During c
1f9e0 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  ode generation o
1f9f0 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  f statements tha
1fa00 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74  t do inserts int
1fa10 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  o AUTOINCREMENT.
1fa20 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66  ** tables, the f
1fa30 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61  ollowing informa
1fa40 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64  tion is attached
1fa50 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e   to the Table.u.
1fa60 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69  autoInc.p.** poi
1fa70 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74  nter of each aut
1fa80 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65  oincrement table
1fa90 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20   to record some 
1faa0 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  side information
1fab0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64   that.** the cod
1fac0 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64  e generator need
1fad0 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b  s.  We have to k
1fae0 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75  eep per-table au
1faf0 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69  toincrement.** i
1fb00 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61  nformation in ca
1fb10 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64  se inserts are d
1fb20 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67 67  one within trigg
1fb30 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64  ers.  Triggers d
1fb40 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c  o not.** normall
1fb50 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  y coordinate the
1fb60 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62  ir activities, b
1fb70 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f  ut we do need to
1fb80 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a   coordinate the.
1fb90 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73  ** loading and s
1fba0 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63  aving of autoinc
1fbb0 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69  rement informati
1fbc0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  on..*/.struct Au
1fbd0 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75  toincInfo {.  Au
1fbe0 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74  toincInfo *pNext
1fbf0 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f  ;   /* Next info
1fc00 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74   block in a list
1fc10 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a   of them all */.
1fc20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
1fc30 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1fc40 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b   this info block
1fc50 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20   refers to */.  
1fc60 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
1fc70 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
1fc80 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
1fc90 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1fca0 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e  ing pTab */.  in
1fcb0 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20  t regCtr;       
1fcc0 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65      /* Memory re
1fcd0 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74  gister holding t
1fce0 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72  he rowid counter
1fcf0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74   */.};../*.** At
1fd00 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
1fd10 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1fd20 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
1fd30 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
1fd40 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  ch.** trigger th
1fd50 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
1fd60 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
1fd70 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
1fd80 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
1fd90 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
1fda0 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
1fdb0 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
1fdc0 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
1fdd0 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
1fde0 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
1fdf0 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
1fe00 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
1fe10 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
1fe20 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
1fe30 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
1fe40 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
1fe50 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
1fe60 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
1fe70 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
1fe80 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
1fe90 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
1fea0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
1feb0 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
1fec0 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
1fed0 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
1fee0 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
1fef0 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
1ff00 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1ff10 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
1ff20 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
1ff30 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
1ff40 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
1ff50 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
1ff60 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
1ff70 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1ff80 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
1ff90 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
1ffa0 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1ffb0 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
1ffc0 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
1ffd0 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
1ffe0 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
1fff0 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ERT.** statement
20000 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74  s). Similarly, t
20010 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
20020 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62  olmask[1] variab
20030 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  le is set to.** 
20040 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  a mask of new.* 
20050 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20  columns used by 
20060 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
20070 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
20080 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70  g {.  Trigger *p
20090 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a  Trigger;      /*
200a0 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72   Trigger this pr
200b0 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20  ogram was coded 
200c0 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65  from */.  Trigge
200d0 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20  rPrg *pNext;    
200e0 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
200f0 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  in Parse.pTrigge
20100 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53  rPrg list */.  S
20110 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
20120 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61  ram;   /* Progra
20130 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70  m implementing p
20140 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a  Trigger/orconf *
20150 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
20160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
20170 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
20180 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75  CT policy */.  u
20190 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20  32 aColmask[2]; 
201a0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20         /* Masks 
201b0 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20  of old.*, new.* 
201c0 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64  columns accessed
201d0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
201e0 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79  e yDbMask dataty
201f0 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61  pe for the bitma
20200 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  sk of all attach
20210 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
20220 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
20230 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79  ATTACHED>30.  ty
20240 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63  pedef unsigned c
20250 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c  har yDbMask[(SQL
20260 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
20270 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65  +9)/8];.# define
20280 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
20290 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d      (((M)[(I)/8]
202a0 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d  &(1<<((I)&7)))!=
202b0 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
202c0 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d  skZero(M)      m
202d0 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65  emset((M),0,size
202e0 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20  of(M)).# define 
202f0 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
20300 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28     (M)[(I)/8]|=(
20310 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65  1<<((I)&7)).# de
20320 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
20330 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44  ro(M)   sqlite3D
20340 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a  bMaskAllZero(M).
20350 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
20360 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c  onZero(M)   (sql
20370 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
20380 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20  o(M)==0).#else. 
20390 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
203a0 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
203b0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
203c0 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
203d0 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  &(((yDbMask)1)<<
203e0 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  (I)))!=0).# defi
203f0 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
20400 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65        (M)=0.# de
20410 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
20420 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28  ,I)     (M)|=(((
20430 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
20440 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
20450 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  AllZero(M)   (M)
20460 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  ==0.# define DbM
20470 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
20480 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f  (M)!=0.#endif../
20490 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73  *.** An SQL pars
204a0 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63  er context.  A c
204b0 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75  opy of this stru
204c0 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
204d0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70  through.** the p
204e0 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69  arser and down i
204f0 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73  nto all the pars
20500 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e  er action routin
20510 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
20520 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e   carry around in
20530 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
20540 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
20550 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a  entire parse..**
20560 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  .** The structur
20570 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
20580 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68  o two parts.  Wh
20590 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  en the parser an
205a0 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61  d code.** genera
205b0 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76  te call themselv
205c0 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20  es recursively, 
205d0 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f  the first part o
205e0 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
205f0 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ** is constant b
20600 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  ut the second pa
20610 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74  rt is reset at t
20620 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
20630 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20   end of.** each 
20640 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  recursion..**.**
20650 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20   The nTableLock 
20660 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76  and aTableLock v
20670 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
20680 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68  y used if the sh
20690 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65  ared-cache.** fe
206a0 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
206b0 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
206c0 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
206d0 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
206e0 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
206f0 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
20700 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
20710 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
20720 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
20730 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
20740 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
20750 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
20760 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
20770 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
20780 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
20790 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
207a0 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
207b0 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
207c0 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
207d0 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
207e0 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
207f0 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
20800 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
20810 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
20820 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
20830 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
20840 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
20850 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
20860 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
20870 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
20880 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
20890 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
208a0 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
208b0 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
208c0 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
208d0 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
208e0 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
208f0 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
20900 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
20910 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
20920 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
20930 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
20940 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
20950 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
20960 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
20970 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
20980 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
20990 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
209a0 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69   */.  u8 isMulti
209b0 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72  Write;     /* Tr
209c0 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
209d0 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72  may modify/inser
209e0 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  t multiple rows 
209f0 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74  */.  u8 mayAbort
20a00 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
20a10 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
20a20 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ay throw an ABOR
20a30 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  T exception */. 
20a40 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b   u8 hasCompound;
20a50 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f        /* Need to
20a60 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43   invoke convertC
20a70 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
20a80 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75  ubquery() */.  u
20a90 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b  8 okConstFactor;
20aa0 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63      /* OK to fac
20ab0 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
20ac0 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
20ad0 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e  eLookaside; /* N
20ae0 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c  umber of times l
20af0 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65 65  ookaside has bee
20b00 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20  n disabled */.  
20b10 75 38 20 64 69 73 61 62 6c 65 56 74 61 62 3b 20  u8 disableVtab; 
20b20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c 65 20       /* Disable 
20b30 61 6c 6c 20 76 69 72 74 75 61 6c 20 74 61 62 6c  all virtual tabl
20b40 65 73 20 66 6f 72 20 74 68 69 73 20 70 61 72 73  es for this pars
20b50 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67  e */.  int nRang
20b60 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53  eReg;       /* S
20b70 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f  ize of the tempo
20b80 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
20b90 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61  ock */.  int iRa
20ba0 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
20bb0 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20   First register 
20bc0 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  in temporary reg
20bd0 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
20be0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
20bf0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20c00 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a  of errors seen *
20c10 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20  /.  int nTab;   
20c20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20c30 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79  er of previously
20c40 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20   allocated VDBE 
20c50 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74  cursors */.  int
20c60 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
20c70 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
20c80 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
20c90 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
20ca0 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20   szOpAlloc;     
20cb0 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65    /* Bytes of me
20cc0 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63  mory space alloc
20cd0 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
20ce0 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  p[] */.  int iSe
20cf0 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  lfTab;        /*
20d00 20 54 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65   Table associate
20d10 64 20 77 69 74 68 20 61 6e 20 69 6e 64 65 78 20  d with an index 
20d20 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65 67 61  on expr, or nega
20d30 74 69 76 65 0a 20 20 20 20 20 20 20 20 20 20 20  tive.           
20d40 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f              ** o
20d50 66 20 74 68 65 20 62 61 73 65 20 72 65 67 69 73  f the base regis
20d60 74 65 72 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ter during check
20d70 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65 76 61 6c  -constraint eval
20d80 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
20d90 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
20da0 65 20 2a 6e 65 67 61 74 69 76 65 2a 20 6f 66 20  e *negative* of 
20db0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 61  the number of la
20dc0 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69  bels used */.  i
20dd0 6e 74 20 6e 4c 61 62 65 6c 41 6c 6c 6f 63 3b 20  nt nLabelAlloc; 
20de0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20df0 20 73 6c 6f 74 73 20 69 6e 20 61 4c 61 62 65 6c   slots in aLabel
20e00 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65   */.  int *aLabe
20e10 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70  l;         /* Sp
20e20 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
20e30 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72  labels */.  Expr
20e40 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72  List *pConstExpr
20e50 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70  ;/* Constant exp
20e60 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f  ressions */.  To
20e70 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61  ken constraintNa
20e80 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  me;/* Name of th
20e90 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72  e constraint cur
20ea0 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72  rently being par
20eb0 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  sed */.  yDbMask
20ec0 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a   writeMask;   /*
20ed0 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74   Start a write t
20ee0 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
20ef0 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ese databases */
20f00 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69  .  yDbMask cooki
20f10 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61  eMask;  /* Bitma
20f20 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72  sk of schema ver
20f30 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20  ified databases 
20f40 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69  */.  int regRowi
20f50 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  d;        /* Reg
20f60 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
20f70 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41  wid of CREATE TA
20f80 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  BLE entry */.  i
20f90 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20  nt regRoot;     
20fa0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
20fb0 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67  holding root pag
20fc0 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77  e number for new
20fd0 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e   objects */.  in
20fe0 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
20ff0 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
21000 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
21010 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
21020 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ogram */.  int n
21030 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
21040 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c  /* Number of SEL
21050 45 43 54 20 73 74 6d 74 73 2e 20 43 6f 75 6e 74  ECT stmts. Count
21060 65 72 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65  er for Select.se
21070 6c 49 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  lId */.#ifndef S
21080 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
21090 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54  D_CACHE.  int nT
210a0 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20  ableLock;       
210b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
210c0 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63  cks in aTableLoc
210d0 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b  k */.  TableLock
210e0 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a   *aTableLock; /*
210f0 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20   Required table 
21100 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64  locks for shared
21110 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
21120 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49  endif.  AutoincI
21130 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20  nfo *pAinc;  /* 
21140 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
21150 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  t AUTOINCREMENT 
21160 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61  counters */.  Pa
21170 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20  rse *pToplevel; 
21180 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75     /* Parse stru
21190 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70  cture for main p
211a0 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29  rogram (or NULL)
211b0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72   */.  Table *pTr
211c0 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61  iggerTab;  /* Ta
211d0 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65  ble triggers are
211e0 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72   being coded for
211f0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72   */.  int addrCr
21200 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64  Tab;       /* Ad
21210 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61  dress of OP_Crea
21220 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20 6f  teBtree opcode o
21230 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  n CREATE TABLE *
21240 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
21250 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
21260 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
21270 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
21280 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
21290 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
212a0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
212b0 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
212c0 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
212d0 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
212e0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
212f0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
21300 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
21310 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
21320 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
21330 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
21340 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
21350 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
21360 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
21370 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
21380 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
21390 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
213a0 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
213b0 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
213c0 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
213d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21410 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46  *********.  ** F
21420 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74  ields above must
21430 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
21440 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69  to zero.  The fi
21450 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77  elds that follow
21460 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74  ,.  ** down to t
21470 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
21480 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73 65  the recursive se
21490 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65  ction, do not ne
214a0 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e  ed to be.  ** in
214b0 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65  itialized as the
214c0 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65  y will be set be
214d0 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e  fore being used.
214e0 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69    The boundary i
214f0 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65  s.  ** determine
21500 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61  d by offsetof(Pa
21510 72 73 65 2c 61 54 65 6d 70 52 65 67 29 2e 0a 20  rse,aTempReg).. 
21520 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
21530 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
21570 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b  int aTempReg[8];
21580 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69          /* Holdi
21590 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
215a0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
215b0 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
215c0 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20  Token;       /* 
215d0 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
215e0 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
215f0 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20  ject name */..  
21600 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
21610 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21630 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21640 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41  *********.  ** A
21650 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74  bove is constant
21660 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69   between recursi
21670 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72  ons.  Below is r
21680 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20  eset before and 
21690 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20  after.  ** each 
216a0 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20  recursion.  The 
216b0 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e  boundary between
216c0 20 74 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f   these two regio
216d0 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  ns is determined
216e0 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73  .  ** using offs
216f0 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74  etof(Parse,sLast
21700 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c  Token) so the sL
21710 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d  astToken field m
21720 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20  ust be the.  ** 
21730 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74  first field in t
21740 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67  he recursive reg
21750 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
21760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21790 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
217a0 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54  ..  Token sLastT
217b0 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54  oken;       /* T
217c0 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61  he last token pa
217d0 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20  rsed */.  ynVar 
217e0 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  nVar;           
217f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21800 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73   '?' variables s
21810 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73  een in the SQL s
21820 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50  o far */.  u8 iP
21830 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  kSortOrder;     
21840 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44       /* ASC or D
21850 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20  ESC for INTEGER 
21860 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
21870 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20   u8 explain;    
21880 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
21890 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49  ue if the EXPLAI
218a0 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20  N flag is found 
218b0 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a  on the query */.
218c0 23 69 66 20 21 28 64 65 66 69 6e 65 64 28 53 51  #if !(defined(SQ
218d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
218e0 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e  LTABLE) && defin
218f0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
21900 4c 54 45 52 54 41 42 4c 45 29 29 0a 20 20 75 38  LTERTABLE)).  u8
21910 20 65 50 61 72 73 65 4d 6f 64 65 3b 20 20 20 20   eParseMode;    
21920 20 20 20 20 20 20 20 20 2f 2a 20 50 41 52 53 45          /* PARSE
21930 5f 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74 61  _MODE_XXX consta
21940 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  nt */.#endif.#if
21950 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21960 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
21970 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20  int nVtabLock;  
21980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
21990 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74  ber of virtual t
219a0 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f  ables to lock */
219b0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48  .#endif.  int nH
219c0 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
219d0 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
219e0 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66  n tree height of
219f0 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c   current sub-sel
21a00 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ect */.#ifndef S
21a10 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
21a20 49 4e 0a 20 20 69 6e 74 20 61 64 64 72 45 78 70  IN.  int addrExp
21a30 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lain;          /
21a40 2a 20 41 64 64 72 65 73 73 20 6f 66 20 63 75 72  * Address of cur
21a50 72 65 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e 20  rent OP_Explain 
21a60 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  opcode */.#endif
21a70 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74  .  VList *pVList
21a80 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
21a90 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20  Mapping between 
21aa0 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61  variable names a
21ab0 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20  nd numbers */.  
21ac0 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
21ad0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
21ae0 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
21af0 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
21b00 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74  re()) */.  const
21b10 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
21b20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
21b30 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
21b40 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
21b50 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
21b60 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
21b70 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
21b80 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
21b90 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
21ba0 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 77  */.  Index *pNew
21bb0 49 6e 64 65 78 3b 20 20 20 20 20 20 20 20 20 2f  Index;         /
21bc0 2a 20 41 6e 20 69 6e 64 65 78 20 62 65 69 6e 67  * An index being
21bd0 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
21be0 43 52 45 41 54 45 20 49 4e 44 45 58 2e 0a 20 20  CREATE INDEX..  
21bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c00 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73            ** Als
21c10 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 72  o used to hold r
21c20 65 64 75 6e 64 61 6e 74 20 55 4e 49 51 55 45 20  edundant UNIQUE 
21c30 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20 20 20  constraints.    
21c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c50 20 20 20 20 20 20 20 20 2a 2a 20 64 75 72 69 6e          ** durin
21c60 67 20 61 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d  g a RENAME COLUM
21c70 4e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  N */.  Trigger *
21c80 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20  pNewTrigger;    
21c90 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65   /* Trigger unde
21ca0 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61  r construct by a
21cb0 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
21cc0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
21cd0 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f  *zAuthContext; /
21ce0 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65  * The 6th parame
21cf0 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68  ter to db->xAuth
21d00 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69   callbacks */.#i
21d10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21d20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
21d30 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20   Token sArg;    
21d40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
21d50 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61  mplete text of a
21d60 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74   module argument
21d70 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70   */.  Table **ap
21d80 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
21d90 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69  /* Pointer to vi
21da0 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65  rtual tables nee
21db0 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a  ding locking */.
21dc0 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a  #endif.  Table *
21dd0 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20  pZombieTab;     
21de0 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61     /* List of Ta
21df0 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64  ble objects to d
21e00 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65  elete after code
21e10 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65   gen */.  Trigge
21e20 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72  rPrg *pTriggerPr
21e30 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69  g;  /* Linked li
21e40 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67  st of coded trig
21e50 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a  gers */.  With *
21e60 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
21e70 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57      /* Current W
21e80 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e  ITH clause, or N
21e90 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ULL */.  With *p
21ea0 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20  WithToFree;     
21eb0 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20     /* Free this 
21ec0 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74  WITH object at t
21ed0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61  he end of the pa
21ee0 72 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  rse */.#ifndef S
21ef0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
21f00 54 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65 54 6f  TABLE.  RenameTo
21f10 6b 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20  ken *pRename;   
21f20 20 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75 62 6a    /* Tokens subj
21f30 65 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e 67 20  ect to renaming 
21f40 62 79 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a  by ALTER TABLE *
21f50 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 64 65  /.#endif.};..#de
21f60 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f  fine PARSE_MODE_
21f70 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 30 0a  NORMAL        0.
21f80 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f  #define PARSE_MO
21f90 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  DE_DECLARE_VTAB 
21fa0 20 31 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45   1.#define PARSE
21fb0 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c  _MODE_RENAME_COL
21fc0 55 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20 50 41  UMN 2.#define PA
21fd0 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f  RSE_MODE_RENAME_
21fe0 54 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a 2a 20  TABLE  3../*.** 
21ff0 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65  Sizes and pointe
22000 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61  rs of various pa
22010 72 74 73 20 6f 66 20 74 68 65 20 50 61 72 73 65  rts of the Parse
22020 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66   object..*/.#def
22030 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a  ine PARSE_HDR_SZ
22040 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
22050 61 54 65 6d 70 52 65 67 29 20 2f 2a 20 52 65 63  aTempReg) /* Rec
22060 75 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20  ursive part w/o 
22070 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66  aColCache*/.#def
22080 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52 53  ine PARSE_RECURS
22090 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61  E_SZ offsetof(Pa
220a0 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20  rse,sLastToken) 
220b0 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20     /* Recursive 
220c0 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  part */.#define 
220d0 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73  PARSE_TAIL_SZ (s
220e0 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52  izeof(Parse)-PAR
220f0 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f  SE_RECURSE_SZ) /
22100 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20  * Non-recursive 
22110 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  part */.#define 
22120 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28  PARSE_TAIL(X) ((
22130 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53  (char*)(X))+PARS
22140 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f  E_RECURSE_SZ)  /
22150 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69  * Pointer to tai
22160 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  l */../*.** Retu
22170 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65  rn true if curre
22180 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73  ntly inside an s
22190 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
221a0 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23  tab() call..*/.#
221b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
221c0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
221d0 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
221e0 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65  ARE_VTAB 0.#else
221f0 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
22200 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72  CLARE_VTAB (pPar
22210 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3d 3d  se->eParseMode==
22220 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41  PARSE_MODE_DECLA
22230 52 45 5f 56 54 41 42 29 0a 23 65 6e 64 69 66 0a  RE_VTAB).#endif.
22240 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
22250 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
22260 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49  BLE).  #define I
22270 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20  N_RENAME_OBJECT 
22280 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
22290 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45  e IN_RENAME_OBJE
222a0 43 54 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72  CT (pParse->ePar
222b0 73 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f 4d 4f  seMode>=PARSE_MO
222c0 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e  DE_RENAME_COLUMN
222d0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ).#endif..#if de
222e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
222f0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20  T_VIRTUALTABLE) 
22300 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
22310 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
22320 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  E).  #define IN_
22330 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20 30 0a  SPECIAL_PARSE 0.
22340 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
22350 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45  IN_SPECIAL_PARSE
22360 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65   (pParse->eParse
22370 4d 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f 44 45  Mode!=PARSE_MODE
22380 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69 66 0a  _NORMAL).#endif.
22390 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
223a0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
223b0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61  ing structure ca
223c0 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e  n be declared on
223d0 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65   a stack and use
223e0 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65  d.** to save the
223f0 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
22400 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61  ext value so tha
22410 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
22420 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73  ored later..*/.s
22430 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
22440 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  t {.  const char
22450 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
22460 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50    /* Put saved P
22470 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
22480 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73  t here */.  Pars
22490 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
224a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
224b0 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  arse structure *
224c0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66  /.};../*.** Bitf
224d0 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50  ield flags for P
224e0 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f  5 value in vario
224f0 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a  us opcodes..**.*
22500 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
22510 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
22520 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
22530 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48     OPFLAG_LENGTH
22540 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  ARG    == SQLITE
22550 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20  _FUNC_LENGTH.** 
22560 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46     OPFLAG_TYPEOF
22570 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  ARG    == SQLITE
22580 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20  _FUNC_TYPEOF.** 
22590 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53     OPFLAG_BULKCS
225a0 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  R      == BTREE_
225b0 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f  BULKLOAD.**    O
225c0 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20  PFLAG_SEEKEQ    
225d0 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b     == BTREE_SEEK
225e0 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  _EQ.**    OPFLAG
225f0 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d  _FORDELETE    ==
22600 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45   BTREE_FORDELETE
22610 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41  .**    OPFLAG_SA
22620 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54  VEPOSITION == BT
22630 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  REE_SAVEPOSITION
22640 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55  .**    OPFLAG_AU
22650 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54  XDELETE    == BT
22660 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f  REE_AUXDELETE.*/
22670 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22680 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
22690 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65  01    /* OP_Inse
226a0 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74  rt: Set to updat
226b0 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f  e db->nChange */
226c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
226d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226e0 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73        /* Also us
226f0 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35  ed in P2 (not P5
22700 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a  ) of OP_Delete *
22710 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22720 5f 4e 4f 43 48 4e 47 20 20 20 20 20 20 20 20 30  _NOCHNG        0
22730 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56 43 6f  x01    /* OP_VCo
22740 6c 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20 66 6f  lumn nochange fo
22750 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
22760 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d  ine OPFLAG_EPHEM
22770 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20           0x01   
22780 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45   /* OP_Column: E
22790 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20  phemeral output 
227a0 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  is ok */.#define
227b0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
227c0 44 20 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  D     0x20    /*
227d0 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
227e0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a  b->lastRowid */.
227f0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
22800 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30  SUPDATE      0x0
22810 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f  4    /* This OP_
22820 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c  Insert is an sql
22830 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
22840 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  ne OPFLAG_APPEND
22850 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20          0x08    
22860 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c  /* This is likel
22870 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
22880 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
22890 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
228a0 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79  T 0x10    /* Try
228b0 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b   to avoid a seek
228c0 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28   in BtreeInsert(
228d0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
228e0 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20  LAG_ISNOOP      
228f0 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
22900 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d  Delete does pre-
22910 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79  update-hook only
22920 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22930 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
22940 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x40    /* OP_C
22950 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
22960 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a  for length() */.
22970 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54  #define OPFLAG_T
22980 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38  YPEOFARG     0x8
22990 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
229a0 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
229b0 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66  typeof() */.#def
229c0 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  ine OPFLAG_BULKC
229d0 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20  SR       0x01   
229e0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73   /* OP_Open** us
229f0 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20  ed to open bulk 
22a00 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  cursor */.#defin
22a10 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  e OPFLAG_SEEKEQ 
22a20 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
22a30 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73  * OP_Open** curs
22a40 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20  or uses EQ seek 
22a50 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
22a60 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
22a70 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
22a80 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75  OP_Open should u
22a90 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45  se BTREE_FORDELE
22aa0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
22ab0 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20  FLAG_P2ISREG    
22ac0 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32     0x10    /* P2
22ad0 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73   to OP_Open** is
22ae0 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62   a register numb
22af0 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  er */.#define OP
22b00 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20  FLAG_PERMUTE    
22b10 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
22b20 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68  _Compare: use th
22b30 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f  e permutation */
22b40 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22b50 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78  SAVEPOSITION  0x
22b60 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  02    /* OP_Dele
22b70 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20  te/Insert: save 
22b80 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64  cursor pos */.#d
22b90 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58  efine OPFLAG_AUX
22ba0 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20  DELETE     0x04 
22bb0 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a     /* OP_Delete:
22bc0 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45   index in a DELE
22bd0 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65  TE op */.#define
22be0 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d   OPFLAG_NOCHNG_M
22bf0 41 47 49 43 20 20 30 78 36 64 20 20 20 20 2f 2a  AGIC  0x6d    /*
22c00 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
22c10 73 65 72 69 61 6c 74 79 70 65 20 31 30 20 69 73  serialtype 10 is
22c20 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61   ok */../*. * Ea
22c30 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65  ch trigger prese
22c40 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
22c50 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f  se schema is sto
22c60 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e  red as an instan
22c70 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20  ce of. * struct 
22c80 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50  Trigger.. *. * P
22c90 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61  ointers to insta
22ca0 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
22cb0 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65  rigger are store
22cc0 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20  d in two ways.. 
22cd0 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69  * 1. In the "tri
22ce0 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c  gHash" hash tabl
22cf0 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73  e (part of the s
22d00 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70  qlite3* that rep
22d10 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20  resents the. *  
22d20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
22d30 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
22d40 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
22d50 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
22d60 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
22d70 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
22d80 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
22d90 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
22da0 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
22db0 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
22dc0 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
22dd0 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
22de0 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
22df0 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
22e00 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
22e10 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
22e20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
22e30 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
22e40 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
22e50 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
22e60 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
22e70 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
22e80 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
22e90 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
22ea0 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
22eb0 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
22ec0 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
22ed0 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
22ee0 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
22ef0 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
22f00 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
22f10 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
22f20 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
22f30 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
22f40 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
22f50 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
22f60 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
22f70 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
22f80 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
22f90 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
22fa0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
22fb0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
22fc0 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
22fd0 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
22fe0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
22ff0 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
23000 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
23010 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
23020 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
23030 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
23040 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
23050 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
23060 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
23070 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
23080 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
23090 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
230a0 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
230b0 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
230c0 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
230d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230e0 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
230f0 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
23100 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
23110 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
23120 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
23130 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
23140 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
23150 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
23160 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
23170 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
23180 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
23190 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
231a0 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
231b0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
231c0 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
231d0 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
231e0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
231f0 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
23200 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
23210 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
23220 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
23230 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
23240 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
23250 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
23260 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
23270 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
23280 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  hich..**.** If t
23290 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c  here are multipl
232a0 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20  e triggers, you 
232b0 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45  might of some BE
232c0 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46  FORE and some AF
232d0 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20  TER..** In that 
232e0 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74  cases, the const
232f0 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62  ants below can b
23300 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e  e ORed together.
23310 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47  .*/.#define TRIG
23320 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64  GER_BEFORE  1.#d
23330 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46  efine TRIGGER_AF
23340 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41  TER   2../*. * A
23350 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74  n instance of st
23360 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
23370 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
23380 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  e a single SQL s
23390 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74  tatement. * that
233a0 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20   is a part of a 
233b0 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
233c0 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73  . *. * Instances
233d0 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
233e0 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65  erStep are store
233f0 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69  d in a singly li
23400 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65  nked list (linke
23410 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22  d. * using the "
23420 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72  pNext" member) r
23430 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
23440 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
23450 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73  ber of the. * as
23460 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20  sociated struct 
23470 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65  Trigger instance
23480 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
23490 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65  ent of the linke
234a0 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65  d list is. * the
234b0 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74   first step of t
234c0 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72  he trigger-progr
234d0 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f  am.. *. * The "o
234e0 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61  p" member indica
234f0 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73  tes whether this
23500 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20   is a "DELETE", 
23510 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54  "INSERT", "UPDAT
23520 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54  E" or. * "SELECT
23530 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65  " statement. The
23540 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65   meanings of the
23550 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69   other members i
23560 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
23570 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  the. * value of 
23580 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
23590 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
235a0 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
235b0 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
235c0 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
235d0 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
235e0 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
235f0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
23600 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
23610 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
23620 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
23630 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
23640 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
23650 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
23660 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
23670 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  .. * zTarget   -
23680 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
23690 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
236a0 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20  insert into.. * 
236b0 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20  pExprList -> If 
236c0 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
236d0 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
236e0 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  S ... statement,
236f0 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
23700 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
23710 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69  s values to be i
23720 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69  nserted. Otherwi
23730 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c  se NULL.. * pIdL
23740 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ist   -> If this
23750 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
23760 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d  TO ... (<column-
23770 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e  names>) VALUES .
23780 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
23790 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68     statement, th
237a0 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74  en this stores t
237b0 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20  he column-names 
237c0 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20  to be. *        
237d0 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69        inserted i
237e0 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  nto.. *. * (op =
237f0 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20  = TK_DELETE). * 
23800 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
23810 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
23820 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74  e table to delet
23830 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72  e from.. * pWher
23840 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
23850 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
23860 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
23870 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
23880 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
23890 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
238a0 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  NULL.. *. * (op 
238b0 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a  == TK_UPDATE). *
238c0 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
238d0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
238e0 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61  he table to upda
238f0 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  te.. * pWhere   
23900 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
23910 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
23920 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
23930 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
23940 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
23950 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
23960 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
23970 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
23980 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
23990 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
239a0 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
239b0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
239c0 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
239d0 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
239e0 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
239f0 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
23a00 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
23a10 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74  t.. *. */.struct
23a20 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20   TriggerStep {. 
23a30 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
23a40 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
23a50 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
23a60 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c  DATE, TK_INSERT,
23a70 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20   TK_SELECT */.  
23a80 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  u8 orconf;      
23a90 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62       /* OE_Rollb
23aa0 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72  ack etc. */.  Tr
23ab0 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20  igger *pTrig;   
23ac0 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65     /* The trigge
23ad0 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70  r that this step
23ae0 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f   is a part of */
23af0 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
23b00 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43  ct;     /* SELEC
23b10 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52  T statement or R
23b20 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54  HS of INSERT INT
23b30 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a  O SELECT ... */.
23b40 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b    char *zTarget;
23b50 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74         /* Target
23b60 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54   table for DELET
23b70 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
23b80 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  T */.  Expr *pWh
23b90 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  ere;        /* T
23ba0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
23bb0 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50  for DELETE or UP
23bc0 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
23bd0 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
23be0 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75  ist; /* SET clau
23bf0 73 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f  se for UPDATE */
23c00 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
23c10 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
23c20 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
23c30 52 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a  RT */.  Upsert *
23c40 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20  pUpsert;     /* 
23c50 55 70 73 65 72 74 20 63 6c 61 75 73 65 73 20 6f  Upsert clauses o
23c60 6e 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20  n an INSERT */. 
23c70 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
23c80 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
23c90 6c 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68  l SQL text of th
23ca0 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
23cb0 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
23cc0 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
23cd0 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
23ce0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
23cf0 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
23d00 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
23d10 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
23d20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
23d30 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
23d40 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
23d50 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
23d60 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
23d70 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
23d80 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
23d90 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
23da0 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
23db0 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
23dc0 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
23dd0 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
23de0 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
23df0 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
23e00 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
23e10 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
23e20 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
23e30 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
23e40 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
23e50 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
23e60 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78  chema;    /* Fix
23e70 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73   items to this s
23e80 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62  chema */.  int b
23e90 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f  VarOnly;       /
23ea0 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69  * Check for vari
23eb0 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references 
23ec0 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  only */.  const 
23ed0 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
23ee0 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
23ef0 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
23f00 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
23f10 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
23f20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
23f30 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
23f40 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
23f50 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
23f60 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
23f70 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
23f80 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
23f90 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
23fa0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
23fb0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
23fc0 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
23fd0 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
23fe0 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
23ff0 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
24000 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
24010 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
24020 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
24030 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
24040 75 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72 20  uct sqlite3_str 
24050 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
24060 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
24070 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
24080 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
24090 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
240a0 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20  har *zText;     
240b0 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e      /* The strin
240c0 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66  g collected so f
240d0 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c  ar */.  u32  nAl
240e0 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  loc;         /* 
240f0 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20  Amount of space 
24100 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65  allocated in zTe
24110 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41  xt */.  u32  mxA
24120 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
24130 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20  Maximum allowed 
24140 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66  allocation.  0 f
24150 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61  or no malloc usa
24160 67 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68  ge */.  u32  nCh
24170 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ar;          /* 
24180 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
24190 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ring so far */. 
241a0 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20   u8   accError; 
241b0 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
241c0 4e 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45 5f  NOMEM or SQLITE_
241d0 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20  TOOBIG */.  u8  
241e0 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20   printfFlags;   
241f0 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54   /* SQLITE_PRINT
24200 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f  F flags below */
24210 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .};.#define SQLI
24220 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e  TE_PRINTF_INTERN
24230 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65  AL 0x01  /* Inte
24240 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f  rnal-use-only co
24250 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64  nverters allowed
24260 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
24270 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e  TE_PRINTF_SQLFUN
24280 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20  C  0x02  /* SQL 
24290 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
242a0 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a  ts to VXPrintf *
242b0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
242c0 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
242d0 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69   0x04  /* True i
242e0 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63  f xText is alloc
242f0 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23  ated space */..#
24300 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65  define isMalloce
24310 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69  d(X)  (((X)->pri
24320 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54  ntfFlags & SQLIT
24330 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
24340 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41  D)!=0).../*.** A
24350 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
24360 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
24370 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
24380 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
24390 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
243a0 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
243b0 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
243c0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
243d0 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
243e0 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
243f0 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
24400 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
24410 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
24420 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
24430 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
24440 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
24450 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44  here */.  int iD
24460 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
24470 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
24480 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
24490 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
244a0 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  Hed */.  int rc;
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
244c0 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
244d0 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 33 32  ed here */.  u32
244e0 20 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20 20 20   mInitFlags;    
244f0 20 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72 6f   /* Flags contro
24500 6c 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73  lling error mess
24510 61 67 65 73 20 2a 2f 0a 20 20 75 33 32 20 6e 49  ages */.  u32 nI
24520 6e 69 74 52 6f 77 3b 20 20 20 20 20 20 20 2f 2a  nitRow;       /*
24530 20 4e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   Number of rows 
24540 70 72 6f 63 65 73 73 65 64 20 2a 2f 0a 7d 20 49  processed */.} I
24550 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20  nitData;../*.** 
24560 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
24570 6f 72 20 6d 49 6e 69 74 46 6c 61 67 73 0a 2a 2f  or mInitFlags.*/
24580 0a 23 64 65 66 69 6e 65 20 49 4e 49 54 46 4c 41  .#define INITFLA
24590 47 5f 41 6c 74 65 72 54 61 62 6c 65 20 20 20 30  G_AlterTable   0
245a0 78 30 30 30 31 20 20 2f 2a 20 54 68 69 73 20 69  x0001  /* This i
245b0 73 20 61 20 72 65 70 61 72 73 65 20 61 66 74 65  s a reparse afte
245c0 72 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f  r ALTER TABLE */
245d0 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72  ../*.** Structur
245e0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f  e containing glo
245f0 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  bal configuratio
24600 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53  n data for the S
24610 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a  QLite library..*
24620 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
24630 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e  ure also contain
24640 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66  s some state inf
24650 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
24660 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
24670 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74  g {.  int bMemst
24680 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  at;             
24690 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
246a0 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79  to enable memory
246b0 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74   status */.  int
246c0 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20   bCoreMutex;    
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
246e0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
246f0 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a   core mutexing *
24700 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74  /.  int bFullMut
24710 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
24720 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
24730 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74   enable full mut
24740 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
24750 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20  OpenUri;        
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24770 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65  True to interpre
24780 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55  t filenames as U
24790 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73  RIs */.  int bUs
247a0 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20  eCis;           
247b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
247c0 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63  e covering indic
247d0 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e  es for full-scan
247e0 73 20 2a 2f 0a 20 20 69 6e 74 20 62 53 6d 61 6c  s */.  int bSmal
247f0 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  lMalloc;        
24800 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 6f 69           /* Avoi
24810 64 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61  d large memory a
24820 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20 74 72  llocations if tr
24830 75 65 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74  ue */.  int mxSt
24840 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  rlen;           
24850 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
24860 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67  imum string leng
24870 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65  th */.  int neve
24880 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20  rCorrupt;       
24890 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
248a0 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20  abase is always 
248b0 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20  well-formed */. 
248c0 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65   int szLookaside
248d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
248e0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
248f0 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73  okaside buffer s
24900 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f  ize */.  int nLo
24910 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
24920 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
24930 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
24940 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a  buffer count */.
24950 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c    int nStmtSpill
24960 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24970 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72      /* Stmt-jour
24980 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73  nal spill-to-dis
24990 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20  k threshold */. 
249a0 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
249b0 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
249c0 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
249d0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
249e0 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
249f0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
24a00 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
24a10 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
24a20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
24a30 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
24a40 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
24a50 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
24a60 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
24a70 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
24a80 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
24a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24aa0 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
24ab0 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
24ac0 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24ae0 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
24af0 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
24b00 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
24b10 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
24b20 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
24b30 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
24b40 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
24b50 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
24b60 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65   /* mmap() space
24b70 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a   per open file *
24b80 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
24b90 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 mxMmap;       
24ba0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
24bb0 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61   value for szMma
24bc0 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61  p */.  void *pPa
24bd0 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
24be0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
24bf0 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f   cache memory */
24c00 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20  .  int szPage;  
24c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
24c30 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61  each page in pPa
24c40 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50  ge[] */.  int nP
24c50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
24c60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24c70 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
24c80 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
24c90 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b  nt mxParserStack
24ca0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24cb0 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74   /* maximum dept
24cc0 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20  h of the parser 
24cd0 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73  stack */.  int s
24ce0 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65  haredCacheEnable
24cf0 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
24d00 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63  true if shared-c
24d10 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65  ache mode enable
24d20 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61  d */.  u32 szPma
24d30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24d40 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
24d50 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73  mum Sorter PMA s
24d60 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  ize */.  /* The 
24d70 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69  above might be i
24d80 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f  nitialized to no
24d90 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c  n-zero.  The fol
24da0 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61  lowing need to a
24db0 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69  lways.  ** initi
24dc0 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f  ally be zero, ho
24dd0 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  wever. */.  int 
24de0 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  isInit;         
24df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24e00 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74   True after init
24e10 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66  ialization has f
24e20 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74  inished */.  int
24e30 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20   inProgress;    
24e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24e50 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69  * True while ini
24e60 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70  tialization in p
24e70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74  rogress */.  int
24e80 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20   isMutexInit;   
24e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24ea0 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74  * True after mut
24eb0 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c  exes are initial
24ec0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
24ed0 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20  MallocInit;     
24ee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
24ef0 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
24f00 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
24f10 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68  */.  int isPCach
24f20 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  eInit;          
24f30 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
24f40 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
24f50 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
24f60 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65  int nRefInitMute
24f70 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
24f80 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
24f90 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74  sers of pInitMut
24fa0 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ex */.  sqlite3_
24fb0 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
24fc0 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
24fd0 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
24fe0 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
24ff0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67  */.  void (*xLog
25000 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
25010 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e  t char*); /* Fun
25020 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e  ction for loggin
25030 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f  g */.  void *pLo
25040 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  gArg;           
25050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
25060 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
25070 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65   xLog() */.#ifde
25080 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
25090 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78  SQLLOG.  void(*x
250a0 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71  Sqllog)(void*,sq
250b0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
250c0 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  r*, int);.  void
250d0 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65   *pSqllogArg;.#e
250e0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
250f0 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  TE_VDBE_COVERAGE
25100 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
25110 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  ing callback (if
25120 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e   not NULL) is in
25130 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56  voked on every V
25140 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20  DBE branch.  ** 
25150 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20  operation.  Set 
25160 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69  the callback usi
25170 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ng SQLITE_TESTCT
25180 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  RL_VDBE_COVERAGE
25190 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ..  */.  void (*
251a0 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69  xVdbeBranch)(voi
251b0 64 2a 2c 75 6e 73 69 67 6e 65 64 20 69 53 72 63  d*,unsigned iSrc
251c0 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38  Line,u8 eThis,u8
251d0 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62   eMx);  /* Callb
251e0 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
251f0 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20  VdbeBranchArg;  
25200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25220 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
25230 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  nt */.#endif.#if
25240 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
25250 53 54 41 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78  STABLE.  int (*x
25260 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e  TestCallback)(in
25270 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  t);        /* In
25280 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33  voked by sqlite3
25290 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65  FaultSim() */.#e
252a0 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61  ndif.  int bLoca
252b0 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20  ltimeFault;     
252c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
252d0 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69   to fail localti
252e0 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20  me() calls */.  
252f0 69 6e 74 20 62 49 6e 74 65 72 6e 61 6c 46 75 6e  int bInternalFun
25300 63 74 69 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  ctions;         
25310 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20 53 51    /* Internal SQ
25320 4c 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  L functions are 
25330 76 69 73 69 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  visible */.  int
25340 20 69 4f 6e 63 65 52 65 73 65 74 54 68 72 65 73   iOnceResetThres
25350 68 6f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 2f  hold;          /
25360 2a 20 57 68 65 6e 20 74 6f 20 72 65 73 65 74 20  * When to reset 
25370 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73  OP_Once counters
25380 20 2a 2f 0a 20 20 75 33 32 20 73 7a 53 6f 72 74   */.  u32 szSort
25390 65 72 52 65 66 3b 20 20 20 20 20 20 20 20 20 20  erRef;          
253a0 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 73          /* Min s
253b0 69 7a 65 20 69 6e 20 62 79 74 65 73 20 74 6f 20  ize in bytes to 
253c0 75 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20  use sorter-refs 
253d0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
253e0 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
253f0 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74  inside of assert
25400 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
25410 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a   indicate that.*
25420 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20  * the assert is 
25430 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20  only valid on a 
25440 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
25450 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f  base.  Instead o
25460 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  f:.**.**     ass
25470 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20  ert( X );.**.** 
25480 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a  One writes:.**.*
25490 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
254a0 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b  || CORRUPT_DB );
254b0 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44  .**.** CORRUPT_D
254c0 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67  B is true during
254d0 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f   normal operatio
254e0 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64  n.  CORRUPT_DB d
254f0 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65  oes not indicate
25500 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
25510 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74  abase is definit
25520 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c  ely corrupt, onl
25530 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20  y that it might 
25540 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46  be corrupt..** F
25550 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73  or most test cas
25560 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69  es, CORRUPT_DB i
25570 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75  s set to false u
25580 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a  sing a special.*
25590 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
255a0 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20  ontrol().  This 
255b0 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29  enables assert()
255c0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70   statements to p
255d0 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74  rove.** things t
255e0 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74  hat are always t
255f0 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72  rue for well-for
25600 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  med databases..*
25610 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50  /.#define CORRUP
25620 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f  T_DB  (sqlite3Co
25630 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70  nfig.neverCorrup
25640 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  t==0)../*.** Con
25650 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73  text pointer pas
25660 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68  sed down through
25670 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a   the tree-walk..
25680 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72  */.struct Walker
25690 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
256a0 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
256b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
256c0 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74  * Parser context
256d0 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45  .  */.  int (*xE
256e0 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  xprCallback)(Wal
256f0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20  ker*, Expr*);   
25700 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
25710 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  r expressions */
25720 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74  .  int (*xSelect
25730 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
25740 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20  *,Select*);  /* 
25750 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  Callback for SEL
25760 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ECTs */.  void (
25770 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
25780 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  2)(Walker*,Selec
25790 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61  t*);/* Second ca
257a0 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
257b0 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b  Ts */.  int walk
257c0 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20  erDepth;        
257d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
257f0 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75  ubqueries */.  u
25800 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20  8 eCode;        
25810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25820 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d           /* A sm
25830 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63  all processing c
25840 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25870 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61     /* Extra data
25880 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f   for callback */
25890 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  .    NameContext
258a0 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20   *pNC;          
258b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
258c0 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74  * Naming context
258d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20   */.    int n;  
258e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25900 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a    /* A counter *
25910 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20  /.    int iCur; 
25920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25940 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62  /* A cursor numb
25950 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73  er */.    SrcLis
25960 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20  t *pSrcList;    
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25980 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75      /* FROM clau
25990 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  se */.    struct
259a0 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43   SrcCount *pSrcC
259b0 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ount;           
259c0 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20      /* Counting 
259d0 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65  column reference
259e0 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
259f0 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48  CCurHint *pCCurH
25a00 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
25a10 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63 6f     /* Used by co
25a20 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20 2a  deCursorHint() *
25a30 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c  /.    int *aiCol
25a40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a60 2f 2a 20 61 72 72 61 79 20 6f 66 20 63 6f 6c 75  /* array of colu
25a70 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20  mn indexes */.  
25a80 20 20 73 74 72 75 63 74 20 49 64 78 43 6f 76 65    struct IdxCove
25a90 72 20 2a 70 49 64 78 43 6f 76 65 72 3b 20 20 20  r *pIdxCover;   
25aa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
25ab0 68 65 63 6b 20 66 6f 72 20 69 6e 64 65 78 20 63  heck for index c
25ac0 6f 76 65 72 61 67 65 20 2a 2f 0a 20 20 20 20 73  overage */.    s
25ad0 74 72 75 63 74 20 49 64 78 45 78 70 72 54 72 61  truct IdxExprTra
25ae0 6e 73 20 2a 70 49 64 78 54 72 61 6e 73 3b 20 20  ns *pIdxTrans;  
25af0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76           /* Conv
25b00 65 72 74 20 69 64 78 65 64 20 65 78 70 72 20 74  ert idxed expr t
25b10 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20  o column */.    
25b20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
25b30 42 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  By;             
25b40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f            /* GRO
25b50 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
25b60 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
25b70 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
25b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25b90 20 48 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45   HAVING to WHERE
25ba0 20 63 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20   clause ctx */. 
25bb0 20 20 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77     struct Window
25bc0 52 65 77 72 69 74 65 20 2a 70 52 65 77 72 69 74  Rewrite *pRewrit
25bd0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
25be0 57 69 6e 64 6f 77 20 72 65 77 72 69 74 65 20 63  Window rewrite c
25bf0 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 73 74  ontext */.    st
25c00 72 75 63 74 20 57 68 65 72 65 43 6f 6e 73 74 20  ruct WhereConst 
25c10 2a 70 43 6f 6e 73 74 3b 20 20 20 20 20 20 20 20  *pConst;        
25c20 20 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45          /* WHERE
25c30 20 63 6c 61 75 73 65 20 63 6f 6e 73 74 61 6e 74   clause constant
25c40 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
25c50 52 65 6e 61 6d 65 43 74 78 20 2a 70 52 65 6e 61  RenameCtx *pRena
25c60 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
25c70 20 20 20 2f 2a 20 52 45 4e 41 4d 45 20 43 4f 4c     /* RENAME COL
25c80 55 4d 4e 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  UMN context */. 
25c90 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72   } u;.};../* For
25ca0 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e  ward declaration
25cb0 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s */.int sqlite3
25cc0 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a  WalkExpr(Walker*
25cd0 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
25ce0 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73  lite3WalkExprLis
25cf0 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c  t(Walker*, ExprL
25d00 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
25d10 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c  e3WalkSelect(Wal
25d20 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
25d30 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
25d40 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72  electExpr(Walker
25d50 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
25d60 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
25d70 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20  ctFrom(Walker*, 
25d80 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
25d90 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f  lite3ExprWalkNoo
25da0 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  p(Walker*, Expr*
25db0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
25dc0 6c 65 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  lectWalkNoop(Wal
25dd0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
25de0 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
25df0 74 57 61 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72  tWalkFail(Walker
25e00 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66  *, Select*);.#if
25e10 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
25e20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
25e30 65 63 74 57 61 6c 6b 41 73 73 65 72 74 32 28 57  ectWalkAssert2(W
25e40 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
25e50 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
25e60 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
25e70 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
25e80 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
25e90 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
25ea0 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
25eb0 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
25ec0 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
25ed0 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
25ee0 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
25ef0 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
25f00 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
25f10 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
25f20 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
25f30 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
25f40 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
25f50 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
25f60 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
25f70 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
25f80 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
25f90 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
25fa0 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f  s a set of one o
25fb0 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28  r more CTEs.** (
25fc0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
25fd0 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65  ressions) create
25fe0 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49  d by a single WI
25ff0 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  TH clause..*/.st
26000 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e  ruct With {.  in
26010 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20  t nCte;         
26020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26030 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20   Number of CTEs 
26040 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
26050 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f  se */.  With *pO
26060 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  uter;           
26070 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61          /* Conta
26080 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73  ining WITH claus
26090 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
260a0 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20  struct Cte {    
260b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260c0 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20  /* For each CTE 
260d0 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
260e0 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68  se.... */.    ch
260f0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26110 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54   Name of this CT
26120 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  E */.    ExprLis
26130 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20  t *pCols;       
26140 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
26150 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c   of explicit col
26160 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55  umn names, or NU
26170 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  LL */.    Select
26180 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
26190 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
261a0 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
261b0 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63  his CTE */.    c
261c0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45  onst char *zCteE
261d0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
261e0 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
261f0 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66  for circular ref
26200 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61  erences */.  } a
26210 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20  [1];.};..#ifdef 
26220 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
26230 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
26240 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f  f the TreeView o
26250 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f  bject is used fo
26260 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63  r printing the c
26270 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74  ontent of.** dat
26280 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20  a structures on 
26290 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
262a0 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65  tf() using a tre
262b0 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a  e-like view..*/.
262c0 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20  struct TreeView 
262d0 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20  {.  int iLevel; 
262e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
262f0 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68  hich level of th
26300 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e  e tree we are on
26310 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b   */.  u8  bLine[
26320 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a  100];         /*
26330 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69   Draw vertical i
26340 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c  n column i if bL
26350 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a  ine[i] is true *
26360 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  /.};.#endif /* S
26370 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a  QLITE_DEBUG */..
26380 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63  /*.** This objec
26390 74 20 69 73 20 75 73 65 64 20 69 6e 20 76 61 72  t is used in var
263a0 69 6f 69 75 73 20 77 61 79 73 2c 20 61 6c 6c 20  ioius ways, all 
263b0 72 65 6c 61 74 65 64 20 74 6f 20 77 69 6e 64 6f  related to windo
263c0 77 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 0a 2a  w functions.**.*
263d0 2a 20 20 20 28 31 29 20 41 20 73 69 6e 67 6c 65  *   (1) A single
263e0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
263f0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 61  s structure is a
26400 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 0a 2a  ttached to the.*
26410 2a 20 20 20 20 20 20 20 74 68 65 20 45 78 70 72  *       the Expr
26420 2e 70 57 69 6e 20 66 69 65 6c 64 20 66 6f 72 20  .pWin field for 
26430 65 61 63 68 20 77 69 6e 64 6f 77 20 66 75 6e 63  each window func
26440 74 69 6f 6e 20 69 6e 20 61 6e 20 65 78 70 72 65  tion in an expre
26450 73 73 69 6f 6e 20 74 72 65 65 2e 0a 2a 2a 20 20  ssion tree..**  
26460 20 20 20 20 20 54 68 69 73 20 6f 62 6a 65 63 74       This object
26470 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 66 6f 72   holds the infor
26480 6d 61 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 65 64  mation contained
26490 20 69 6e 20 74 68 65 20 4f 56 45 52 20 63 6c 61   in the OVER cla
264a0 75 73 65 2c 0a 2a 2a 20 20 20 20 20 20 20 70 6c  use,.**       pl
264b0 75 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69  us additional fi
264c0 65 6c 64 73 20 75 73 65 64 20 64 75 72 69 6e 67  elds used during
264d0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
264e0 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 32 29 20 41 6c  ..**.**   (2) Al
264f0 6c 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  l window functio
26500 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 53  ns in a single S
26510 45 4c 45 43 54 20 66 6f 72 6d 20 61 20 6c 69 6e  ELECT form a lin
26520 6b 65 64 2d 6c 69 73 74 0a 2a 2a 20 20 20 20 20  ked-list.**     
26530 20 20 61 74 74 61 63 68 65 64 20 74 6f 20 53 65    attached to Se
26540 6c 65 63 74 2e 70 57 69 6e 2e 20 20 54 68 65 20  lect.pWin.  The 
26550 57 69 6e 64 6f 77 2e 70 46 75 6e 63 20 61 6e 64  Window.pFunc and
26560 20 57 69 6e 64 6f 77 2e 70 45 78 70 72 0a 2a 2a   Window.pExpr.**
26570 20 20 20 20 20 20 20 66 69 65 6c 64 73 20 70 6f         fields po
26580 69 6e 74 20 62 61 63 6b 20 74 6f 20 74 68 65 20  int back to the 
26590 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
265a0 69 73 20 74 68 65 20 77 69 6e 64 6f 77 20 66 75  is the window fu
265b0 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20  nction..**.**   
265c0 28 33 29 20 54 68 65 20 74 65 72 6d 73 20 6f 66  (3) The terms of
265d0 20 74 68 65 20 57 49 4e 44 4f 57 20 63 6c 61 75   the WINDOW clau
265e0 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  se of a SELECT a
265f0 72 65 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  re instances of 
26600 74 68 69 73 0a 2a 2a 20 20 20 20 20 20 20 6f 62  this.**       ob
26610 6a 65 63 74 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ject on a linked
26620 20 6c 69 73 74 20 61 74 74 61 63 68 65 64 20 74   list attached t
26630 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e 44 65 66  o Select.pWinDef
26640 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 73 65  n..**.** The use
26650 73 20 28 31 29 20 61 6e 64 20 28 32 29 20 61 72  s (1) and (2) ar
26660 65 20 72 65 61 6c 6c 79 20 74 68 65 20 73 61 6d  e really the sam
26670 65 20 57 69 6e 64 6f 77 20 6f 62 6a 65 63 74 20  e Window object 
26680 74 68 61 74 20 6a 75 73 74 20 68 61 70 70 65 6e  that just happen
26690 73 0a 2a 2a 20 74 6f 20 62 65 20 61 63 63 65 73  s.** to be acces
266a0 73 69 62 6c 65 20 69 6e 20 74 77 6f 20 64 69 66  sible in two dif
266b0 66 65 72 65 6e 74 20 77 61 79 73 2e 20 20 55 73  ferent ways.  Us
266c0 65 20 28 33 29 20 69 73 20 61 72 65 20 73 65 70  e (3) is are sep
266d0 61 72 61 74 65 20 6f 62 6a 65 63 74 73 2e 0a 2a  arate objects..*
266e0 2f 0a 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20  /.struct Window 
266f0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
26700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
26710 61 6d 65 20 6f 66 20 77 69 6e 64 6f 77 20 28 6d  ame of window (m
26720 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
26730 20 45 78 70 72 4c 69 73 74 20 2a 70 50 61 72 74   ExprList *pPart
26740 69 74 69 6f 6e 3b 20 20 20 2f 2a 20 50 41 52 54  ition;   /* PART
26750 49 54 49 4f 4e 20 42 59 20 63 6c 61 75 73 65 20  ITION BY clause 
26760 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
26770 4f 72 64 65 72 42 79 3b 20 20 20 20 20 2f 2a 20  OrderBy;     /* 
26780 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
26790 2a 2f 0a 20 20 75 38 20 65 54 79 70 65 3b 20 20  */.  u8 eType;  
267a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
267b0 54 4b 5f 52 41 4e 47 45 20 6f 72 20 54 4b 5f 52  TK_RANGE or TK_R
267c0 4f 57 53 20 2a 2f 0a 20 20 75 38 20 65 53 74 61  OWS */.  u8 eSta
267d0 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
267e0 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43   /* UNBOUNDED, C
267f0 55 52 52 45 4e 54 2c 20 50 52 45 43 45 44 49 4e  URRENT, PRECEDIN
26800 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a  G or FOLLOWING *
26810 2f 0a 20 20 75 38 20 65 45 6e 64 3b 20 20 20 20  /.  u8 eEnd;    
26820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
26830 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e  NBOUNDED, CURREN
26840 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20  T, PRECEDING or 
26850 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 45  FOLLOWING */.  E
26860 78 70 72 20 2a 70 53 74 61 72 74 3b 20 20 20 20  xpr *pStart;    
26870 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
26880 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e  sion for "<expr>
26890 20 50 52 45 43 45 44 49 4e 47 22 20 2a 2f 0a 20   PRECEDING" */. 
268a0 20 45 78 70 72 20 2a 70 45 6e 64 3b 20 20 20 20   Expr *pEnd;    
268b0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
268c0 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70  ession for "<exp
268d0 72 3e 20 46 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f  r> FOLLOWING" */
268e0 0a 20 20 57 69 6e 64 6f 77 20 2a 70 4e 65 78 74  .  Window *pNext
268f0 57 69 6e 3b 20 20 20 20 20 20 20 2f 2a 20 4e 65  Win;       /* Ne
26900 78 74 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  xt window functi
26910 6f 6e 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20  on belonging to 
26920 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20  this SELECT */. 
26930 20 45 78 70 72 20 2a 70 46 69 6c 74 65 72 3b 20   Expr *pFilter; 
26940 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
26950 46 49 4c 54 45 52 20 65 78 70 72 65 73 73 69 6f  FILTER expressio
26960 6e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  n */.  FuncDef *
26970 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 2f  pFunc;         /
26980 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  * The function *
26990 2f 0a 20 20 69 6e 74 20 69 45 70 68 43 73 72 3b  /.  int iEphCsr;
269a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
269b0 61 72 74 69 74 69 6f 6e 20 62 75 66 66 65 72 20  artition buffer 
269c0 6f 72 20 50 65 65 72 20 62 75 66 66 65 72 20 2a  or Peer buffer *
269d0 2f 0a 20 20 69 6e 74 20 72 65 67 41 63 63 75 6d  /.  int regAccum
269e0 3b 0a 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c  ;.  int regResul
269f0 74 3b 0a 20 20 69 6e 74 20 63 73 72 41 70 70 3b  t;.  int csrApp;
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26a10 46 75 6e 63 74 69 6f 6e 20 63 75 72 73 6f 72 20  Function cursor 
26a20 28 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78  (used by min/max
26a30 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41 70  ) */.  int regAp
26a40 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
26a50 2a 20 46 75 6e 63 74 69 6f 6e 20 72 65 67 69 73  * Function regis
26a60 74 65 72 20 28 61 6c 73 6f 20 75 73 65 64 20 62  ter (also used b
26a70 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20  y min/max) */.  
26a80 69 6e 74 20 72 65 67 50 61 72 74 3b 20 20 20 20  int regPart;    
26a90 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
26aa0 20 69 6e 20 61 20 73 65 74 20 6f 66 20 72 65 67   in a set of reg
26ab0 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 50  isters holding P
26ac0 41 52 54 49 54 49 4f 4e 20 42 59 0a 20 20 20 20  ARTITION BY.    
26ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ae0 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 4f 52 44        ** and ORD
26af0 45 52 20 42 59 20 76 61 6c 75 65 73 20 66 6f 72  ER BY values for
26b00 20 74 68 65 20 77 69 6e 64 6f 77 20 2a 2f 0a 20   the window */. 
26b10 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 3b 20 20   Expr *pOwner;  
26b20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
26b30 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74 20 74 68  ession object th
26b40 69 73 20 77 69 6e 64 6f 77 20 69 73 20 61 74 74  is window is att
26b50 61 63 68 65 64 20 74 6f 20 2a 2f 0a 20 20 69 6e  ached to */.  in
26b60 74 20 6e 42 75 66 66 65 72 43 6f 6c 3b 20 20 20  t nBufferCol;   
26b70 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
26b80 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 62 75  of columns in bu
26b90 66 66 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20  ffer table */.  
26ba0 69 6e 74 20 69 41 72 67 43 6f 6c 3b 20 20 20 20  int iArgCol;    
26bb0 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65          /* Offse
26bc0 74 20 6f 66 20 66 69 72 73 74 20 61 72 67 75 6d  t of first argum
26bd0 65 6e 74 20 66 6f 72 20 74 68 69 73 20 66 75 6e  ent for this fun
26be0 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 23 69 66  ction */.};..#if
26bf0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26c00 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64  _WINDOWFUNC.void
26c10 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 65   sqlite3WindowDe
26c20 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 57  lete(sqlite3*, W
26c30 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71  indow*);.void sq
26c40 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69 73 74 44  lite3WindowListD
26c50 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 64  elete(sqlite3 *d
26c60 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57  b, Window *p);.W
26c70 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69  indow *sqlite3Wi
26c80 6e 64 6f 77 41 6c 6c 6f 63 28 50 61 72 73 65 2a  ndowAlloc(Parse*
26c90 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 45 78 70 72  , int, int, Expr
26ca0 2a 2c 20 69 6e 74 20 2c 20 45 78 70 72 2a 29 3b  *, int , Expr*);
26cb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
26cc0 64 6f 77 41 74 74 61 63 68 28 50 61 72 73 65 2a  dowAttach(Parse*
26cd0 2c 20 45 78 70 72 2a 2c 20 57 69 6e 64 6f 77 2a  , Expr*, Window*
26ce0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69  );.int sqlite3Wi
26cf0 6e 64 6f 77 43 6f 6d 70 61 72 65 28 50 61 72 73  ndowCompare(Pars
26d00 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e  e*, Window*, Win
26d10 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dow*);.void sqli
26d20 74 65 33 57 69 6e 64 6f 77 43 6f 64 65 49 6e 69  te3WindowCodeIni
26d30 74 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77  t(Parse*, Window
26d40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26d50 57 69 6e 64 6f 77 43 6f 64 65 53 74 65 70 28 50  WindowCodeStep(P
26d60 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
26d70 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2c  WhereInfo*, int,
26d80 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
26d90 65 33 57 69 6e 64 6f 77 52 65 77 72 69 74 65 28  e3WindowRewrite(
26da0 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 29  Parse*, Select*)
26db0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
26dc0 61 6e 64 53 75 62 71 75 65 72 79 28 50 61 72 73  andSubquery(Pars
26dd0 65 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69  e*, struct SrcLi
26de0 73 74 5f 69 74 65 6d 2a 29 3b 0a 76 6f 69 64 20  st_item*);.void 
26df0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 55 70 64  sqlite3WindowUpd
26e00 61 74 65 28 50 61 72 73 65 2a 2c 20 57 69 6e 64  ate(Parse*, Wind
26e10 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 46 75  ow*, Window*, Fu
26e20 6e 63 44 65 66 2a 29 3b 0a 57 69 6e 64 6f 77 20  ncDef*);.Window 
26e30 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 75  *sqlite3WindowDu
26e40 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 45  p(sqlite3 *db, E
26e50 78 70 72 20 2a 70 4f 77 6e 65 72 2c 20 57 69 6e  xpr *pOwner, Win
26e60 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20  dow *p);.Window 
26e70 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69  *sqlite3WindowLi
26e80 73 74 44 75 70 28 73 71 6c 69 74 65 33 20 2a 64  stDup(sqlite3 *d
26e90 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 76  b, Window *p);.v
26ea0 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
26eb0 77 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  wFunctions(void)
26ec0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
26ed0 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 65   sqlite3WindowDe
26ee0 6c 65 74 65 28 61 2c 62 29 0a 23 20 64 65 66 69  lete(a,b).# defi
26ef0 6e 65 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  ne sqlite3Window
26f00 46 75 6e 63 74 69 6f 6e 73 28 29 0a 23 20 64 65  Functions().# de
26f10 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e 64  fine sqlite3Wind
26f20 6f 77 41 74 74 61 63 68 28 61 2c 62 2c 63 29 0a  owAttach(a,b,c).
26f30 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 73  #endif../*.** As
26f40 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
26f50 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
26f60 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
26f70 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
26f80 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
26f90 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
26fa0 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
26fb0 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
26fc0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
26fd0 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
26fe0 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
26ff0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
27000 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
27010 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27030 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
27040 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
27050 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
27060 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
27070 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20   }              
27080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270a0 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
270b0 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b   The SQLITE_*_BK
270c0 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75  PT macros are su
270d0 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68  bstitutes for th
270e0 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69  e error codes wi
270f0 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e  th.** the same n
27100 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20  ame but without 
27110 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78  the _BKPT suffix
27120 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  .  These macros 
27130 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e  invoke.** routin
27140 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74  es that report t
27150 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f  he line-number o
27160 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f  n which the erro
27170 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20  r originated.** 
27180 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f  using sqlite3_lo
27190 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e  g().  The routin
271a0 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20  es also provide 
271b0 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
271c0 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64  ce.** to set a d
271d0 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69  ebugger breakpoi
271e0 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
271f0 65 33 52 65 70 6f 72 74 45 72 72 6f 72 28 69 6e  e3ReportError(in
27200 74 20 69 45 72 72 2c 20 69 6e 74 20 6c 69 6e 65  t iErr, int line
27210 6e 6f 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  no, const char *
27220 7a 54 79 70 65 29 3b 0a 69 6e 74 20 73 71 6c 69  zType);.int sqli
27230 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
27240 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
27250 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74  3MisuseError(int
27260 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61  );.int sqlite3Ca
27270 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29  ntopenError(int)
27280 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
27290 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71  _CORRUPT_BKPT sq
272a0 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
272b0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
272c0 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ine SQLITE_MISUS
272d0 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69  E_BKPT sqlite3Mi
272e0 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  suseError(__LINE
272f0 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
27300 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54  TE_CANTOPEN_BKPT
27310 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
27320 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
27330 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
27340 42 55 47 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  BUG.  int sqlite
27350 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29  3NomemError(int)
27360 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  ;.  int sqlite3I
27370 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69  oerrnomemError(i
27380 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
27390 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72  e3CorruptPgnoErr
273a0 6f 72 28 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20  or(int,Pgno);.# 
273b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
273c0 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  MEM_BKPT sqlite3
273d0 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e  NomemError(__LIN
273e0 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51  E__).# define SQ
273f0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
27400 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65  _BKPT sqlite3Ioe
27410 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c  rrnomemError(__L
27420 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20  INE__).# define 
27430 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50  SQLITE_CORRUPT_P
27440 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f  GNO(P) sqlite3Co
27450 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f  rruptPgnoError(_
27460 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c  _LINE__,(P)).#el
27470 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
27480 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51  TE_NOMEM_BKPT SQ
27490 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66  LITE_NOMEM.# def
274a0 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ine SQLITE_IOERR
274b0 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49  _NOMEM_BKPT SQLI
274c0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23  TE_IOERR_NOMEM.#
274d0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43   define SQLITE_C
274e0 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73  ORRUPT_PGNO(P) s
274f0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
27500 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e  or(__LINE__).#en
27510 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20  dif../*.** FTS3 
27520 61 6e 64 20 46 54 53 34 20 62 6f 74 68 20 72 65  and FTS4 both re
27530 71 75 69 72 65 20 76 69 72 74 75 61 6c 20 74 61  quire virtual ta
27540 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23  ble support.*/.#
27550 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
27560 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
27570 42 4c 45 29 0a 23 20 75 6e 64 65 66 20 53 51 4c  BLE).# undef SQL
27580 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a  ITE_ENABLE_FTS3.
27590 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
275a0 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69  NABLE_FTS4.#endi
275b0 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73  f../*.** FTS4 is
275c0 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e   really an exten
275d0 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20  sion for FTS3.  
275e0 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73  It is enabled us
275f0 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54  ing the.** SQLIT
27600 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61  E_ENABLE_FTS3 ma
27610 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f  cro.  But to avo
27620 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20  id confusion we 
27630 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  also call.** the
27640 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
27650 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72  TS4 macro to ser
27660 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ve as an alias f
27670 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
27680 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65  _FTS3..*/.#if de
27690 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
276a0 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65  BLE_FTS4) && !de
276b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
276c0 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69  BLE_FTS3).# defi
276d0 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
276e0 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a  _FTS3 1.#endif..
276f0 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e  /*.** The ctype.
27700 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64  h header is need
27710 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49  ed for non-ASCII
27720 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73   systems.  It is
27730 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20   also.** needed 
27740 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53  by FTS3 when FTS
27750 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  3 is included in
27760 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f   the amalgamatio
27770 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
27780 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29  ed(SQLITE_ASCII)
27790 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
277a0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
277b0 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65  _FTS3) && define
277c0 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  d(SQLITE_AMALGAM
277d0 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64  ATION)).# includ
277e0 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64  e <ctype.h>.#end
277f0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
27800 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d  llowing macros m
27810 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72  imic the standar
27820 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69  d library functi
27830 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a  ons toupper(),.*
27840 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61  * isspace(), isa
27850 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28  lnum(), isdigit(
27860 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29  ) and isxdigit()
27870 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
27880 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65  The.** sqlite ve
27890 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b  rsions only work
278a0 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
278b0 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  cters, regardles
278c0 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a  s of locale..*/.
278d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53  #ifdef SQLITE_AS
278e0 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  CII.# define sql
278f0 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
27900 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74  ((x)&~(sqlite3Ct
27910 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
27920 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29   char)(x)]&0x20)
27930 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27940 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28  e3Isspace(x)   (
27950 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
27960 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27970 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69  x)]&0x01).# defi
27980 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
27990 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  m(x)   (sqlite3C
279a0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
279b0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36  d char)(x)]&0x06
279c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
279d0 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28  e3Isalpha(x)   (
279e0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
279f0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27a00 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69  x)]&0x02).# defi
27a10 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
27a20 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  t(x)   (sqlite3C
27a30 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
27a40 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34  d char)(x)]&0x04
27a50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27a60 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28  e3Isxdigit(x)  (
27a70 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
27a80 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27a90 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69  x)]&0x08).# defi
27aa0 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
27ab0 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55  r(x)   (sqlite3U
27ac0 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73  pperToLower[(uns
27ad0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29  igned char)(x)])
27ae0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27af0 33 49 73 71 75 6f 74 65 28 78 29 20 20 20 28 73  3Isquote(x)   (s
27b00 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
27b10 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27b20 29 5d 26 30 78 38 30 29 0a 23 65 6c 73 65 0a 23  )]&0x80).#else.#
27b30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
27b40 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70  oupper(x)   toup
27b50 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  per((unsigned ch
27b60 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
27b70 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
27b80 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e  x)   isspace((un
27b90 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
27ba0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27bb0 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73  3Isalnum(x)   is
27bc0 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20  alnum((unsigned 
27bd0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
27be0 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
27bf0 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28  a(x)   isalpha((
27c00 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27c10 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
27c20 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
27c30 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  isdigit((unsigne
27c40 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
27c50 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
27c60 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69  igit(x)  isxdigi
27c70 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
27c80 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
27c90 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
27ca0 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69     tolower((unsi
27cb0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
27cc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
27cd0 73 71 75 6f 74 65 28 78 29 20 20 20 28 28 78 29  squote(x)   ((x)
27ce0 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27  =='"'||(x)=='\''
27cf0 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d  ||(x)=='['||(x)=
27d00 3d 27 60 27 29 0a 23 65 6e 64 69 66 0a 69 6e 74  ='`').#endif.int
27d10 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72   sqlite3IsIdChar
27d20 28 75 38 29 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  (u8);../*.** Int
27d30 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70  ernal function p
27d40 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74  rototypes.*/.int
27d50 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
27d60 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
27d70 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
27d80 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f  lite3Strlen30(co
27d90 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
27da0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ine sqlite3Strle
27db0 6e 33 30 4e 4e 28 43 29 20 28 73 74 72 6c 65 6e  n30NN(C) (strlen
27dc0 28 43 29 26 30 78 33 66 66 66 66 66 66 66 29 0a  (C)&0x3fffffff).
27dd0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c  char *sqlite3Col
27de0 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c  umnType(Column*,
27df0 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
27e00 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20  sqlite3StrNICmp 
27e10 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70  sqlite3_strnicmp
27e20 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ..int sqlite3Mal
27e30 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76  locInit(void);.v
27e40 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  oid sqlite3Mallo
27e50 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64  cEnd(void);.void
27e60 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28   *sqlite3Malloc(
27e70 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
27e80 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36  te3MallocZero(u6
27e90 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
27ea0 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71  3DbMallocZero(sq
27eb0 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f  lite3*, u64);.vo
27ec0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
27ed0 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c  locRaw(sqlite3*,
27ee0 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
27ef0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
27f00 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  N(sqlite3*, u64)
27f10 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
27f20 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a  bStrDup(sqlite3*
27f30 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  ,const char*);.c
27f40 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
27f50 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  rNDup(sqlite3*,c
27f60 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29  onst char*, u64)
27f70 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
27f80 62 53 70 61 6e 44 75 70 28 73 71 6c 69 74 65 33  bSpanDup(sqlite3
27f90 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
27fa0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
27fb0 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63   *sqlite3Realloc
27fc0 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f  (void*, u64);.vo
27fd0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
27fe0 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74  llocOrFree(sqlit
27ff0 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
28000 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
28010 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74  3DbRealloc(sqlit
28020 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
28030 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  4);.void sqlite3
28040 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  DbFree(sqlite3*,
28050 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
28060 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 73 71  lite3DbFreeNN(sq
28070 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
28080 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
28090 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e  cSize(void*);.in
280a0 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  t sqlite3DbMallo
280b0 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20  cSize(sqlite3*, 
280c0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
280d0 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28  lite3PageMalloc(
280e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
280f0 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a  e3PageFree(void*
28100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
28110 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69  emSetDefault(voi
28120 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  d);.#ifndef SQLI
28130 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f  TE_UNTESTABLE.vo
28140 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e  id sqlite3Benign
28150 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64  MallocHooks(void
28160 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64   (*)(void), void
28170 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e   (*)(void));.#en
28180 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48  dif.int sqlite3H
28190 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f  eapNearlyFull(vo
281a0 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73  id);../*.** On s
281b0 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c  ystems with ampl
281c0 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e  e stack space an
281d0 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61  d that support a
281e0 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a  lloca(), make.**
281f0 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29   use of alloca()
28200 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65   to obtain space
28210 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d   for large autom
28220 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42  atic objects.  B
28230 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62  y default,.** ob
28240 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20  tain space from 
28250 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20  malloc()..**.** 
28260 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75  The alloca() rou
28270 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72  tine never retur
28280 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77  ns NULL.  This w
28290 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70  ill cause code p
282a0 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61  aths.** that dea
282b0 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74  l with sqlite3St
282c0 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75  ackAlloc() failu
282d0 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63  res to be unreac
282e0 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  hable..*/.#ifdef
282f0 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f   SQLITE_USE_ALLO
28300 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  CA.# define sqli
28310 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
28320 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e  (D,N)   alloca(N
28330 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28340 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
28350 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c  (D,N)  memset(al
28360 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23  loca(N), 0, N).#
28370 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
28380 74 61 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65  tackFree(D,P).#e
28390 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
283a0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
283b0 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33  w(D,N)   sqlite3
283c0 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  DbMallocRaw(D,N)
283d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
283e0 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
283f0 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d  D,N)  sqlite3DbM
28400 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23  allocZero(D,N).#
28410 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
28420 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
28430 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
28440 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  e(D,P).#endif../
28450 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62  * Do not allow b
28460 6f 74 68 20 4d 45 4d 53 59 53 35 20 61 6e 64 20  oth MEMSYS5 and 
28470 4d 45 4d 53 59 53 33 20 74 6f 20 62 65 20 64 65  MEMSYS3 to be de
28480 66 69 6e 65 64 20 74 6f 67 65 74 68 65 72 2e 20  fined together. 
28490 20 49 66 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c   If they.** are,
284a0 20 64 69 73 61 62 6c 65 20 4d 45 4d 53 59 53 33   disable MEMSYS3
284b0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
284c0 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35  E_ENABLE_MEMSYS5
284d0 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
284e0 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
284f0 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35  te3MemGetMemsys5
28500 28 76 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20 53  (void);.#undef S
28510 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
28520 53 59 53 33 0a 23 65 6e 64 69 66 0a 23 69 66 64  SYS3.#endif.#ifd
28530 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
28540 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73  _MEMSYS3.const s
28550 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
28560 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
28570 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a  tMemsys3(void);.
28580 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
28590 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d   SQLITE_MUTEX_OM
285a0 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  IT.  sqlite3_mut
285b0 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
285c0 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74   *sqlite3Default
285d0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
285e0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
285f0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
28600 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69  te3NoopMutex(voi
28610 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
28620 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65  tex *sqlite3Mute
28630 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69  xAlloc(int);.  i
28640 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49  nt sqlite3MutexI
28650 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74  nit(void);.  int
28660 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64   sqlite3MutexEnd
28670 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23  (void);.#endif.#
28680 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
28690 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26  TE_MUTEX_OMIT) &
286a0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
286b0 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20  E_MUTEX_NOOP).  
286c0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f  void sqlite3Memo
286d0 72 79 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b  ryBarrier(void);
286e0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
286f0 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72  sqlite3MemoryBar
28700 72 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73  rier().#endif..s
28710 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
28720 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28  ite3StatusValue(
28730 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28740 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20  e3StatusUp(int, 
28750 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28760 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74  e3StatusDown(int
28770 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28780 69 74 65 33 53 74 61 74 75 73 48 69 67 68 77 61  ite3StatusHighwa
28790 74 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 69  ter(int, int);.i
287a0 6e 74 20 73 71 6c 69 74 65 33 4c 6f 6f 6b 61 73  nt sqlite3Lookas
287b0 69 64 65 55 73 65 64 28 73 71 6c 69 74 65 33 2a  ideUsed(sqlite3*
287c0 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63 65  ,int*);../* Acce
287d0 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73  ss to mutexes us
287e0 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74  ed by sqlite3_st
287f0 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65  atus() */.sqlite
28800 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
28810 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69  Pcache1Mutex(voi
28820 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65  d);.sqlite3_mute
28830 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  x *sqlite3Malloc
28840 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69  Mutex(void);..#i
28850 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
28860 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 54 48 52  _ENABLE_MULTITHR
28870 45 41 44 45 44 5f 43 48 45 43 4b 53 29 20 26 26  EADED_CHECKS) &&
28880 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
28890 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 0a 76 6f 69  _MUTEX_OMIT).voi
288a0 64 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57 61  d sqlite3MutexWa
288b0 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 73  rnOnContention(s
288c0 71 6c 69 74 65 33 5f 6d 75 74 65 78 2a 29 3b 0a  qlite3_mutex*);.
288d0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
288e0 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f  qlite3MutexWarnO
288f0 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 78 29 0a 23  nContention(x).#
28900 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
28910 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
28920 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20  ING_POINT.  int 
28930 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75  sqlite3IsNaN(dou
28940 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ble);.#else.# de
28950 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61  fine sqlite3IsNa
28960 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a  N(X)  0.#endif..
28970 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
28980 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
28990 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  ng structure hol
289a0 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ds information a
289b0 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63  bout SQL.** func
289c0 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20  tions arguments 
289d0 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72  that are the par
289e0 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70  ameters to the p
289f0 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
28a00 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e  ..*/.struct Prin
28a10 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20  tfArguments {.  
28a20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20  int nArg;       
28a30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61           /* Tota
28a40 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  l number of argu
28a50 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  ments */.  int n
28a60 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  Used;           
28a70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
28a80 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20   arguments used 
28a90 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69  so far */.  sqli
28aa0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72  te3_value **apAr
28ab0 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75  g;   /* The argu
28ac0 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d  ment values */.}
28ad0 3b 0a 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  ;..char *sqlite3
28ae0 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
28af0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  ,const char*, ..
28b00 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
28b10 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  3VMPrintf(sqlite
28b20 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
28b30 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65  va_list);.#if de
28b40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
28b50 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
28b60 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
28b70 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACE).  void sqli
28b80 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63  te3DebugPrintf(c
28b90 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
28ba0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
28bb0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
28bc0 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ).  void *sqlite
28bd0 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63  3TestTextToPtr(c
28be0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
28bf0 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
28c00 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20  (SQLITE_DEBUG). 
28c10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
28c20 65 56 69 65 77 45 78 70 72 28 54 72 65 65 56 69  eViewExpr(TreeVi
28c30 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a  ew*, const Expr*
28c40 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
28c50 6c 69 74 65 33 54 72 65 65 56 69 65 77 42 61 72  lite3TreeViewBar
28c60 65 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  eExprList(TreeVi
28c70 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
28c80 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
28c90 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
28ca0 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69  e3TreeViewExprLi
28cb0 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
28cc0 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75  nst ExprList*, u
28cd0 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  8, const char*);
28ce0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
28cf0 72 65 65 56 69 65 77 53 72 63 4c 69 73 74 28 54  reeViewSrcList(T
28d00 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
28d10 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  SrcList*);.  voi
28d20 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
28d30 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77  wSelect(TreeView
28d40 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a  *, const Select*
28d50 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
28d60 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69 74  lite3TreeViewWit
28d70 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  h(TreeView*, con
28d80 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  st With*, u8);.#
28d90 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28da0 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20  IT_WINDOWFUNC.  
28db0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
28dc0 56 69 65 77 57 69 6e 64 6f 77 28 54 72 65 65 56  ViewWindow(TreeV
28dd0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e 64  iew*, const Wind
28de0 6f 77 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64  ow*, u8);.  void
28df0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
28e00 57 69 6e 46 75 6e 63 28 54 72 65 65 56 69 65 77  WinFunc(TreeView
28e10 2a 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a  *, const Window*
28e20 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 23 65  , u8);.#endif.#e
28e30 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69  ndif...void sqli
28e40 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61  te3SetString(cha
28e50 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  r **, sqlite3*, 
28e60 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
28e70 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d  id sqlite3ErrorM
28e80 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  sg(Parse*, const
28e90 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
28ea0 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74  id sqlite3Dequot
28eb0 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  e(char*);.void s
28ec0 71 6c 69 74 65 33 44 65 71 75 6f 74 65 45 78 70  qlite3DequoteExp
28ed0 72 28 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  r(Expr*);.void s
28ee0 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28  qlite3TokenInit(
28ef0 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69  Token*,char*);.i
28f00 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72  nt sqlite3Keywor
28f10 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69  dCode(const unsi
28f20 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29  gned char*, int)
28f30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
28f40 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63  Parser(Parse*, c
28f50 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
28f60 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
28f70 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50  e3FinishCoding(P
28f80 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
28f90 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61  te3GetTempReg(Pa
28fa0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
28fb0 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65  te3ReleaseTempRe
28fc0 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  g(Parse*,int);.i
28fd0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
28fe0 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
28ff0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29000 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65  ReleaseTempRange
29010 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
29020 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
29030 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28  earTempRegCache(
29040 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
29050 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
29060 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49   sqlite3NoTempsI
29070 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  nRange(Parse*,in
29080 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45  t,int);.#endif.E
29090 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
290a0 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
290b0 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  nt,const Token*,
290c0 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
290d0 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a  te3Expr(sqlite3*
290e0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
290f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29100 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65  xprAttachSubtree
29110 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  s(sqlite3*,Expr*
29120 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45  ,Expr*,Expr*);.E
29130 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70  xpr *sqlite3PExp
29140 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45  r(Parse*, int, E
29150 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
29160 69 64 20 73 71 6c 69 74 65 33 50 45 78 70 72 41  id sqlite3PExprA
29170 64 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  ddSelect(Parse*,
29180 20 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29   Expr*, Select*)
29190 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
291a0 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c  xprAnd(sqlite3*,
291b0 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  Expr*, Expr*);.E
291c0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
291d0 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  Function(Parse*,
291e0 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
291f0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
29200 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56  lite3ExprAssignV
29210 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c  arNumber(Parse*,
29220 20 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f   Expr*, u32);.vo
29230 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65  id sqlite3ExprDe
29240 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
29250 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
29260 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
29270 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78  Append(Parse*,Ex
29280 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
29290 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
292a0 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56  3ExprListAppendV
292b0 65 63 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70  ector(Parse*,Exp
292c0 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45  rList*,IdList*,E
292d0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
292e0 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f  te3ExprListSetSo
292f0 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74  rtOrder(ExprList
29300 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
29310 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e  ite3ExprListSetN
29320 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ame(Parse*,ExprL
29330 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ist*,Token*,int)
29340 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29350 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61  prListSetSpan(Pa
29360 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 63  rse*,ExprList*,c
29370 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
29380 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
29390 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c  lite3ExprListDel
293a0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
293b0 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71  prList*);.u32 sq
293c0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61  lite3ExprListFla
293d0 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  gs(const ExprLis
293e0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
293f0 49 6e 64 65 78 48 61 73 44 75 70 6c 69 63 61 74  IndexHasDuplicat
29400 65 52 6f 6f 74 50 61 67 65 28 49 6e 64 65 78 2a  eRootPage(Index*
29410 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
29420 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  it(sqlite3*, cha
29430 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r**);.int sqlite
29440 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f  3InitCallback(vo
29450 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a  id*, int, char**
29460 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
29470 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28 73 71  qlite3InitOne(sq
29480 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 68 61  lite3*, int, cha
29490 72 2a 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  r**, u32);.void 
294a0 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61  sqlite3Pragma(Pa
294b0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
294c0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  n*,Token*,int);.
294d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
294e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
294f0 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33  .Module *sqlite3
29500 50 72 61 67 6d 61 56 74 61 62 52 65 67 69 73 74  PragmaVtabRegist
29510 65 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  er(sqlite3*,cons
29520 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a  t char *zName);.
29530 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
29540 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
29550 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73  asOfConnection(s
29560 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
29570 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
29580 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e  hema(sqlite3*,in
29590 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
295a0 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65  CollapseDatabase
295b0 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b  Array(sqlite3*);
295c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
295d0 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67  mitInternalChang
295e0 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  es(sqlite3*);.vo
295f0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
29600 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69  ColumnNames(sqli
29610 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e  te3*,Table*);.in
29620 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73  t sqlite3Columns
29630 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72  FromExprList(Par
29640 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31  se*,ExprList*,i1
29650 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f  6*,Column**);.vo
29660 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
29670 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64  AddColumnTypeAnd
29680 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a  Collation(Parse*
29690 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29  ,Table*,Select*)
296a0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
296b0 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63  ResultSetOfSelec
296c0 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a  t(Parse*,Select*
296d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
296e0 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50  penMasterTable(P
296f0 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e  arse *, int);.In
29700 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d  dex *sqlite3Prim
29710 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c  aryKeyIndex(Tabl
29720 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33  e*);.i16 sqlite3
29730 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e  ColumnOfIndex(In
29740 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64  dex*, i16);.void
29750 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
29760 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
29770 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
29780 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51  int,int);.#if SQ
29790 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
297a0 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69  EN_COLUMNS.  voi
297b0 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50  d sqlite3ColumnP
297c0 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d  ropertiesFromNam
297d0 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e  e(Table*, Column
297e0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
297f0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  ne sqlite3Column
29800 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61  PropertiesFromNa
29810 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70  me(T,C) /* no-op
29820 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20   */.#endif.void 
29830 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
29840 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
29850 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
29860 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50  ite3AddNotNull(P
29870 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
29880 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d  d sqlite3AddPrim
29890 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  aryKey(Parse*, E
298a0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
298b0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
298c0 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f  qlite3AddCheckCo
298d0 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
298e0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
298f0 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
29900 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
29910 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
29920 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
29930 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61   sqlite3AddColla
29940 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  teType(Parse*, T
29950 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
29960 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72  ite3EndTable(Par
29970 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
29980 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69  *,u8,Select*);.i
29990 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55  nt sqlite3ParseU
299a0 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  ri(const char*,c
299b0 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67  onst char*,unsig
299c0 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20  ned int*,.      
299d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
299e0 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72  lite3_vfs**,char
299f0 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72  **,char **);.Btr
29a00 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d  ee *sqlite3DbNam
29a10 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33  eToBtree(sqlite3
29a20 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
29a30 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
29a40 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69  NTESTABLE.# defi
29a50 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  ne sqlite3FaultS
29a60 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  im(X) SQLITE_OK.
29a70 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69  #else.  int sqli
29a80 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29  te3FaultSim(int)
29a90 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63  ;.#endif..Bitvec
29aa0 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43   *sqlite3BitvecC
29ab0 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20  reate(u32);.int 
29ac0 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
29ad0 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
29ae0 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
29af0 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69  ecTestNotNull(Bi
29b00 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
29b10 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65   sqlite3BitvecSe
29b20 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
29b30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
29b40 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a  vecClear(Bitvec*
29b50 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76  , u32, void*);.v
29b60 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
29b70 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a  cDestroy(Bitvec*
29b80 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69  );.u32 sqlite3Bi
29b90 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a  tvecSize(Bitvec*
29ba0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
29bb0 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74  E_UNTESTABLE.int
29bc0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75   sqlite3BitvecBu
29bd0 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e  iltinTest(int,in
29be0 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77  t*);.#endif..Row
29bf0 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53  Set *sqlite3RowS
29c00 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29  etInit(sqlite3*)
29c10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
29c20 77 53 65 74 44 65 6c 65 74 65 28 76 6f 69 64 2a  wSetDelete(void*
29c30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29c40 6f 77 53 65 74 43 6c 65 61 72 28 76 6f 69 64 2a  owSetClear(void*
29c50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29c60 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
29c70 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
29c80 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
29c90 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42  (RowSet*, int iB
29ca0 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20  atch, i64);.int 
29cb0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
29cc0 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29  t(RowSet*, i64*)
29cd0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  ;..void sqlite3C
29ce0 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a  reateView(Parse*
29cf0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
29d00 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
29d10 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
29d20 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
29d30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
29d40 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
29d50 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
29d60 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
29d70 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
29d80 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
29d90 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
29da0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
29db0 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
29dc0 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
29dd0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
29de0 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74  TTACHED>30.  int
29df0 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
29e00 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a  lZero(yDbMask);.
29e10 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
29e20 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
29e30 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
29e40 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
29e50 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
29e60 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
29e70 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
29e80 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
29e90 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
29ea0 20 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73   Table*);.void s
29eb0 71 6c 69 74 65 33 46 72 65 65 49 6e 64 65 78 28  qlite3FreeIndex(
29ec0 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
29ed0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
29ee0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
29ef0 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  MENT.  void sqli
29f00 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
29f10 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61  Begin(Parse *pPa
29f20 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  rse);.  void sql
29f30 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
29f40 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72  tEnd(Parse *pPar
29f50 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  se);.#else.# def
29f60 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
29f70 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29  ncrementBegin(X)
29f80 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29f90 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
29fa0 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  d(X).#endif.void
29fb0 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50   sqlite3Insert(P
29fc0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
29fd0 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74   Select*, IdList
29fe0 2a 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a 29  *, int, Upsert*)
29ff0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
2a000 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
2a010 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
2a020 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
2a030 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
2a040 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 20  tAppend(Parse*, 
2a050 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  IdList*, Token*)
2a060 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c  ;.int sqlite3IdL
2a070 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a  istIndex(IdList*
2a080 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53  ,const char*);.S
2a090 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
2a0a0 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 50 61  rcListEnlarge(Pa
2a0b0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2a0c0 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69  int, int);.SrcLi
2a0d0 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
2a0e0 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
2a0f0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
2a100 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c  *, Token*);.SrcL
2a110 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
2a120 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72  istAppendFromTer
2a130 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
2a140 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
2a150 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
2a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a170 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
2a180 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a  , Select*, Expr*
2a190 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
2a1a0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49   sqlite3SrcListI
2a1b0 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a  ndexedBy(Parse *
2a1c0 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b  , SrcList *, Tok
2a1d0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
2a1e0 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72  te3SrcListFuncAr
2a1f0 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  gs(Parse*, SrcLi
2a200 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  st*, ExprList*);
2a210 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
2a220 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
2a230 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
2a240 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
2a250 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
2a260 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
2a270 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
2a280 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
2a290 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
2a2a0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
2a2b0 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
2a2c0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
2a2d0 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
2a2e0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
2a2f0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
2a300 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
2a310 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49  sqlite3AllocateI
2a320 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74  ndexObject(sqlit
2a330 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72  e3*,i16,int,char
2a340 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
2a350 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72  3CreateIndex(Par
2a360 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
2a370 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c  *,SrcList*,ExprL
2a380 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c  ist*,int,Token*,
2a390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a3a0 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
2a3b0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
2a3c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
2a3d0 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53  pIndex(Parse*, S
2a3e0 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  rcList*, int);.i
2a3f0 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
2a400 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
2a410 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a  , SelectDest*);.
2a420 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
2a430 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c  electNew(Parse*,
2a440 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73  ExprList*,SrcLis
2a450 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
2a460 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2a470 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
2a480 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33 32  r*,ExprList*,u32
2a490 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
2a4a0 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74  lite3SelectDelet
2a4b0 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65  e(sqlite3*, Sele
2a4c0 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
2a4d0 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75  ite3SrcListLooku
2a4e0 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  p(Parse*, SrcLis
2a4f0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2a500 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65  IsReadOnly(Parse
2a510 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
2a520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
2a530 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69  nTable(Parse*, i
2a540 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62  nt iCur, int iDb
2a550 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
2a560 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2a570 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
2a580 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26  _DELETE_LIMIT) &
2a590 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2a5a0 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29  E_OMIT_SUBQUERY)
2a5b0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69  .Expr *sqlite3Li
2a5c0 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c  mitWhere(Parse*,
2a5d0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
2a5e0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 63  xprList*,Expr*,c
2a5f0 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  har*);.#endif.vo
2a600 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2a610 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  From(Parse*, Src
2a620 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78  List*, Expr*, Ex
2a630 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b  prList*, Expr*);
2a640 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64  .void sqlite3Upd
2a650 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ate(Parse*, SrcL
2a660 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
2a670 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72 4c 69  Expr*,int,ExprLi
2a680 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20 20 20  st*,Expr*,.     
2a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 70                Up
2a6a0 73 65 72 74 2a 29 3b 0a 57 68 65 72 65 49 6e 66  sert*);.WhereInf
2a6b0 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42  o *sqlite3WhereB
2a6c0 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c  egin(Parse*,SrcL
2a6d0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
2a6e0 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  ist*,ExprList*,u
2a6f0 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  16,int);.void sq
2a700 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68  lite3WhereEnd(Wh
2a710 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73  ereInfo*);.LogEs
2a720 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  t sqlite3WhereOu
2a730 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
2a740 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
2a750 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
2a760 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
2a770 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
2a780 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
2a790 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2a7a0 69 74 65 33 57 68 65 72 65 4f 72 64 65 72 42 79  ite3WhereOrderBy
2a7b0 4c 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28 57 68  LimitOptLabel(Wh
2a7c0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2a7d0 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
2a7e0 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  ted(WhereInfo*);
2a7f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2a800 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
2a810 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2a820 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
2a830 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
2a840 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2a850 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
2a860 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
2a870 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
2a880 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20  _OFF      0     
2a890 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45     /* Use of ONE
2a8a0 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  PASS not allowed
2a8b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50   */.#define ONEP
2a8c0 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20  ASS_SINGLE   1  
2a8d0 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53        /* ONEPASS
2a8e0 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e   valid for a sin
2a8f0 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a  gle row update *
2a900 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  /.#define ONEPAS
2a910 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20  S_MULTI    2    
2a920 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69      /* ONEPASS i
2a930 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74  s valid for mult
2a940 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69  iple rows */.voi
2a950 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
2a960 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e  eLoadIndexColumn
2a970 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
2a980 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2a990 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2a9a0 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
2a9b0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2a9c0 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
2a9d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2a9e0 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
2a9f0 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
2aa00 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2aa10 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2aa20 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
2aa30 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
2aa40 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2aa50 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73  te3ExprCode(Pars
2aa60 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2aa70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2aa80 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a  rCodeCopy(Parse*
2aa90 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
2aaa0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2aab0 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61  odeFactorable(Pa
2aac0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2aad0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2aae0 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72  prCodeAtInit(Par
2aaf0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2ab00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2ab10 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
2ab20 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
2ab30 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2ab40 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
2ab50 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
2ab60 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2ab70 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
2ab80 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2ab90 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2aba0 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
2abb0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
2abc0 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  int, int, u8);.#
2abd0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
2abe0 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31  EL_DUP      0x01
2abf0 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73    /* Deep, not s
2ac00 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f  hallow copies */
2ac10 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2ac20 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78  ECEL_FACTOR   0x
2ac30 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75  02  /* Factor ou
2ac40 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73  t constant terms
2ac50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
2ac60 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20  TE_ECEL_REF     
2ac70 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78   0x04  /* Use Ex
2ac80 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
2ac90 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e  rByCol */.#defin
2aca0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d  e SQLITE_ECEL_OM
2acb0 49 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a 20  ITREF  0x08  /* 
2acc0 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73 74  Omit if ExprList
2acd0 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c  .u.x.iOrderByCol
2ace0 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
2acf0 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65  ExprIfTrue(Parse
2ad00 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
2ad10 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2ad20 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72  3ExprIfFalse(Par
2ad30 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
2ad40 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2ad50 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44 75  te3ExprIfFalseDu
2ad60 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
2ad70 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
2ad80 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
2ad90 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
2ada0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2adb0 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
2adc0 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20 30  LOCATE_VIEW    0
2add0 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41  x01.#define LOCA
2ade0 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32 0a  TE_NOERR   0x02.
2adf0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
2ae00 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a  cateTable(Parse*
2ae10 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74  ,u32 flags,const
2ae20 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2ae30 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
2ae40 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49  ite3LocateTableI
2ae50 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20 66  tem(Parse*,u32 f
2ae60 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63 4c  lags,struct SrcL
2ae70 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
2ae80 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
2ae90 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
2aea0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2aeb0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2aec0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2aed0 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
2aee0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
2aef0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2af00 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2af10 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
2af20 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
2af30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
2af40 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  uum(Parse*,Token
2af50 2a 2c 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  *,Expr*);.int sq
2af60 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63  lite3RunVacuum(c
2af70 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  har**, sqlite3*,
2af80 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61   int, sqlite3_va
2af90 6c 75 65 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  lue*);.char *sql
2afa0 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65  ite3NameFromToke
2afb0 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  n(sqlite3*, Toke
2afc0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2afd0 45 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73  ExprCompare(Pars
2afe0 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  e*,Expr*, Expr*,
2aff0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2b000 65 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69  e3ExprCompareSki
2b010 70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  p(Expr*, Expr*, 
2b020 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2b030 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65  3ExprListCompare
2b040 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  (ExprList*, Expr
2b050 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
2b060 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
2b070 69 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45  iesExpr(Parse*,E
2b080 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
2b090 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b0a0 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c  prImpliesNonNull
2b0b0 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  Row(Expr*,int);.
2b0c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2b0d0 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65  AnalyzeAggregate
2b0e0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
2b0f0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2b100 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
2b110 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65  ggList(NameConte
2b120 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  xt*,ExprList*);.
2b130 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2b140 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28 45 78  overedByIndex(Ex
2b150 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 49  pr*, int iCur, I
2b160 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74  ndex *pIdx);.int
2b170 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e   sqlite3Function
2b180 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72  UsesThisSrc(Expr
2b190 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64  *, SrcList*);.Vd
2b1a0 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64  be *sqlite3GetVd
2b1b0 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e  be(Parse*);.#ifn
2b1c0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
2b1d0 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
2b1e0 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28  e3PrngSaveState(
2b1f0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2b200 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74  te3PrngRestoreSt
2b210 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ate(void);.#endi
2b220 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
2b230 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
2b240 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
2b250 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
2b260 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e  chema(Parse*, in
2b270 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b280 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53  CodeVerifyNamedS
2b290 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f  chema(Parse*, co
2b2a0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a  nst char *zDb);.
2b2b0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
2b2c0 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
2b2d0 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
2b2e0 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61  sqlite3EndTransa
2b2f0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74  ction(Parse*,int
2b300 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b310 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
2b320 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
2b330 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
2b340 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
2b350 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
2b360 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
2b370 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
2b380 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2b390 65 33 45 78 70 72 49 64 54 6f 54 72 75 65 46 61  e3ExprIdToTrueFa
2b3a0 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  lse(Expr*);.int 
2b3b0 73 71 6c 69 74 65 33 45 78 70 72 54 72 75 74 68  sqlite3ExprTruth
2b3c0 56 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70 72  Value(const Expr
2b3d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2b3e0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78  xprIsConstant(Ex
2b3f0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2b400 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e  3ExprIsConstantN
2b410 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69  otJoin(Expr*);.i
2b420 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2b430 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69  ConstantOrFuncti
2b440 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69  on(Expr*, u8);.i
2b450 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2b460 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70 42  ConstantOrGroupB
2b470 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  y(Parse*, Expr*,
2b480 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
2b490 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61   sqlite3ExprIsTa
2b4a0 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  bleConstant(Expr
2b4b0 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  *,int);.#ifdef S
2b4c0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52  QLITE_ENABLE_CUR
2b4d0 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71  SOR_HINTS.int sq
2b4e0 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e  lite3ExprContain
2b4f0 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a 29  sSubquery(Expr*)
2b500 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2b510 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
2b520 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
2b530 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2b540 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
2b550 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2b560 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
2b570 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
2b580 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
2b590 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
2b5a0 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
2b5b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
2b5c0 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a  erateRowDelete(.
2b5d0 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65      Parse*,Table
2b5e0 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69  *,Trigger*,int,i
2b5f0 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38  nt,int,i16,u8,u8
2b600 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ,u8,int);.void s
2b610 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
2b620 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72  wIndexDelete(Par
2b630 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2b640 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2b650 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
2b660 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
2b670 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
2b680 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  nt, int, int, in
2b690 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a  t*,Index*,int);.
2b6a0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2b6b0 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28  lvePartIdxLabel(
2b6c0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Parse*,int);.int
2b6d0 20 73 71 6c 69 74 65 33 45 78 70 72 52 65 66 65   sqlite3ExprRefe
2b6e0 72 65 6e 63 65 73 55 70 64 61 74 65 64 43 6f 6c  rencesUpdatedCol
2b6f0 75 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c 69  umn(Expr*,int*,i
2b700 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b710 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61  3GenerateConstra
2b720 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a  intChecks(Parse*
2b730 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74  ,Table*,int*,int
2b740 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20  ,int,int,int,.  
2b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b770 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74     u8,u8,int,int
2b780 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b  *,int*,Upsert*);
2b790 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2b7a0 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a  NABLE_NULL_TRIM.
2b7b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65    void sqlite3Se
2b7c0 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64  tMakeRecordP5(Vd
2b7d0 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  be*,Table*);.#el
2b7e0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2b7f0 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64  te3SetMakeRecord
2b800 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76  P5(A,B).#endif.v
2b810 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c  oid sqlite3Compl
2b820 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72  eteInsertion(Par
2b830 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69  se*,Table*,int,i
2b840 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c  nt,int,int*,int,
2b850 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  int,int);.int sq
2b860 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
2b870 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
2b880 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38   Table*, int, u8
2b890 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a  , int, u8*, int*
2b8a0 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  , int*);.void sq
2b8b0 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
2b8c0 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  peration(Parse*,
2b8d0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2b8e0 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69   sqlite3MultiWri
2b8f0 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  te(Parse*);.void
2b900 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74   sqlite3MayAbort
2b910 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
2b920 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72  qlite3HaltConstr
2b930 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
2b940 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38  , int, char*, i8
2b950 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
2b960 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61  te3UniqueConstra
2b970 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
2b980 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
2b990 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74  qlite3RowidConst
2b9a0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
2b9b0 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72  t, Table*);.Expr
2b9c0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70   *sqlite3ExprDup
2b9d0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
2b9e0 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  int);.ExprList *
2b9f0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
2ba00 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
2ba10 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c  List*,int);.SrcL
2ba20 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
2ba30 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
2ba40 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49  SrcList*,int);.I
2ba50 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
2ba60 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
2ba70 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  ,IdList*);.Selec
2ba80 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
2ba90 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  Dup(sqlite3*,Sel
2baa0 65 63 74 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44  ect*,int);.FuncD
2bab0 65 66 20 2a 73 71 6c 69 74 65 33 46 75 6e 63 74  ef *sqlite3Funct
2bac0 69 6f 6e 53 65 61 72 63 68 28 69 6e 74 2c 63 6f  ionSearch(int,co
2bad0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2bae0 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75   sqlite3InsertBu
2baf0 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44  iltinFuncs(FuncD
2bb00 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65  ef*,int);.FuncDe
2bb10 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
2bb20 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
2bb30 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
2bb40 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
2bb50 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
2bb60 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  tinFunctions(voi
2bb70 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2bb80 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
2bb90 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
2bba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2bbb0 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69  isterPerConnecti
2bbc0 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  onBuiltinFunctio
2bbd0 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ns(sqlite3*);.in
2bbe0 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
2bbf0 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29  heckOk(sqlite3*)
2bc00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
2bc10 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
2bc20 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
2bc30 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f   sqlite3ChangeCo
2bc40 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  okie(Parse*, int
2bc50 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
2bc60 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
2bc70 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  W) && !defined(S
2bc80 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2bc90 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ER).void sqlite3
2bca0 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28  MaterializeView(
2bcb0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2bcc0 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  Expr*, ExprList*
2bcd0 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e  ,Expr*,int);.#en
2bce0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
2bcf0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2bd00 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
2bd10 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73  eginTrigger(Pars
2bd20 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  e*, Token*,Token
2bd30 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74  *,int,int,IdList
2bd40 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20  *,SrcList*,.    
2bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd60 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74         Expr*,int
2bd70 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2bd80 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67  qlite3FinishTrig
2bd90 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
2bda0 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a  gerStep*, Token*
2bdb0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2bdc0 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72  3DropTrigger(Par
2bdd0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
2bde0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2bdf0 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
2be00 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
2be10 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  r*);.  Trigger *
2be20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
2be30 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  xist(Parse *, Ta
2be40 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  ble*, int, ExprL
2be50 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b  ist*, int *pMask
2be60 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
2be70 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
2be80 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20  (Parse *, Table 
2be90 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2bea0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
2beb0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
2bec0 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73   *, int, ExprLis
2bed0 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a  t*, int, Table *
2bee0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2bf00 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
2bf10 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
2bf20 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
2bf30 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65  (Parse *, Trigge
2bf40 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  r *, Table *, in
2bf50 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
2bf60 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54  void sqliteViewT
2bf70 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20  riggers(Parse*, 
2bf80 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
2bf90 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nt, ExprList*);.
2bfa0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
2bfb0 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28  leteTriggerStep(
2bfc0 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
2bfd0 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67  rStep*);.  Trigg
2bfe0 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
2bff0 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70  riggerSelectStep
2c000 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
2c010 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c030 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
2c040 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2c050 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  r*);.  TriggerSt
2c060 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2c070 65 72 49 6e 73 65 72 74 53 74 65 70 28 50 61 72  erInsertStep(Par
2c080 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69  se*,Token*, IdLi
2c090 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
2c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c               Sel
2c0c0 65 63 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a 2c  ect*,u8,Upsert*,
2c0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0f0 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2c100 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2c110 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
2c120 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2c130 55 70 64 61 74 65 53 74 65 70 28 50 61 72 73 65  UpdateStep(Parse
2c140 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
2c150 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20  t*, Expr*, u8,. 
2c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c180 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2c190 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2c1a0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
2c1b0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
2c1c0 6c 65 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c  leteStep(Parse*,
2c1d0 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20  Token*, Expr*,. 
2c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c200 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2c210 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2c220 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2c230 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
2c240 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29  ite3*, Trigger*)
2c250 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c260 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2c270 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
2c280 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
2c290 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54  ;.  u32 sqlite3T
2c2a0 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61  riggerColmask(Pa
2c2b0 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78  rse*,Trigger*,Ex
2c2c0 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c  prList*,int,int,
2c2d0 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64  Table*,int);.# d
2c2e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
2c2f0 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  seToplevel(p) ((
2c300 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20  p)->pToplevel ? 
2c310 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a  (p)->pToplevel :
2c320 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73   (p)).# define s
2c330 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c  qlite3IsToplevel
2c340 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
2c350 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20  vel==0).#else.# 
2c360 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
2c370 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c  iggersExist(B,C,
2c380 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e  D,E,F) 0.# defin
2c390 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  e sqlite3DeleteT
2c3a0 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65  rigger(A,B).# de
2c3b0 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70  fine sqlite3Drop
2c3c0 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a  TriggerPtr(A,B).
2c3d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2c3e0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2c3f0 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20  rigger(A,B,C).# 
2c400 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2c410 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42  deRowTrigger(A,B
2c420 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a  ,C,D,E,F,G,H,I).
2c430 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2c440 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
2c450 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  rect(A,B,C,D,E,F
2c460 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2c470 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c  e3TriggerList(X,
2c480 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73   Y) 0.# define s
2c490 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
2c4a0 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e  vel(p) p.# defin
2c4b0 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65  e sqlite3IsTople
2c4c0 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e  vel(p) 1.# defin
2c4d0 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
2c4e0 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c  Colmask(A,B,C,D,
2c4f0 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a  E,F,G) 0.#endif.
2c500 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e  .int sqlite3Join
2c510 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
2c520 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
2c530 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2c540 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b  e3CreateForeignK
2c550 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
2c560 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78  ist*, Token*, Ex
2c570 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  prList*, int);.v
2c580 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72  oid sqlite3Defer
2c590 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
2c5a0 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  *, int);.#ifndef
2c5b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2c5c0 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69  HORIZATION.  voi
2c5d0 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  d sqlite3AuthRea
2c5e0 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53  d(Parse*,Expr*,S
2c5f0 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29  chema*,SrcList*)
2c600 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
2c610 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  uthCheck(Parse*,
2c620 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
2c630 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2c640 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
2c650 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
2c660 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65  ontextPush(Parse
2c670 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c  *, AuthContext*,
2c680 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
2c690 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
2c6a0 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68  hContextPop(Auth
2c6b0 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74  Context*);.  int
2c6c0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
2c6d0 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Col(Parse*, cons
2c6e0 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20  t char *, const 
2c6f0 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65  char *, int);.#e
2c700 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2c710 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62  ite3AuthRead(a,b
2c720 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73  ,c,d).# define s
2c730 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
2c740 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51  a,b,c,d,e)    SQ
2c750 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65  LITE_OK.# define
2c760 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2c770 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23  extPush(a,b,c).#
2c780 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
2c790 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29  uthContextPop(a)
2c7a0 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65    ((void)(a)).#e
2c7b0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2c7c0 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Attach(Parse*, 
2c7d0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78  Expr*, Expr*, Ex
2c7e0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2c7f0 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Detach(Parse*,
2c800 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2c810 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46  lite3FixInit(DbF
2c820 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69  ixer*, Parse*, i
2c830 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
2c840 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
2c850 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72  int sqlite3FixSr
2c860 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  cList(DbFixer*, 
2c870 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
2c880 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28  qlite3FixSelect(
2c890 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74  DbFixer*, Select
2c8a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2c8b0 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c  ixExpr(DbFixer*,
2c8c0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
2c8d0 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28  ite3FixExprList(
2c8e0 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69  DbFixer*, ExprLi
2c8f0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2c900 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28  3FixTriggerStep(
2c910 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65  DbFixer*, Trigge
2c920 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c  rStep*);.int sql
2c930 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
2c940 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c  har *z, double*,
2c950 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
2c960 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
2c970 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
2c980 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
2c990 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  toi(const char*)
2c9a0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2c9b0 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20  _OMIT_UTF16.int 
2c9c0 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65  sqlite3Utf16Byte
2c9d0 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a  Len(const void *
2c9e0 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72  pData, int nChar
2c9f0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2ca00 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e  lite3Utf8CharLen
2ca10 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61  (const char *pDa
2ca20 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a  ta, int nByte);.
2ca30 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52  u32 sqlite3Utf8R
2ca40 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b  ead(const u8**);
2ca50 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
2ca60 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45  ogEst(u64);.LogE
2ca70 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
2ca80 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73  Add(LogEst,LogEs
2ca90 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2caa0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2cab0 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69  ABLE.LogEst sqli
2cac0 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75  te3LogEstFromDou
2cad0 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e  ble(double);.#en
2cae0 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2caf0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2cb00 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c  MT_SCANSTATUS) |
2cb10 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  | \.    defined(
2cb20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2cb30 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c  AT3_OR_STAT4) ||
2cb40 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53   \.    defined(S
2cb50 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53  QLITE_EXPLAIN_ES
2cb60 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36  TIMATED_ROWS).u6
2cb70 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  4 sqlite3LogEstT
2cb80 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65  oInt(LogEst);.#e
2cb90 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69  ndif.VList *sqli
2cba0 74 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69  te3VListAdd(sqli
2cbb0 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73  te3*,VList*,cons
2cbc0 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29  t char*,int,int)
2cbd0 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
2cbe0 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e  lite3VListNumToN
2cbf0 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b  ame(VList*,int);
2cc00 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73  .int sqlite3VLis
2cc10 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74  tNameToNum(VList
2cc20 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2cc30 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69  t);../*.** Routi
2cc40 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20  nes to read and 
2cc50 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c  write variable-l
2cc60 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20  ength integers. 
2cc70 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a   These used to.*
2cc80 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63  * be defined loc
2cc90 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65  ally, but now we
2cca0 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20   use the varint 
2ccb0 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20  routines in the 
2ccc0 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a  util.c.** file..
2ccd0 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  */.int sqlite3Pu
2cce0 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64  tVarint(unsigned
2ccf0 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38   char*, u64);.u8
2cd00 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2cd10 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  t(const unsigned
2cd20 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b   char *, u64 *);
2cd30 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
2cd40 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
2cd50 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33  igned char *, u3
2cd60 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  2 *);.int sqlite
2cd70 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76  3VarintLen(u64 v
2cd80 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f  );../*.** The co
2cd90 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72  mmon case is for
2cda0 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20   a varint to be 
2cdb0 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20  a single byte.  
2cdc0 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a  They following.*
2cdd0 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20  * macros handle 
2cde0 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
2cdf0 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64  without a proced
2ce00 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68  ure call, but th
2ce10 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70  en call.** the p
2ce20 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72  rocedure for lar
2ce30 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a  ger varints..*/.
2ce40 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
2ce50 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
2ce60 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
2ce70 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41  0)?((B)=(u32)*(A
2ce80 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56  )),1:sqlite3GetV
2ce90 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32  arint32((A),(u32
2cea0 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
2ceb0 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
2cec0 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75  B)  \.  (u8)(((u
2ced0 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30  32)(B)<(u32)0x80
2cee0 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65  )?(*(A)=(unsigne
2cef0 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a  d char)(B)),1:\.
2cf00 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
2cf10 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65  nt((A),(B))).#de
2cf20 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
2cf30 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
2cf40 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
2cf50 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
2cf60 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
2cf70 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
2cf80 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73  dexAffinityStr(s
2cf90 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29  qlite3*, Index*)
2cfa0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61  ;.void sqlite3Ta
2cfb0 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65  bleAffinity(Vdbe
2cfc0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
2cfd0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d  .char sqlite3Com
2cfe0 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70  pareAffinity(Exp
2cff0 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61  r *pExpr, char a
2d000 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ff2);.int sqlite
2d010 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b  3IndexAffinityOk
2d020 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
2d030 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29  ar idx_affinity)
2d040 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54 61  ;.char sqlite3Ta
2d050 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  bleColumnAffinit
2d060 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63  y(Table*,int);.c
2d070 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41  har sqlite3ExprA
2d080 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
2d090 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
2d0a0 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3Atoi64(const ch
2d0b0 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20  ar*, i64*, int, 
2d0c0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
2d0d0 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f  DecOrHexToI64(co
2d0e0 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29  nst char*, i64*)
2d0f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
2d100 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74  rorWithMsg(sqlit
2d110 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
2d120 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64  char*,...);.void
2d130 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
2d140 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
2d150 64 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45  d sqlite3SystemE
2d160 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  rror(sqlite3*,in
2d170 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
2d180 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74  3HexToBlob(sqlit
2d190 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e3*, const char 
2d1a0 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73  *z, int n);.u8 s
2d1b0 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69  qlite3HexToInt(i
2d1c0 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt h);.int sqlit
2d1d0 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61  e3TwoPartName(Pa
2d1e0 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  rse *, Token *, 
2d1f0 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
2d200 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  *);..#if defined
2d210 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52  (SQLITE_NEED_ERR
2d220 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61  _NAME).const cha
2d230 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  r *sqlite3ErrNam
2d240 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  e(int);.#endif..
2d250 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2d260 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45  ABLE_DESERIALIZE
2d270 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64  .int sqlite3Memd
2d280 62 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e  bInit(void);.#en
2d290 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  dif..const char 
2d2a0 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
2d2b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2d2c0 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65  ReadSchema(Parse
2d2d0 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53   *pParse);.CollS
2d2e0 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43  eq *sqlite3FindC
2d2f0 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
2d300 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68  u8 enc, const ch
2d310 61 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ar*,int);.int sq
2d320 6c 69 74 65 33 49 73 42 69 6e 61 72 79 28 63 6f  lite3IsBinary(co
2d330 6e 73 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43  nst CollSeq*);.C
2d340 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
2d350 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
2d360 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
2d370 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
2d380 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
2d390 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
2d3a0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
2d3b0 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20  pExpr);.CollSeq 
2d3c0 2a 73 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f  *sqlite3ExprNNCo
2d3d0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2d3e0 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
2d3f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2d400 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50  prCollSeqMatch(P
2d410 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72  arse*,Expr*,Expr
2d420 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2d430 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54  3ExprAddCollateT
2d440 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72  oken(Parse *pPar
2d450 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  se, Expr*, const
2d460 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45   Token*, int);.E
2d470 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2d480 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
2d490 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
2d4a0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
2d4b0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
2d4c0 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
2d4d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
2d4e0 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
2d4f0 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
2d500 74 20 73 71 6c 69 74 65 33 57 72 69 74 61 62 6c  t sqlite3Writabl
2d510 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
2d520 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
2d530 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61  eckObjectName(Pa
2d540 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  rse *, const cha
2d550 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
2d560 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
2d570 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29  (sqlite3 *, int)
2d580 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64  ;.int sqlite3Add
2d590 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2d5a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49  .int sqlite3SubI
2d5b0 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2d5c0 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  int sqlite3MulIn
2d5d0 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
2d5e0 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  nt sqlite3AbsInt
2d5f0 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  32(int);.#ifdef 
2d600 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f  SQLITE_ENABLE_8_
2d610 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c  3_NAMES.void sql
2d620 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
2d630 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
2d640 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
2d650 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53  ine sqlite3FileS
2d660 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64  uffix3(X,Y).#end
2d670 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  if.u8 sqlite3Get
2d680 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68  Boolean(const ch
2d690 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73  ar *z,u8);..cons
2d6a0 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56  t void *sqlite3V
2d6b0 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33  alueText(sqlite3
2d6c0 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e  _value*, u8);.in
2d6d0 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79  t sqlite3ValueBy
2d6e0 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  tes(sqlite3_valu
2d6f0 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  e*, u8);.void sq
2d700 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
2d710 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
2d720 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
2d730 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20   *,u8,.         
2d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2d750 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
2d760 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2d770 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33  eSetNull(sqlite3
2d780 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73  _value*);.void s
2d790 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
2d7a0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
2d7b0 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
2d7c0 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
2d7d0 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e  sqlite3 *);.#ifn
2d7e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d7f0 55 54 46 31 36 0a 63 68 61 72 20 2a 73 71 6c 69  UTF16.char *sqli
2d800 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69  te3Utf16to8(sqli
2d810 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  te3 *, const voi
2d820 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65  d*, int, u8);.#e
2d830 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2d840 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
2d850 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
2d860 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
2d870 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
2d880 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2d890 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
2d8a0 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
2d8b0 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
2d8c0 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
2d8d0 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
2d8e0 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
2d8f0 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
2d900 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  y[];.extern cons
2d910 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 53 74  t char sqlite3St
2d920 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72  rBINARY[];.exter
2d930 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
2d940 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70   char sqlite3Upp
2d950 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74  erToLower[];.ext
2d960 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2d970 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43  ed char sqlite3C
2d980 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72  typeMap[];.exter
2d990 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71  n const Token sq
2d9a0 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d  lite3IntTokens[]
2d9b0 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
2d9c0 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74  WSD struct Sqlit
2d9d0 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33  e3Config sqlite3
2d9e0 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46  Config;.extern F
2d9f0 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74  uncDefHash sqlit
2da00 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  e3BuiltinFunctio
2da10 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ns;.#ifndef SQLI
2da20 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65  TE_OMIT_WSD.exte
2da30 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65  rn int sqlite3Pe
2da40 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69  ndingByte;.#endi
2da50 66 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  f.#endif.#ifdef 
2da60 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 65 78 74  VDBE_PROFILE.ext
2da70 65 72 6e 20 73 71 6c 69 74 65 33 5f 75 69 6e 74  ern sqlite3_uint
2da80 36 34 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69  64 sqlite3NProfi
2da90 6c 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 76 6f  leCnt;.#endif.vo
2daa0 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61  id sqlite3RootPa
2dab0 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a  geMoved(sqlite3*
2dac0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
2dad0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2dae0 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f  index(Parse*, To
2daf0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
2db00 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2db10 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
2db20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2db30 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61  erRenameTable(Pa
2db40 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2db50 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2db60 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65  lite3AlterRename
2db70 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 53  Column(Parse*, S
2db80 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
2db90 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2dba0 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f  lite3GetToken(co
2dbb0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2dbc0 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69  r *, int *);.voi
2dbd0 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50  d sqlite3NestedP
2dbe0 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e  arse(Parse*, con
2dbf0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
2dc00 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69  void sqlite3Expi
2dc10 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
2dc20 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ents(sqlite3*, i
2dc30 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2dc40 33 43 6f 64 65 52 68 73 4f 66 49 4e 28 50 61 72  3CodeRhsOfIN(Par
2dc50 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
2dc60 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2dc70 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28  e3CodeSubselect(
2dc80 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2dc90 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2dca0 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53  ctPrep(Parse*, S
2dcb0 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
2dcc0 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
2dcd0 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75  te3SelectWrongNu
2dce0 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73  mTermsError(Pars
2dcf0 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63  e *pParse, Selec
2dd00 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74  t *p);.int sqlit
2dd10 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28  e3MatchSpanName(
2dd20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2dd30 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2dd40 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2dd50 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2dd60 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73  ResolveExprNames
2dd70 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2dd80 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2dd90 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73  e3ResolveExprLis
2dda0 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  tNames(NameConte
2ddb0 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  xt*, ExprList*);
2ddc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2ddd0 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28  olveSelectNames(
2dde0 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2ddf0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
2de00 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2de10 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
2de20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2de30 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
2de40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2de50 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
2de60 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
2de70 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
2de80 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2de90 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
2dea0 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
2deb0 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
2dec0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2ded0 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
2dee0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
2def0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
2df00 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
2df10 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2df20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 76 6f 69 64  SrcList *);.void
2df30 20 2a 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 54   *sqlite3RenameT
2df40 6f 6b 65 6e 4d 61 70 28 50 61 72 73 65 2a 2c 20  okenMap(Parse*, 
2df50 76 6f 69 64 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  void*, Token*);.
2df60 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61  void sqlite3Rena
2df70 6d 65 54 6f 6b 65 6e 52 65 6d 61 70 28 50 61 72  meTokenRemap(Par
2df80 73 65 2a 2c 20 76 6f 69 64 20 2a 70 54 6f 2c 20  se*, void *pTo, 
2df90 76 6f 69 64 20 2a 70 46 72 6f 6d 29 3b 0a 76 6f  void *pFrom);.vo
2dfa0 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65  id sqlite3Rename
2dfb0 45 78 70 72 55 6e 6d 61 70 28 50 61 72 73 65 2a  ExprUnmap(Parse*
2dfc0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2dfd0 71 6c 69 74 65 33 52 65 6e 61 6d 65 45 78 70 72  qlite3RenameExpr
2dfe0 6c 69 73 74 55 6e 6d 61 70 28 50 61 72 73 65 2a  listUnmap(Parse*
2dff0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 43 6f  , ExprList*);.Co
2e000 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
2e010 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
2e020 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
2e030 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
2e040 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
2e050 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
2e060 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f  r*, Column*);.vo
2e070 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
2e080 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2e090 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2e0a0 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
2e0b0 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
2e0c0 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ler*, sqlite3_fi
2e0d0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
2e0e0 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
2e0f0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2e100 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
2e110 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2e120 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
2e130 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
2e140 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
2e150 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
2e160 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
2e170 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
2e180 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2e190 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
2e1a0 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
2e1b0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
2e1c0 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
2e1d0 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
2e1e0 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
2e1f0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
2e200 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
2e210 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
2e220 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
2e230 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
2e240 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
2e250 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
2e260 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
2e270 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
2e280 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
2e290 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2e2a0 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73  e3KeyInfoAlloc(s
2e2b0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29  qlite3*,int,int)
2e2c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65  ;.void sqlite3Ke
2e2d0 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e  yInfoUnref(KeyIn
2e2e0 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
2e2f0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66  qlite3KeyInfoRef
2e300 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
2e310 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2e320 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65  nfoOfIndex(Parse
2e330 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49  *, Index*);.KeyI
2e340 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2e350 6e 66 6f 46 72 6f 6d 45 78 70 72 4c 69 73 74 28  nfoFromExprList(
2e360 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2e370 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23  *, int, int);..#
2e380 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2e390 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  UG.int sqlite3Ke
2e3a0 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65  yInfoIsWriteable
2e3b0 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64  (KeyInfo*);.#end
2e3c0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72  if.int sqlite3Cr
2e3d0 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33  eateFunc(sqlite3
2e3e0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2e3f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64  , int, int, void
2e400 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73   *,.  void (*)(s
2e410 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2e420 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2e430 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
2e440 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2e450 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2e460 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 76 6f 69  alue **), .  voi
2e470 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2e480 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20  ntext*),.  void 
2e490 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2e4a0 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  ext*),.  void (*
2e4b0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2e4c0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2e4d0 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 46 75 6e  alue **), .  Fun
2e4e0 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
2e4f0 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64  structor.);.void
2e500 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74   sqlite3NoopDest
2e510 72 75 63 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76  ructor(void*);.v
2e520 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61  oid sqlite3OomFa
2e530 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ult(sqlite3*);.v
2e540 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c  oid sqlite3OomCl
2e550 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ear(sqlite3*);.i
2e560 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
2e570 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
2e580 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2e590 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
2e5a0 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
2e5b0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2e5c0 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
2e5d0 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c  sqlite3*, char*,
2e5e0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72   int, int);.char
2e5f0 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75   *sqlite3StrAccu
2e600 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d  mFinish(StrAccum
2e610 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e620 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
2e630 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
2e640 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2e650 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
2e660 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
2e670 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
2e680 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
2e690 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
2e6a0 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
2e6b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
2e6c0 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
2e6d0 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
2e6e0 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
2e6f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e700 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e  OMIT_SUBQUERY.in
2e710 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
2e720 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70  ckIN(Parse*, Exp
2e730 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
2e740 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
2e750 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49  heckIN(x,y) SQLI
2e760 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69  TE_OK.#endif..#i
2e770 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2e780 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
2e790 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  4.void sqlite3An
2e7a0 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76  alyzeFunctions(v
2e7b0 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
2e7c0 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
2e7d0 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c  lue(.    Parse*,
2e7e0 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52  Index*,UnpackedR
2e7f0 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e  ecord**,Expr*,in
2e800 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  t,int,int*);.int
2e810 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
2e820 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
2e830 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
2e840 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2e850 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
2e860 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
2e870 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
2e880 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
2e890 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
2e8a0 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
2e8b0 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
2e8c0 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  ue**);.char sqli
2e8d0 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66  te3IndexColumnAf
2e8e0 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c  finity(sqlite3*,
2e8f0 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23   Index*, int);.#
2e900 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
2e910 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
2e920 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65  e LEMON-generate
2e930 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e  d parser.*/.#ifn
2e940 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
2e950 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a  AMATION.  void *
2e960 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
2e970 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
2e980 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20 76 6f 69  , Parse*);.  voi
2e990 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
2e9a0 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
2e9b0 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64  *)(void*));.#end
2e9c0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  if.void sqlite3P
2e9d0 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
2e9e0 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74 20 73 71  , Token);.int sq
2e9f0 6c 69 74 65 33 50 61 72 73 65 72 46 61 6c 6c 62  lite3ParserFallb
2ea00 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  ack(int);.#ifdef
2ea10 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
2ea20 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
2ea30 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
2ea40 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
2ea50 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
2ea60 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
2ea70 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
2ea80 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ea90 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
2eaa0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
2eab0 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
2eac0 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
2ead0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2eae0 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
2eaf0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
2eb00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
2eb10 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
2eb20 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
2eb30 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
2eb40 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
2eb50 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
2eb60 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2eb70 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
2eb80 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
2eb90 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
2eba0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
2ebb0 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
2ebc0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
2ebd0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
2ebe0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
2ebf0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2ec00 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
2ec10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2ec20 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
2ec30 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
2ec40 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
2ec50 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2ec60 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
2ec70 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2ec80 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
2ec90 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
2eca0 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
2ecb0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2ecc0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
2ecd0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2ece0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2ecf0 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  st(X).#  define 
2ed00 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
2ed10 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51  oint(X, Y, Z) SQ
2ed20 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2ed30 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62  e sqlite3GetVTab
2ed40 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c  le(X,Y)  ((VTabl
2ed50 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76  e*)0).#else.   v
2ed60 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
2ed70 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
2ed80 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f  , Table*);.   vo
2ed90 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69  id sqlite3VtabDi
2eda0 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33  sconnect(sqlite3
2edb0 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b   *db, Table *p);
2edc0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2edd0 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20  tabSync(sqlite3 
2ede0 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20  *db, Vdbe*);.   
2edf0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
2ee00 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
2ee10 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
2ee20 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
2ee30 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2ee40 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2ee50 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
2ee60 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2ee70 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
2ee80 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
2ee90 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2eea0 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
2eeb0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2eec0 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
2eed0 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
2eee0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2eef0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
2ef00 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76  Vdbe*, sqlite3_v
2ef10 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65  tab*);.   VTable
2ef20 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62   *sqlite3GetVTab
2ef30 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
2ef40 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20  le*);.   Module 
2ef50 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61  *sqlite3VtabCrea
2ef60 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73  teModule(.     s
2ef70 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f  qlite3*,.     co
2ef80 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
2ef90 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2efa0 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64  dule*,.     void
2efb0 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28  *,.     void(*)(
2efc0 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20  void*).   );.#  
2efd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2efe0 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64  abInSync(db) ((d
2eff0 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26  b)->nVTrans>0 &&
2f000 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d   (db)->aVTrans==
2f010 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  0).#endif.int sq
2f020 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f  lite3VtabEponymo
2f030 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73  usTableInit(Pars
2f040 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  e*,Module*);.voi
2f050 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f  d sqlite3VtabEpo
2f060 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72  nymousTableClear
2f070 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65  (sqlite3*,Module
2f080 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f090 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65  VtabMakeWritable
2f0a0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
2f0b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2f0c0 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  bBeginParse(Pars
2f0d0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2f0e0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  n*, Token*, int)
2f0f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2f100 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61  abFinishParse(Pa
2f110 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
2f120 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
2f130 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a  rgInit(Parse*);.
2f140 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2f150 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a  ArgExtend(Parse*
2f160 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2f170 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
2f180 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  eate(sqlite3*, i
2f190 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
2f1a0 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20  , char **);.int 
2f1b0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2f1c0 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54  onnect(Parse*, T
2f1d0 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
2f1e0 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
2f1f0 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  oy(sqlite3*, int
2f200 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2f210 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2f220 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c  Begin(sqlite3 *,
2f230 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63   VTable *);.Func
2f240 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62  Def *sqlite3Vtab
2f250 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e  OverloadFunction
2f260 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44  (sqlite3 *,FuncD
2f270 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45  ef*, int nArg, E
2f280 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  xpr*);.sqlite3_i
2f290 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
2f2a0 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
2f2b0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
2f2c0 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
2f2d0 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
2f2e0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
2f2f0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2f300 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
2f310 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
2f320 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
2f330 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f340 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
2f350 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  e*);.#ifdef SQLI
2f360 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c  TE_ENABLE_NORMAL
2f370 49 5a 45 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  IZE.char *sqlite
2f380 33 4e 6f 72 6d 61 6c 69 7a 65 28 56 64 62 65 2a  3Normalize(Vdbe*
2f390 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2f3a0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2f3b0 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
2f3c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f3d0 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
2f3e0 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
2f3f0 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
2f400 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
2f410 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
2f420 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
2f430 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
2f440 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
2f450 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
2f460 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
2f470 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2f480 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
2f490 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
2f4a0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2f4b0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2f4c0 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
2f4d0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
2f4e0 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
2f4f0 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
2f500 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
2f510 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2f520 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  t);.#endif.#ifnd
2f530 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
2f540 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74  TE.  With *sqlit
2f550 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a  e3WithAdd(Parse*
2f560 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  ,With*,Token*,Ex
2f570 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29  prList*,Select*)
2f580 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2f590 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74  WithDelete(sqlit
2f5a0 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f  e3*,With*);.  vo
2f5b0 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  id sqlite3WithPu
2f5c0 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a  sh(Parse*, With*
2f5d0 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65  , u8);.#else.#de
2f5e0 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
2f5f0 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66  Push(x,y,z).#def
2f600 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44  ine sqlite3WithD
2f610 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69  elete(x,y).#endi
2f620 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2f630 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20 20 55  _OMIT_UPSERT.  U
2f640 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70  psert *sqlite3Up
2f650 73 65 72 74 4e 65 77 28 73 71 6c 69 74 65 33 2a  sertNew(sqlite3*
2f660 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
2f670 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
2f680 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2f690 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 73 71  3UpsertDelete(sq
2f6a0 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b  lite3*,Upsert*);
2f6b0 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74  .  Upsert *sqlit
2f6c0 65 33 55 70 73 65 72 74 44 75 70 28 73 71 6c 69  e3UpsertDup(sqli
2f6d0 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20  te3*,Upsert*);. 
2f6e0 20 69 6e 74 20 73 71 6c 69 74 65 33 55 70 73 65   int sqlite3Upse
2f6f0 72 74 41 6e 61 6c 79 7a 65 54 61 72 67 65 74 28  rtAnalyzeTarget(
2f700 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
2f710 55 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64  Upsert*);.  void
2f720 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 6f   sqlite3UpsertDo
2f730 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 55 70  Update(Parse*,Up
2f740 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64  sert*,Table*,Ind
2f750 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  ex*,int);.#else.
2f760 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55  #define sqlite3U
2f770 70 73 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79  psertNew(v,w,x,y
2f780 2c 7a 29 20 28 28 55 70 73 65 72 74 2a 29 30 29  ,z) ((Upsert*)0)
2f790 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2f7a0 55 70 73 65 72 74 44 65 6c 65 74 65 28 78 2c 79  UpsertDelete(x,y
2f7b0 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
2f7c0 33 55 70 73 65 72 74 44 75 70 28 78 2c 79 29 20  3UpsertDup(x,y) 
2f7d0 20 20 20 20 20 20 28 28 55 70 73 65 72 74 2a 29        ((Upsert*)
2f7e0 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44  0).#endif.../* D
2f7f0 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
2f800 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65  functions in fke
2f810 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73  y.c. All of thes
2f820 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  e are replaced b
2f830 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f  y.** no-op macro
2f840 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47  s if OMIT_FOREIG
2f850 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64  N_KEY is defined
2f860 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e  . In this case n
2f870 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  o foreign.** key
2f880 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
2f890 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20  s available. If 
2f8a0 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20  OMIT_TRIGGER is 
2f8b0 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f  defined but.** O
2f8c0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
2f8d0 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d  is not, only som
2f8e0 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
2f8f0 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20  ns are no-oped. 
2f900 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20  In.** this case 
2f910 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65  foreign keys are
2f920 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20   parsed, but no 
2f930 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c  other functional
2f940 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64  ity is.** provid
2f950 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
2f960 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
2f970 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
2f980 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
2f990 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
2f9a0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2f9b0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
2f9c0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2f9d0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
2f9e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
2f9f0 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
2fa00 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
2fa10 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
2fa20 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
2fa30 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
2fa40 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
2fa50 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2fa60 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
2fa70 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
2fa80 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
2fa90 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
2faa0 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
2fab0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2fac0 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
2fad0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
2fae0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2faf0 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
2fb00 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
2fb10 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
2fb20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2fb30 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
2fb40 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
2fb50 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
2fb60 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
2fb70 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
2fb80 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
2fb90 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2fba0 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
2fbb0 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
2fbc0 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
2fbd0 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
2fbe0 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2fbf0 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
2fc00 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e  (a)        0.#en
2fc10 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
2fc20 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2fc30 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
2fc40 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
2fc50 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
2fc60 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
2fc70 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
2fc80 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
2fc90 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
2fca0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2fcb0 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
2fcc0 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
2fcd0 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2fce0 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
2fcf0 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
2fd00 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
2fd10 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
2fd20 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
2fd30 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
2fd40 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
2fd50 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
2fd60 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
2fd70 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
2fd80 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
2fd90 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
2fda0 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
2fdb0 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
2fdc0 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
2fdd0 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
2fde0 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
2fdf0 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
2fe00 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
2fe10 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69  _UNTESTABLE.** i
2fe20 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
2fe30 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2fe40 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f  _UNTESTABLE.  vo
2fe50 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
2fe60 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
2fe70 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2fe80 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
2fe90 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
2fea0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
2feb0 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
2fec0 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
2fed0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
2fee0 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  loc().#endif../*
2fef0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  .** Allowed retu
2ff00 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
2ff10 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2ff20 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  x().*/.#define I
2ff30 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20  N_INDEX_ROWID   
2ff40 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72       1   /* Sear
2ff50 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ch the rowid of 
2ff60 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  the table */.#de
2ff70 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50  fine IN_INDEX_EP
2ff80 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f  H          2   /
2ff90 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65  * Search an ephe
2ffa0 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a  meral b-tree */.
2ffb0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2ffc0 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20  _INDEX_ASC    3 
2ffd0 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
2ffe0 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f  dex ASCENDING */
2fff0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
30000 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34  X_INDEX_DESC   4
30010 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
30020 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20  ndex DESCENDING 
30030 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
30040 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20  DEX_NOOP        
30050 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65   5   /* No table
30060 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20   available. Use 
30070 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f  comparisons */./
30080 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61  *.** Allowed fla
30090 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70  gs for the 3rd p
300a0 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
300b0 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
300c0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ..*/.#define IN_
300d0 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20  INDEX_NOOP_OK   
300e0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20    0x0001  /* OK 
300f0 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44  to return IN_IND
30100 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69  EX_NOOP */.#defi
30110 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42  ne IN_INDEX_MEMB
30120 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20  ERSHIP  0x0002  
30130 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
30140 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68  sed for membersh
30150 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69  ip test */.#defi
30160 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50  ne IN_INDEX_LOOP
30170 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
30180 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
30190 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f  sed as a loop */
301a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
301b0 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
301c0 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e   Expr *, u32, in
301d0 74 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  t*, int*, int*);
301e0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ..int sqlite3Jou
301f0 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
30200 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
30210 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
30220 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
30230 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
30240 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
30250 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65 66 69  vfs *);.#if defi
30260 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
30270 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 20  E_ATOMIC_WRITE) 
30280 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  \. || defined(SQ
30290 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43  LITE_ENABLE_BATC
302a0 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a  H_ATOMIC_WRITE).
302b0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
302c0 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
302d0 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64  e3_file *);.#end
302e0 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
302f0 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79  ournalIsInMemory
30300 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70  (sqlite3_file *p
30310 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
30320 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71  emJournalOpen(sq
30330 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a  lite3_file *);..
30340 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
30350 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67  SetHeightAndFlag
30360 73 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  s(Parse *pParse,
30370 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53   Expr *p);.#if S
30380 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
30390 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c  EPTH>0.  int sql
303a0 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
303b0 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a  ight(Select *);.
303c0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70    int sqlite3Exp
303d0 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72  rCheckHeight(Par
303e0 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  se*, int);.#else
303f0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
30400 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
30410 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e  ht(x) 0.  #defin
30420 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
30430 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65  ckHeight(x,y).#e
30440 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65  ndif..u32 sqlite
30450 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20  3Get4byte(const 
30460 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
30470 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20  e3Put4byte(u8*, 
30480 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  u32);..#ifdef SQ
30490 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
304a0 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64  CK_NOTIFY.  void
304b0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
304c0 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  onBlocked(sqlite
304d0 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b  3 *, sqlite3 *);
304e0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
304f0 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
30500 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
30510 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
30520 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73  nnectionClosed(s
30530 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c  qlite3 *db);.#el
30540 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
30550 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
30560 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65  ocked(x,y).  #de
30570 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
30580 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78  ectionUnlocked(x
30590 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
305a0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
305b0 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  sed(x).#endif..#
305c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
305d0 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
305e0 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
305f0 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e  E*, char *);.#en
30600 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
30610 59 59 43 4f 56 45 52 41 47 45 29 0a 20 20 69 6e  YYCOVERAGE).  in
30620 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 43  t sqlite3ParserC
30630 6f 76 65 72 61 67 65 28 46 49 4c 45 2a 29 3b 0a  overage(FILE*);.
30640 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
30650 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
30660 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
30670 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
30680 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
30690 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
306a0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
306b0 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
306c0 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
306d0 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
306e0 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66  messages..*/.#if
306f0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
30700 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
30710 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
30720 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
30730 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
30740 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
30750 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
30760 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
30770 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f  LITE_API SQLITE_
30780 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c  EXTERN void (SQL
30790 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74  ITE_CDECL *sqlit
307a0 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74  e3IoTrace)(const
307b0 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c   char*,...);.#el
307c0 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  se.# define IOTR
307d0 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20  ACE(A).# define 
307e0 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
307f0 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a  ceSql(X).#endif.
30800 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75  ./*.** These rou
30810 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61  tines are availa
30820 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32  ble for the mem2
30830 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d  .c debugging mem
30840 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a  ory allocator.**
30850 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65   only.  They are
30860 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
30870 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22  that different "
30880 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79  types" of memory
30890 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  .** allocations 
308a0 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61  are properly tra
308b0 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74  cked by the syst
308c0 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  em..**.** sqlite
308d0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
308e0 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70  () sets the "typ
308f0 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74  e" of an allocat
30900 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a  ion to one of.**
30910 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d   the MEMTYPE_* m
30920 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65  acros defined be
30930 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d  low.  The type m
30940 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b  ust be a bitmask
30950 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c   with.** a singl
30960 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  e bit set..**.**
30970 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30980 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e  HasType() return
30990 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66  s true if any of
309a0 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
309b0 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
309c0 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
309d0 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
309e0 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
309f0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
30a00 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
30a10 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20  bugHasType() is 
30a20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
30a30 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29   inside assert()
30a40 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
30a50 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
30a60 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72  ugNoType() retur
30a70 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20  ns true if none 
30a80 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
30a90 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
30aa0 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
30ab0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
30ac0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
30ad0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
30ae0 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73  )..**.** Perhaps
30af0 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74   the most import
30b00 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65  ant point is the
30b10 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
30b20 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  een MEMTYPE_HEAP
30b30 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f  .** and MEMTYPE_
30b40 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61  LOOKASIDE.  If a
30b50 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20  n allocation is 
30b60 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
30b70 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a  E, that means.**
30b80 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62   it might have b
30b90 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  een allocated by
30ba0 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65   lookaside, exce
30bb0 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f  pt the allocatio
30bc0 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72  n was.** too lar
30bd0 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  ge or lookaside 
30be0 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c  was already full
30bf0 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  .  It is importa
30c00 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  nt to verify.** 
30c10 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  that allocations
30c20 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
30c30 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20   been satisfied 
30c40 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65  by lookaside are
30c50 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62   not.** passed b
30c60 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61  ack to non-looka
30c70 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
30c80 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73  ines.  Asserts s
30c90 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78  uch as the.** ex
30ca0 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20  ample above are 
30cb0 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f  placed on the no
30cc0 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
30cd0 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76  () routines to v
30ce0 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f  erify.** this co
30cf0 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nstraint..**.** 
30d00 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
30d10 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
30d20 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
30d30 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
30d40 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
30d50 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
30d60 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
30d70 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
30d80 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
30d90 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
30da0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
30db0 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
30dc0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
30dd0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
30de0 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
30df0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
30e00 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
30e10 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
30e20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
30e30 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
30e40 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
30e50 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
30e60 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
30e70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
30e80 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
30e90 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
30ea0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
30eb0 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
30ec0 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
30ed0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
30ee0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
30ef0 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
30f00 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69   /* Heap that mi
30f10 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
30f20 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69  okaside */.#defi
30f30 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48  ne MEMTYPE_PCACH
30f40 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 50  E     0x04  /* P
30f50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61  age cache alloca
30f60 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
30f70 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66  Threading interf
30f80 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  ace.*/.#if SQLIT
30f90 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
30fa0 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74  EADS>0.int sqlit
30fb0 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53  e3ThreadCreate(S
30fc0 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f  QLiteThread**,vo
30fd0 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f  id*(*)(void*),vo
30fe0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
30ff0 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69  3ThreadJoin(SQLi
31000 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a  teThread*, void*
31010 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
31020 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
31030 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56 54 41  NABLE_DBPAGE_VTA
31040 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  B) || defined(SQ
31050 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73  LITE_TEST).int s
31060 71 6c 69 74 65 33 44 62 70 61 67 65 52 65 67 69  qlite3DbpageRegi
31070 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ster(sqlite3*);.
31080 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
31090 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
310a0 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c  _DBSTAT_VTAB) ||
310b0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
310c0 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
310d0 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28  3DbstatRegister(
310e0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
310f0 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  f..int sqlite3Ex
31100 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45 78 70  prVectorSize(Exp
31110 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
31120 71 6c 69 74 65 33 45 78 70 72 49 73 56 65 63 74  qlite3ExprIsVect
31130 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  or(Expr *pExpr);
31140 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 56 65  .Expr *sqlite3Ve
31150 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78 70 72  ctorFieldSubexpr
31160 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45 78  (Expr*, int);.Ex
31170 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
31180 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28 50 61  orVectorField(Pa
31190 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  rse*,Expr*,int);
311a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 65 63  .void sqlite3Vec
311b0 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61 72 73  torErrorMsg(Pars
311c0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23 69 66  e*, Expr*);..#if
311d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
311e0 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
311f0 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61 72 20  IAGS.const char 
31200 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c 65  **sqlite3Compile
31210 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f  Options(int *pnO
31220 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e  pt);.#endif..#en
31230 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54  dif /* SQLITEINT
31240 5f 48 20 2a 2f 0a                                _H */.