/ Hex Artifact Content
Login

Artifact 6e47f6e042368d28cf919c1ce969fb16c5256cbe5289b8d328bc3c1e12b61584:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48  ed(HAVE_STDINT_H
1f20: 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  )   /* Use this 
1f30: 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20  case if we have 
1f40: 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a  ANSI headers */.
1f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1f60: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1f70: 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74  (void*)(intptr_t
1f80: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
1f90: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1fa0: 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70  (X)  ((int)(intp
1fb0: 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 69 66 20  tr_t)(X)).#elif 
1fc0: 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46  defined(__PTRDIF
1fd0: 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68  F_TYPE__)  /* Th
1fe0: 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77  is case should w
1ff0: 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23  ork for GCC */.#
2000: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2010: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2020: 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46  void*)(__PTRDIFF
2030: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64  _TYPE__)(X)).# d
2040: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
2050: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
2060: 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  t)(__PTRDIFF_TYP
2070: 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21  E__)(X)).#elif !
2080: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
2090: 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73  )       /* Works
20a0: 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f   for compilers o
20b0: 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a  ther than LLVM *
20c0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
20d0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
20e0: 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72   ((void*)&((char
20f0: 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e  *)0)[X]).# defin
2100: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2110: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28  INT(X)  ((int)((
2120: 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a  (char*)X)-(char*
2130: 29 30 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  )0)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 20 7c 7c 20  d(i386)      || 
6dd0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
6de0: 29 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  )      || define
6df0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6e00: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6e10: 5f 5f 78 38 36 5f 36 34 29 20 20 7c 7c 20 64 65  __x86_64)  || de
6e20: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
6e30: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
6e40: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
6e50: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
6e60: 5f 41 4d 44 36 34 29 20 20 7c 7c 20 64 65 66 69  _AMD64)  || defi
6e70: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6e80: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6e90: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6ea0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6eb0: 4d 45 4c 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEL__) || define
6ec0: 64 28 5f 5f 41 41 52 43 48 36 34 45 4c 5f 5f 29  d(__AARCH64EL__)
6ed0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
6ee0: 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e 65  RM64).#   define
6ef0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
6f00: 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69 66  R    1234.# elif
6f10: 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20   defined(sparc) 
6f20: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6f30: 5f 70 70 63 5f 5f 29 20 7c 7c 20 5c 0a 20 20 20  _ppc__) || \.   
6f40: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6f50: 4d 45 42 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEB__) || define
6f60: 64 28 5f 5f 41 41 52 43 48 36 34 45 42 5f 5f 29  d(__AARCH64EB__)
6f70: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6f80: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
6f90: 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20  4321.# else.#   
6fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6fb0: 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69  TEORDER 0.# endi
6fc0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  f.#endif.#if SQL
6fd0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34  ITE_BYTEORDER==4
6fe0: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
6ff0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
7000: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
7010: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
7020: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
7030: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
7040: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
7050: 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  lif SQLITE_BYTEO
7060: 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66  RDER==1234.# def
7070: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7080: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
7090: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
70a0: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
70b0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
70c0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
70d0: 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64  16LE.#else.# ifd
70e0: 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
70f0: 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69  MATION.  const i
7100: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
7110: 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65  1;.# else.  exte
7120: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
7130: 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66  ite3one;.# endif
7140: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7150: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
7160: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7170: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
7180: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7190: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
71a0: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
71b0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
71c0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
71d0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
71e0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
71f0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
7200: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
7210: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
7220: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
7230: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
7240: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
7250: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
7260: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
7270: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
7280: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
7290: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
72a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
72b0: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
72c0: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
72d0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
72e0: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
72f0: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
7300: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
7310: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
7320: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20  ./*.** Round up 
7330: 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20  a number to the 
7340: 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74  next larger mult
7350: 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73  iple of 8.  This
7360: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66   is used.** to f
7370: 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67  orce 8-byte alig
7380: 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20  nment on 64-bit 
7390: 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a  architectures..*
73a0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38  /.#define ROUND8
73b0: 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29  (x)     (((x)+7)
73c0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e  &~7)../*.** Roun
73d0: 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65  d down to the ne
73e0: 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f  arest multiple o
73f0: 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  f 8.*/.#define R
7400: 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78  OUNDDOWN8(x) ((x
7410: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  )&~7)../*.** Ass
7420: 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69  ert that the poi
7430: 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65  nter X is aligne
7440: 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62  d to an 8-byte b
7450: 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a  oundary.  This.*
7460: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
7470: 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65  only within asse
7480: 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74  rt() to verify t
7490: 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74  hat the code get
74a0: 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65  s.** all alignme
74b0: 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  nt restrictions 
74c0: 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45  correct..**.** E
74d0: 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45  xcept, if SQLITE
74e0: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
74f0: 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65  MALLOC is define
7500: 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75  d, then the.** u
7510: 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63  nderlying malloc
7520: 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  () implementatio
7530: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
7540: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
7550: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
7560: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
7570: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
7580: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
7590: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
75a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
75b0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
75c0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
75d0: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
75e0: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
75f0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
7600: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
7610: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
7620: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
7630: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
7640: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
7650: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
7660: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
7670: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
7680: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
7690: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
76a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
76b0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
76c0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
76d0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
76e0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
76f0: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
7700: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
7710: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
7720: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
7730: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
7740: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
7750: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
7760: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
7770: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e  ditionals.h>.#en
7780: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
7790: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
77a0: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
77b0: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
77c0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
77d0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
77e0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
77f0: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
7800: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7810: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
7820: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
7830: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
7840: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
7850: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
7860: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7870: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
7880: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
7890: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
78a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
78b0: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
78c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
78d0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
78e0: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
78f0: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
7900: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
7910: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
7920: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
7930: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
7940: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
7950: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
7960: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
7970: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
7980: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
7990: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
79a0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
79b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
79c0: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
79d0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
79e0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
79f0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7a00: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
7a10: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7a20: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
7a30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7a40: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
7a50: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
7a60: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
7a70: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
7a80: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
7a90: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
7aa0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
7ab0: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
7ac0: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
7ad0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
7ae0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
7af0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
7b00: 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
7b10: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  E).# define SELE
7b20: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
7b30: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
7b40: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7b50: 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  BLED 0.#endif../
7b60: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7b70: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7b80: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
7b90: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
7ba0: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7bb0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
7bc0: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
7bd0: 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  dle..**.** The s
7be0: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
7bf0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
7c00: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
7c10: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
7c20: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
7c30: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
7c40: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
7c50: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
7c60: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
7c70: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
7c80: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
7c90: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
7ca0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7cb0: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
7cc0: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
7cd0: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
7ce0: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
7cf0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
7d00: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
7d10: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
7d20: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
7d30: 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69  BusyHandler)(voi
7d40: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
7d50: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
7d60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79  */.  void *pBusy
7d70: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7d80: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
7d90: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
7da0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
7db0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
7dd0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7de0: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
7df0: 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c  /.  u8 bExtraFil
7e00: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7e10: 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65        /* Include
7e20: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73   sqlite3_file as
7e30: 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f   callback arg */
7e40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
7e50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7e60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
7e70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7e80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
7e90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
7ea0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
7eb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
7ec0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
7ed0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
7ee0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
7ef0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
7f00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
7f10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
7f20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
7f30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7f40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
7f50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
7f60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
7f70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
7f80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
7f90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
7fa0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
7fb0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
7fc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
7fd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
7fe0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
7ff0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
8000: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
8010: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
8020: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
8030: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
8040: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
8050: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
8060: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
8070: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
8080: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
8090: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
80a0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
80b0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
80c0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
80d0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
80e0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
80f0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
8100: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
8110: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
8120: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
8130: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
8140: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
8150: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
8160: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
8170: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
8180: 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61   the.** one para
8190: 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72  meter that destr
81a0: 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20  uctors normally 
81b0: 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76  want.  So we hav
81c0: 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a  e to introduce.*
81d0: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
81e0: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
81f0: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
8200: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
8210: 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  ny.** pointer wi
8220: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
8230: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
8240: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
8250: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
8260: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
8270: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
8280: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
8290: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
82a0: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
82b0: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
82c0: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
82d0: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
82e0: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
82f0: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
8300: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
8310: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
8320: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
8330: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
8340: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
8350: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
8360: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
8370: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
8380: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
8390: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
83a0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
83b0: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
83c0: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
83d0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
83e0: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
83f0: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
8400: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
8410: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
8420: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
8430: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
8440: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
8450: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
8460: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
8470: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
8480: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
8490: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
84a0: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
84b0: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
84c0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
84d0: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
84e0: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
84f0: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
8500: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
8510: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
8520: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
8530: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
8540: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
8550: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
8560: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
8570: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
8580: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
8590: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
85a0: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
85b0: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
85c0: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
85d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
85e0: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
85f0: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
8600: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8610: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
8620: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
8630: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
8640: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
8650: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
8660: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
8670: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
8680: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
8690: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
86a0: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
86b0: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
86c0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
86d0: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
86e0: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
86f0: 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  ITE_WSD.  #defin
8700: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
8710: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8720: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
8730: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
8740: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
8750: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
8760: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
8770: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
8780: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
8790: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
87a0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
87b0: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
87c0: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
87d0: 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74  berately.** left
87e0: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
87f0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
8800: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
8810: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
8820: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
8830: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
8840: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
8850: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
8860: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
8870: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
8880: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
8890: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
88a0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
88b0: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
88c0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
88d0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
88e0: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
88f0: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
8900: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
8910: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
8920: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
8930: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
8940: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
8950: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8960: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
8970: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
8980: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
8990: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
89a0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
89b0: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
89c0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
89d0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
89e0: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
89f0: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
8a00: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
8a10: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
8a20: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
8a30: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
8a40: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
8a50: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
8a60: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
8a70: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
8a80: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
8a90: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
8aa0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
8ab0: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
8ac0: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
8ad0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
8ae0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
8af0: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
8b00: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
8b10: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b20: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
8b30: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
8b40: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
8b50: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
8b60: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
8b70: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
8b80: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
8b90: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
8ba0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
8bb0: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
8bc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8bd0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
8be0: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
8bf0: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
8c00: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
8c10: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
8c20: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
8c30: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
8c40: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
8c50: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
8c60: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
8c70: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
8c80: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
8c90: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
8ca0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
8cb0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
8cc0: 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a  ruct FKey FKey;.
8cd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8ce0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75  uncDestructor Fu
8cf0: 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79  ncDestructor;.ty
8d00: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d10: 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79  cDef FuncDef;.ty
8d20: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d30: 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66  cDefHash FuncDef
8d40: 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74  Hash;.typedef st
8d50: 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69  ruct IdList IdLi
8d60: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
8d70: 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a  ct Index Index;.
8d80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
8d90: 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78  ndexSample Index
8da0: 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20  Sample;.typedef 
8db0: 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20  struct KeyClass 
8dc0: 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65  KeyClass;.typede
8dd0: 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  f struct KeyInfo
8de0: 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65   KeyInfo;.typede
8df0: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
8e00: 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79  de Lookaside;.ty
8e10: 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f  pedef struct Loo
8e20: 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61  kasideSlot Looka
8e30: 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65  sideSlot;.typede
8e40: 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  f struct Module 
8e50: 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20  Module;.typedef 
8e60: 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
8e70: 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a  xt NameContext;.
8e80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8e90: 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65  arse Parse;.type
8ea0: 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70  def struct PreUp
8eb0: 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a  date PreUpdate;.
8ec0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8ed0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50  rintfArguments P
8ee0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a  rintfArguments;.
8ef0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52  typedef struct R
8f00: 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61 6d  enameToken Renam
8f10: 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20  eToken;.typedef 
8f20: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
8f30: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
8f40: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
8f50: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
8f60: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
8f70: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
8f80: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
8f90: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
8fa0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8fb0: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
8fc0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
8fd0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
8fe0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
8ff0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73  struct sqlite3_s
9000: 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a 20  tr StrAccum; /* 
9010: 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20 66  Internal alias f
9020: 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20 2a  or sqlite3_str *
9030: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
9040: 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79   Table Table;.ty
9050: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
9060: 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b  leLock TableLock
9070: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9080: 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79   Token Token;.ty
9090: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65  pedef struct Tre
90a0: 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a  eView TreeView;.
90b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90c0: 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a  rigger Trigger;.
90d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90e0: 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65  riggerPrg Trigge
90f0: 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74  rPrg;.typedef st
9100: 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
9110: 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79   TriggerStep;.ty
9120: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70  pedef struct Unp
9130: 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61  ackedRecord Unpa
9140: 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65  ckedRecord;.type
9150: 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65 72  def struct Upser
9160: 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64 65  t Upsert;.typede
9170: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
9180: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
9190: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
91a0: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
91b0: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
91c0: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
91d0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
91e0: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
91f0: 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20  f struct Window 
9200: 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66 20  Window;.typedef 
9210: 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68  struct With With
9220: 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  ;.../*.** The bi
9230: 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
9240: 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
9250: 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
9260: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
9270: 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
9280: 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
9290: 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
92a0: 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
92b0: 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
92c0: 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
92d0: 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
92e0: 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
92f0: 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
9300: 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
9310: 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
9320: 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66   ix86..*/.#ifdef
9330: 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
9340: 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20 53  TYPE.  typedef S
9350: 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59  QLITE_BITMASK_TY
9360: 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73  PE Bitmask;.#els
9370: 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20  e.  typedef u64 
9380: 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  Bitmask;.#endif.
9390: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
93a0: 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
93b0: 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
93c0: 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
93d0: 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
93e0: 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
93f0: 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
9400: 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
9410: 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
9420: 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
9430: 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
9440: 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41  <(n)).#define MA
9450: 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e  SKBIT32(n) (((un
9460: 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28  signed int)1)<<(
9470: 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42  n)).#define ALLB
9480: 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d 61  ITS      ((Bitma
9490: 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c 69  sk)-1)../* A VLi
94a0: 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72 64  st object record
94b0: 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74 77  s a mapping betw
94c0: 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f 76  een parameters/v
94d0: 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61 72  ariables/wildcar
94e0: 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51 4c  ds.** in the SQL
94f0: 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63 68   statement (such
9500: 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c 20   as $abc, @pqr, 
9510: 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68 65  or :xyz) and the
9520: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72 69   integer.** vari
9530: 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73 6f  able number asso
9540: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
9550: 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65 65   parameter.  See
9560: 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73 63   the format desc
9570: 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74 68  ription.** on th
9580: 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64  e sqlite3VListAd
9590: 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20  d() routine for 
95a0: 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  more information
95b0: 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72 65  .  A VList is re
95c0: 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e 20  ally.** just an 
95d0: 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72  array of integer
95e0: 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69 6e  s..*/.typedef in
95f0: 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20  t VList;../*.** 
9600: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
9610: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
9620: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
9630: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
9640: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
9650: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
9660: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
9670: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
9680: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
9690: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
96a0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
96b0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
96c0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
96d0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
96e0: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
96f0: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69 6e  e "pcache.h".#in
9700: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
9710: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
9720: 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45  ./* The SQLITE_E
9730: 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d  XTRA_DURABLE com
9740: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
9750: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
9760: 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63   default.** sync
9770: 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20  hronous setting 
9780: 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69 73  to EXTRA.  It is
9790: 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f   no longer suppo
97a0: 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rted..*/.#ifdef 
97b0: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
97c0: 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55  ABLE.# warning U
97d0: 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  se SQLITE_DEFAUL
97e0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20  T_SYNCHRONOUS=3 
97f0: 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54  instead of SQLIT
9800: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
9810: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9820: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9830: 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OUS 3.#endif../*
9840: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63  .** Default sync
9850: 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a  hronous levels..
9860: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
9870: 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72  (for historcal r
9880: 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45  easons) the PAGE
9890: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20  R_SYNCHRONOUS_* 
98a0: 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a  macros differ.**
98b0: 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
98c0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
98d0: 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e  NOUS value by 1.
98e0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
98f0: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
9900: 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c 54  US       DEFAULT
9910: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20  _SYNCHRONOUS.** 
9920: 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20 20    OFF           
9930: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
9940: 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20            0.**  
9950: 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32   NORMAL        2
9960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9970: 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20           1.**   
9980: 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20  FULL          3 
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99a0: 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45          2.**   E
99b0: 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20 20  XTRA         4  
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99d0: 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54         3.**.** T
99e0: 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  he "PRAGMA synch
99f0: 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e  ronous" statemen
9a00: 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20  t also uses the 
9a10: 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65  zero-based numbe
9a20: 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  rs..** In other 
9a30: 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d  words, the zero-
9a40: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72  based numbers ar
9a50: 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65  e used for all e
9a60: 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63  xternal interfac
9a70: 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e  es.** and the on
9a80: 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20 61  e-based values a
9a90: 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  re used internal
9aa0: 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ly..*/.#ifndef S
9ab0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9ac0: 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69  NCHRONOUS.# defi
9ad0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
9ae0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32 0a  T_SYNCHRONOUS 2.
9af0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
9b00: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
9b10: 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20  L_SYNCHRONOUS.# 
9b20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
9b30: 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52  FAULT_WAL_SYNCHR
9b40: 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45 46  ONOUS SQLITE_DEF
9b50: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9b60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
9b70: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
9b80: 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64  e to be accessed
9b90: 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69   by the system i
9ba0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
9bb0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9bc0: 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  g structure.  Th
9bd0: 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ere are normally
9be0: 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74   two of these st
9bf0: 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74  ructures.** in t
9c00: 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20  he sqlite.aDb[] 
9c10: 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69  array.  aDb[0] i
9c20: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
9c30: 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20  ase file and.** 
9c40: 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61  aDb[1] is the da
9c50: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
9c60: 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61   to hold tempora
9c70: 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69  ry tables.  Addi
9c80: 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61  tional.** databa
9c90: 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63  ses may be attac
9ca0: 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44  hed..*/.struct D
9cb0: 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62 53  b {.  char *zDbS
9cc0: 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
9cd0: 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  me of this datab
9ce0: 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d  ase. (schema nam
9cf0: 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29  e, not filename)
9d00: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
9d10: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
9d20: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
9d30: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
9d40: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
9d50: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
9d60: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
9d70: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
9d80: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
9d90: 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20  .  u8 bSyncSet; 
9da0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
9db0: 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  if "PRAGMA synch
9dc0: 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65  ronous=N" has be
9dd0: 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65  en run */.  Sche
9de0: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
9df0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
9e00: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
9e10: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
9e20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
9e30: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
9e40: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9e50: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
9e60: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
9e70: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
9e80: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
9e90: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
9ea0: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
9eb0: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
9ec0: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
9ed0: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
9ee0: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
9ef0: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
9f00: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
9f10: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
9f20: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
9f30: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
9f40: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
9f50: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
9f60: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
9f70: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
9f80: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a  red object..**.*
9f90: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
9fa0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
9fb0: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
9fc0: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
9fd0: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
9fe0: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
9ff0: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
a000: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
a010: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
a020: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
a030: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
a040: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
a050: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a060: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
a070: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
a080: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
a090: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
a0a0: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
a0b0: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
a0c0: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
a0d0: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
a0e0: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
a0f0: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
a100: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
a110: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
a120: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
a130: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
a140: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
a150: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
a160: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
a170: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
a180: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
a190: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
a1a0: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
a1b0: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
a1c0: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
a1d0: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
a1e0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
a1f0: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
a200: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
a210: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
a220: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
a230: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
a240: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
a250: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
a260: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a270: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
a280: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
a290: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
a2a0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
a2b0: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
a2c0: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
a2d0: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
a2e0: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
a2f0: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
a300: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
a310: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
a320: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
a330: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
a340: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
a350: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
a360: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
a370: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
a380: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
a390: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
a3a0: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
a3b0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
a3c0: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
a3d0: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
a3e0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
a3f0: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
a400: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
a410: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
a420: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
a430: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
a440: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
a450: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
a460: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
a470: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
a480: 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53   in the.** Db.pS
a490: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
a4a0: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ld..*/.#define D
a4b0: 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49  bHasProperty(D,I
a4c0: 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61  ,P)     (((D)->a
a4d0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a4e0: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d  chemaFlags&(P))=
a4f0: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
a500: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
a510: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
a520: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
a530: 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d  hemaFlags&(P))!=
a540: 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74  0).#define DbSet
a550: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a560: 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e      (D)->aDb[I].
a570: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a580: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
a590: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
a5a0: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
a5b0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a5c0: 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50  schemaFlags&=~(P
a5d0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  )../*.** Allowed
a5e0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
a5f0: 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  DB.pSchema->flag
a600: 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  s field..**.** T
a610: 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  he DB_SchemaLoad
a620: 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61  ed flag is set a
a630: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
a640: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a650: 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69  n.** read into i
a660: 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62  nternal hash tab
a670: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e  les..**.** DB_Un
a680: 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73  resetViews means
a690: 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72   that one or mor
a6a0: 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c  e views have col
a6b0: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a  umn names that.*
a6c0: 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c  * have been fill
a6d0: 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20  ed out.  If the 
a6e0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
a6f0: 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  these column nam
a700: 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e  es might.** chan
a710: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76  ges and so the v
a720: 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  iew will need to
a730: 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64   be reset..*/.#d
a740: 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c  efine DB_SchemaL
a750: 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20  oaded    0x0001 
a760: 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68   /* The schema h
a770: 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a  as been loaded *
a780: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72  /.#define DB_Unr
a790: 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30  esetViews    0x0
a7a0: 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65  002  /* Some vie
a7b0: 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20  ws have defined 
a7c0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a  column names */.
a7d0: 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79  #define DB_Empty
a7e0: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
a7f0: 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69  4  /* The file i
a800: 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20  s empty (length 
a810: 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65 66  0 bytes) */.#def
a820: 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e 74  ine DB_ResetWant
a830: 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20 2f  ed     0x0008  /
a840: 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68 65  * Reset the sche
a850: 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61 4c  ma when nSchemaL
a860: 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ock==0 */../*.**
a870: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
a880: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
a890: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
a8a0: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
a8b0: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
a8c0: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
a8d0: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
a8e0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
a8f0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
a900: 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a  KER_THREADS+1)..
a910: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
a920: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
a930: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
a940: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
a950: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
a960: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
a970: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
a980: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
a990: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
a9a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a9b0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
a9c0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
a9d0: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
a9e0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
a9f0: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
aa00: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
aa10: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
aa20: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
aa30: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
aa40: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
aa50: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
aa60: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
aa70: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
aa80: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
aa90: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
aaa0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
aab0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
aac0: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
aad0: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
aae0: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
aaf0: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
ab00: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
ab10: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
ab20: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
ab30: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
ab40: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
ab50: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
ab60: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
ab70: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
ab80: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
ab90: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
aba0: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
abb0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
abc0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
abd0: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
abe0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
abf0: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
ac00: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
ac10: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
ac20: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
ac30: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
ac40: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
ac50: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
ac60: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
ac70: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
ac80: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
ac90: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
aca0: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
acb0: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
acc0: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
acd0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
ace0: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
acf0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
ad00: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
ad10: 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  jects..*/.struct
ad20: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
ad30: 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20  32 bDisable;    
ad40: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f         /* Only o
ad50: 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61  perate the looka
ad60: 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a  side when zero *
ad70: 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  /.  u16 sz;     
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
ad90: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
ada0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
adb0: 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20   u8 bMalloced;  
adc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
add0: 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69   if pStart obtai
ade0: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
adf0: 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 75  _malloc() */.  u
ae00: 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20 20  32 nSlot;       
ae10: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ae20: 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73 6c   of lookaside sl
ae30: 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ots allocated */
ae40: 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33 5d  .  u32 anStat[3]
ae50: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
ae60: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
ae70: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
ae80: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
ae90: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e 69  kasideSlot *pIni
aea0: 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  t;   /* List of 
aeb0: 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65 76  buffers not prev
aec0: 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a 20  iously used */. 
aed0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
aee0: 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74  pFree;   /* List
aef0: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75   of available bu
af00: 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
af10: 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
af20: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
af30: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65   of available me
af40: 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20  mory space */.  
af50: 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20  void *pEnd;     
af60: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
af70: 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f   byte past end o
af80: 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  f available spac
af90: 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c  e */.};.struct L
afa0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20  ookasideSlot {. 
afb0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
afc0: 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78  pNext;    /* Nex
afd0: 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20  t buffer in the 
afe0: 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75 66  list of free buf
aff0: 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  fers */.};../*.*
b000: 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20 66  * A hash table f
b010: 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  or built-in func
b020: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
b030: 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e 2d  .  (Application-
b040: 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63 74  defined.** funct
b050: 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75 6c  ions use a regul
b060: 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20 66  ar table table f
b070: 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a  rom hash.h.).**.
b080: 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e  ** Hash each Fun
b090: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69  cDef structure i
b0a0: 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  nto one of the F
b0b0: 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73  uncDefHash.a[] s
b0c0: 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69  lots..** Collisi
b0d0: 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46  ons are on the F
b0e0: 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20 63  uncDef.u.pHash c
b0f0: 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20 53  hain.  Use the S
b100: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28  QLITE_FUNC_HASH(
b110: 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63 6f  ).** macro to co
b120: 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e 20  mpute a hash on 
b130: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d  the function nam
b140: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
b150: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
b160: 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e 63  Z 23.struct Func
b170: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
b180: 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55  Def *a[SQLITE_FU
b190: 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20  NC_HASH_SZ];    
b1a0: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
b1b0: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
b1c0: 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  /.};.#define SQL
b1d0: 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43 2c  ITE_FUNC_HASH(C,
b1e0: 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53 51  L) (((C)+(L))%SQ
b1f0: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
b200: 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  Z)..#ifdef SQLIT
b210: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b220: 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f  ATION./*.** Info
b230: 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20  rmation held in 
b240: 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61  the "sqlite3" da
b250: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
b260: 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65  n object and use
b270: 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75  d.** to manage u
b280: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
b290: 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  on..*/.typedef s
b2a0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
b2b0: 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75  erauth sqlite3_u
b2c0: 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20  serauth;.struct 
b2d0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
b2e0: 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65   {.  u8 authLeve
b2f0: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
b300: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75     /* Current au
b310: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76  thentication lev
b320: 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74  el */.  int nAut
b330: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
b340: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
b350: 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20   the zAuthPW in 
b360: 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  bytes */.  char 
b370: 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20  *zAuthPW;       
b380: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73           /* Pass
b390: 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74  word used to aut
b3a0: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63  henticate */.  c
b3b0: 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20  har *zAuthUser; 
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b3d0: 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74  User name used t
b3e0: 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a  o authenticate *
b3f0: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
b400: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
b410: 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74  te3_userauth.aut
b420: 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e  hLevel */.#defin
b430: 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20  e UAUTH_Unknown 
b440: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74      0     /* Aut
b450: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20  hentication not 
b460: 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23  yet checked */.#
b470: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69  define UAUTH_Fai
b480: 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f  l        1     /
b490: 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63  * User authentic
b4a0: 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a  ation failed */.
b4b0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73  #define UAUTH_Us
b4c0: 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20  er        2     
b4d0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
b4e0: 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65   as a normal use
b4f0: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  r */.#define UAU
b500: 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33  TH_Admin       3
b510: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
b520: 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69  cated as an admi
b530: 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a  nistrator */../*
b540: 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20   Functions used 
b550: 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74  only by user aut
b560: 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63  horization logic
b570: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55   */.int sqlite3U
b580: 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e  serAuthTable(con
b590: 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
b5a0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68  qlite3UserAuthCh
b5b0: 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33  eckLogin(sqlite3
b5c0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38  *,const char*,u8
b5d0: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
b5e0: 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c  UserAuthInit(sql
b5f0: 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
b600: 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71  ite3CryptFunc(sq
b610: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
b620: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
b630: 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  **);..#endif /* 
b640: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
b650: 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f  ENTICATION */../
b660: 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72  *.** typedef for
b670: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
b680: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  on callback func
b690: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  tion..*/.#ifdef 
b6a0: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
b6b0: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70  ENTICATION.  typ
b6c0: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
b6d0: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
b6e0: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
b6f0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b700: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b720: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
b730: 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
b740: 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  );.#else.  typed
b750: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
b760: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
b770: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
b780: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b790: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7b0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
b7c0: 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  *);.#endif..#ifn
b7d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b7e0: 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68  DEPRECATED./* Th
b7f0: 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20 53  is is an extra S
b800: 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72  QLITE_TRACE macr
b810: 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  o that indicates
b820: 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e   "legacy" tracin
b830: 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c  g.** in the styl
b840: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61  e of sqlite3_tra
b850: 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ce().*/.#define 
b860: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47  SQLITE_TRACE_LEG
b870: 41 43 59 20 20 20 20 20 20 20 20 20 20 30 78 34  ACY          0x4
b880: 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65  0     /* Use the
b890: 20 6c 65 67 61 63 79 20 78 54 72 61 63 65 20 2a   legacy xTrace *
b8a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b8b0: 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45 20  _TRACE_XPROFILE 
b8c0: 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20 20         0x80     
b8d0: 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61 63  /* Use the legac
b8e0: 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a 23 65  y xProfile */.#e
b8f0: 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  lse.#define SQLI
b900: 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20  TE_TRACE_LEGACY 
b910: 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66 69           0.#defi
b920: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
b930: 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20 20  XPROFILE        
b940: 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  0.#endif /* SQLI
b950: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
b960: 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ED */.#define SQ
b970: 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 4c 45  LITE_TRACE_NONLE
b980: 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30 66 20  GACY_MASK  0x0f 
b990: 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 66 6c      /* Normal fl
b9a0: 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45  ags */.../*.** E
b9b0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
b9c0: 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e  nection is an in
b9d0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
b9e0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
b9f0: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c  e..*/.struct sql
ba00: 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  ite3 {.  sqlite3
ba10: 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20  _vfs *pVfs;     
ba20: 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74         /* OS Int
ba30: 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75  erface */.  stru
ba40: 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  ct Vdbe *pVdbe; 
ba50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
ba60: 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74  t of active virt
ba70: 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a  ual machines */.
ba80: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74    CollSeq *pDflt
ba90: 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  Coll;           
baa0: 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63  /* The default c
bab0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
bac0: 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20  e (BINARY) */.  
bad0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d  sqlite3_mutex *m
bae0: 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  utex;         /*
baf0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   Connection mute
bb00: 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20  x */.  Db *aDb; 
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb20: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b       /* All back
bb30: 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44  ends */.  int nD
bb40: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
bb50: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
bb60: 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75  r of backends cu
bb70: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
bb80: 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67 73  /.  u32 mDbFlags
bb90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bba0: 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f 72    /* flags recor
bbb0: 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73 74  ding internal st
bbc0: 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c 61  ate */.  u64 fla
bbd0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bbe0: 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20         /* flags 
bbf0: 73 65 74 74 61 62 6c 65 20 62 79 20 70 72 61 67  settable by prag
bc00: 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a  mas. See below *
bc10: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
bc20: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
bc30: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
bc40: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
bc50: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
bc60: 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20    i64 szMmap;   
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f  /* Default mmap_
bc90: 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  size setting */.
bca0: 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f 63    u32 nSchemaLoc
bcb0: 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
bcc0: 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74 20  /* Do not reset 
bcd0: 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20  the schema when 
bce0: 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75 6e  non-zero */.  un
bcf0: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
bd00: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
bd10: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
bd20: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
bd30: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
bd40: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
bd50: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
bd60: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
bd70: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
bd80: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
bd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bda0: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
bdb0: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
bdc0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
bdd0: 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20 20  int iSysErrno;  
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bdf0: 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f   Errno value fro
be00: 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65 72  m last system er
be10: 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f  ror */.  u16 dbO
be20: 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  ptFlags;        
be30: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
be40: 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c  to enable/disabl
be50: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  e optimizations 
be60: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
be70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be80: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
be90: 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f  ing */.  u8 auto
bea0: 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20  Commit;         
beb0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75         /* The au
bec0: 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20  to-commit flag. 
bed0: 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f  */.  u8 temp_sto
bee0: 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  re;             
bef0: 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a     /* 1: file 2:
bf00: 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75   memory 0: defau
bf10: 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f  lt */.  u8 mallo
bf20: 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20  cFailed;        
bf30: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
bf40: 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20   we have seen a 
bf50: 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a  malloc failure *
bf60: 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61  /.  u8 bBenignMa
bf70: 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  lloc;           
bf80: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75    /* Do not requ
bf90: 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65  ire OOMs if true
bfa0: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
bfb0: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
bfc0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
bfd0: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
bfe0: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
bff0: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
c000: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
c010: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
c020: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
c030: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
c040: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
c050: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
c060: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
c070: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
c080: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
c090: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
c0a0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
c0b0: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
c0c0: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
c0d0: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
c0e0: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
c0f0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
c100: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
c110: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
c120: 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20 20  /.  u8 mTrace;  
c130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c140: 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72    /* zero or mor
c150: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 66  e SQLITE_TRACE f
c160: 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f 53  lags */.  u8 noS
c170: 68 61 72 65 64 43 61 63 68 65 3b 20 20 20 20 20  haredCache;     
c180: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
c190: 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61 63  if no shared-cac
c1a0: 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  he backends */. 
c1b0: 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20 20   u8 nSqlExec;   
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c1d0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e 64  * Number of pend
c1e0: 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f  ing OP_SqlExec o
c1f0: 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20  pcodes */.  int 
c200: 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20  nextPagesize;   
c210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
c220: 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55  esize after VACU
c230: 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33  UM if >0 */.  u3
c240: 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20  2 magic;        
c250: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
c260: 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20  agic number for 
c270: 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d  detect library m
c280: 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  isuse */.  int n
c290: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
c2a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
c2b0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
c2c0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20  lite3_changes() 
c2d0: 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43  */.  int nTotalC
c2e0: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
c2f0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
c300: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
c310: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20  total_changes() 
c320: 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b  */.  int aLimit[
c330: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b  SQLITE_N_LIMIT];
c340: 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a     /* Limits */.
c350: 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72    int nMaxSorter
c360: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
c370: 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20  /* Maximum size 
c380: 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65  of regions mappe
c390: 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20  d by sorter */. 
c3a0: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49   struct sqlite3I
c3b0: 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f  nitInfo {      /
c3c0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
c3d0: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
c3e0: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
c3f0: 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20  int newTnum;    
c400: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
c410: 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65  ootpage of table
c420: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
c430: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62  ed */.    u8 iDb
c440: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c450: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64        /* Which d
c460: 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20  b file is being 
c470: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
c480: 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20     u8 busy;     
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c4a0: 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e  * TRUE if curren
c4b0: 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  tly initializing
c4c0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c4d0: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20 3a   orphanTrigger :
c4e0: 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61 74   1; /* Last stat
c4f0: 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65  ement is orphane
c500: 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a  d TEMP trigger *
c510: 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  /.    unsigned i
c520: 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20 31  mposterTable : 1
c530: 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e  ; /* Building an
c540: 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20   imposter table 
c550: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c560: 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31 3b  reopenMemdb : 1;
c570: 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73 20     /* ATTACH is 
c580: 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e 20  really a reopen 
c590: 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a 20  using MemDB */. 
c5a0: 20 20 20 63 68 61 72 20 2a 2a 61 7a 49 6e 69 74     char **azInit
c5b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
c5c0: 2a 20 22 74 79 70 65 22 2c 20 22 6e 61 6d 65 22  * "type", "name"
c5d0: 2c 20 61 6e 64 20 22 74 62 6c 5f 6e 61 6d 65 22  , and "tbl_name"
c5e0: 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 7d 20   columns */.  } 
c5f0: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
c600: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
c610: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c620: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
c630: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
c640: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
c650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c660: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c670: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c680: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
c690: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c6b0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c6c0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c6d0: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
c6e0: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
c6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c700: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
c710: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
c720: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
c730: 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20  nVDestroy;      
c740: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c750: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50  ber of active OP
c760: 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  _VDestroy operat
c770: 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ions */.  int nE
c780: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
c790: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c7a0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
c7b0: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
c7c0: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
c7d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
c7e0: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
c7f0: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
c800: 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28    int (*xTrace)(
c810: 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c  u32,void*,void*,
c820: 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54  void*);     /* T
c830: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
c840: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
c850: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c870: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
c880: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
c890: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
c8a0: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
c8b0: 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69  .  void (*xProfi
c8c0: 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  le)(void*,const 
c8d0: 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20  char*,u64);  /* 
c8e0: 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69  Profiling functi
c8f0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  on */.  void *pP
c900: 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20  rofileArg;      
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
c930: 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f   profile functio
c940: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 76 6f  n */.#endif.  vo
c950: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c970: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
c980: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
c990: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d   */.  int (*xCom
c9a0: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
c9b0: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
c9c0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
c9d0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
c9e0: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
c9f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
ca00: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
ca10: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
ca20: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
ca30: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
ca40: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
ca50: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
ca60: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
ca70: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
ca80: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
ca90: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
caa0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
cab0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
cac0: 34 29 3b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  4);.  Parse *pPa
cad0: 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
cae0: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 70      /* Current p
caf0: 61 72 73 65 20 2a 2f 0a 23 69 66 64 65 66 20 53  arse */.#ifdef S
cb00: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
cb10: 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f  UPDATE_HOOK.  vo
cb20: 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72  id *pPreUpdateAr
cb30: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  g;          /* F
cb40: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
cb50: 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62   xPreUpdateCallb
cb60: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ack */.  void (*
cb70: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
cb80: 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74  ck)(   /* Regist
cb90: 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ered using sqlit
cba0: 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f  e3_preupdate_hoo
cbb0: 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a  k() */.    void*
cbc0: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68  ,sqlite3*,int,ch
cbd0: 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63  ar const*,char c
cbe0: 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e  onst*,sqlite3_in
cbf0: 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  t64,sqlite3_int6
cc00: 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61  4.  );.  PreUpda
cc10: 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20  te *pPreUpdate; 
cc20: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
cc30: 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65  t for active pre
cc40: 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b  -update callback
cc50: 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   */.#endif /* SQ
cc60: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
cc70: 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69  PDATE_HOOK */.#i
cc80: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cc90: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
cca0: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
ccb0: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
ccc0: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
ccd0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
cce0: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
ccf0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
cd00: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
cd10: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
cd20: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
cd30: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
cd40: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
cd50: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
cd60: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
cd70: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
cd80: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
cd90: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
cda0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
cdb0: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
cdc0: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
cdd0: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73   volatile int is
cde0: 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20  Interrupted; /* 
cdf0: 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f  True if sqlite3_
ce00: 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65  interrupt has be
ce10: 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20  en called */.   
ce20: 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31   double notUsed1
ce30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ce40: 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31  Spacer */.  } u1
ce50: 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f  ;.  Lookaside lo
ce60: 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
ce70: 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d    /* Lookaside m
ce80: 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74  alloc configurat
ce90: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
cea0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
ceb0: 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  RIZATION.  sqlit
cec0: 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20  e3_xauth xAuth; 
ced0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65           /* Acce
cee0: 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  ss authorization
cef0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
cf00: 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20  oid *pAuthArg;  
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cf20: 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  1st argument to 
cf30: 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20  the access auth 
cf40: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  function */.#end
cf50: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
cf60: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
cf70: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28  CALLBACK.  int (
cf80: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
cf90: 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20   *);     /* The 
cfa0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
cfb0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  k */.  void *pPr
cfc0: 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20  ogressArg;      
cfd0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
cfe0: 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73   to the progress
cff0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75   callback */.  u
d000: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
d010: 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  sOps;        /* 
d020: 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  Number of opcode
d030: 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63  s for progress c
d040: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
d050: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
d060: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
d070: 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  LE.  int nVTrans
d080: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d090: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
d0a0: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
d0b0: 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c  */.  Hash aModul
d0c0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
d0d0: 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20     /* populated 
d0e0: 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  by sqlite3_creat
d0f0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
d100: 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74  VtabCtx *pVtabCt
d110: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
d120: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
d130: 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74  ive vtab connect
d140: 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61  /create */.  VTa
d150: 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20  ble **aVTrans;  
d160: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69             /* Vi
d170: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74  rtual tables wit
d180: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
d190: 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ons */.  VTable 
d1a0: 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20  *pDisconnect;   
d1b0: 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e         /* Discon
d1c0: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
d1d0: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
d1e0: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
d1f0: 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20   Hash aFunc;    
d200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d210: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
d220: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
d230: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
d240: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
d250: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
d260: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d270: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
d280: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
d290: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
d2a0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
d2b0: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
d2c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
d2d0: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
d2e0: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
d2f0: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
d300: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
d310: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
d320: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
d330: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
d340: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
d350: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
d360: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
d370: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
d380: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
d390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d3a0: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
d3b0: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
d3c0: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
d3d0: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
d3e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d3f0: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
d400: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
d410: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
d420: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
d430: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
d440: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
d450: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
d460: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
d470: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
d480: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d490: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
d4a0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d4b0: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
d4c0: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
d4d0: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
d4e0: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
d4f0: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
d500: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
d510: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
d520: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
d530: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
d540: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
d550: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
d560: 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  STER.  ** mutex,
d570: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
d580: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
d590: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
d5a0: 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20  notify.c..  **. 
d5b0: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
d5c0: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
d5d0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
d5e0: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
d5f0: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
d600: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
d610: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
d620: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
d630: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
d640: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
d650: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
d660: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
d670: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
d680: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
d690: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
d6a0: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
d6b0: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
d6c0: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
d6d0: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
d6e0: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
d6f0: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
d700: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
d710: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
d720: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
d730: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
d740: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
d750: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
d760: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
d770: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
d780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
d790: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
d7a0: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
d7b0: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
d7c0: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
d7d0: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
d7e0: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
d7f0: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
d800: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
d810: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
d820: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
d830: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
d840: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
d850: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
d860: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
d870: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
d880: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
d890: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
d8a0: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
d8b0: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
d8c0: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
d8d0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
d8e0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
d8f0: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45  #define SCHEMA_E
d900: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
d910: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
d920: 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  c).#define ENC(d
d930: 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d  b)        ((db)-
d940: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
d950: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
d960: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
d970: 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  gs..**.** Value 
d980: 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
d990: 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
d9a0: 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c  ()):.**      SQL
d9b0: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
d9c0: 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46    == PAGER_FULLF
d9d0: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
d9e0: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
d9f0: 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f  c == PAGER_CKPT_
da00: 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20  FULLFSYNC.**    
da10: 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70    SQLITE_CacheSp
da20: 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f  ill    == PAGER_
da30: 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23  CACHE_SPILL.*/.#
da40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
da50: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
da60: 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74  0000001  /* OK t
da70: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
da80: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
da90: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
daa0: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30 30  ileFmt  0x000000
dab0: 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  02  /* Create ne
dac0: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
dad0: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
dae0: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
daf0: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
db00: 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  004  /* Show ful
db10: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
db20: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
db30: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
db40: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30  Sync      0x0000
db50: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
db60: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
db70: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
db80: 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  e SQLITE_CkptFul
db90: 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30  lFSync  0x000000
dba0: 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  10  /* Use full 
dbb0: 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70  fsync for checkp
dbc0: 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oint */.#define 
dbd0: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
dbe0: 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32 30  l     0x00000020
dbf0: 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c    /* OK to spill
dc00: 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a   pager cache */.
dc10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
dc20: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
dc30: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
dc40: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
dc50: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
dc60: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
dc70: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
dc80: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
dc90: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
dca0: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
dce0: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
dcf0: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd20: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
dd30: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
dd40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd50: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
dd60: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
dd70: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
dd80: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
dd90: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ddc0: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
ddd0: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
dde0: 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43  e SQLITE_IgnoreC
ddf0: 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30 32  hecks   0x000002
de00: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e  00  /* Do not en
de10: 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73  force check cons
de20: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
de30: 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  ne SQLITE_ReadUn
de40: 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30  commit   0x00000
de50: 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43  400  /* READ UNC
de60: 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72  OMMITTED in shar
de70: 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  ed-cache */.#def
de80: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70  ine SQLITE_NoCkp
de90: 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30  tOnClose  0x0000
dea0: 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63  0800  /* No chec
deb0: 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28  kpoint on close(
dec0: 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66  )/DETACH */.#def
ded0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
dee0: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 30  seOrder   0x0000
def0: 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  1000  /* Reverse
df00: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
df10: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
df20: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
df30: 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20      0x00002000  
df40: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
df50: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
df60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
df70: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
df80: 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66  00004000  /* Enf
df90: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
dfa0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
dfb0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dfc0: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
dfd0: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e  x00008000  /* En
dfe0: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
dff0: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
e000: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
e010: 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30  ension  0x000100
e020: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
e030: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
e040: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
e050: 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30 78  oadExtFunc    0x
e060: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61  00020000  /* Ena
e070: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
e080: 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f  on() SQL func */
e090: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e0a0: 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30  EnableTrigger  0
e0b0: 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72  x00040000  /* Tr
e0c0: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69  ue to enable tri
e0d0: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
e0e0: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
e0f0: 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30 30         0x0008000
e100: 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20  0  /* Defer all 
e110: 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  FK constraints *
e120: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e130: 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20  _QueryOnly      
e140: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44  0x00100000  /* D
e150: 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20  isable database 
e160: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e170: 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69  ne SQLITE_CellSi
e180: 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30 30  zeCk     0x00200
e190: 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74  000  /* Check bt
e1a0: 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f  ree cell sizes o
e1b0: 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e  n load */.#defin
e1c0: 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b  e SQLITE_Fts3Tok
e1d0: 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30 30  enizer  0x004000
e1e0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74  00  /* Enable ft
e1f0: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20  s3_tokenizer(2) 
e200: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e210: 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20  E_EnableQPSG    
e220: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
e230: 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74  Query Planner St
e240: 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65  ability Guarante
e250: 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  e*/.#define SQLI
e260: 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20 20  TE_TriggerEQP   
e270: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
e280: 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45 58   Show trigger EX
e290: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e2a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e2b0: 54 45 5f 52 65 73 65 74 44 61 74 61 62 61 73 65  TE_ResetDatabase
e2c0: 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a    0x02000000  /*
e2d0: 20 52 65 73 65 74 20 74 68 65 20 64 61 74 61 62   Reset the datab
e2e0: 61 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ase */.#define S
e2f0: 51 4c 49 54 45 5f 4c 65 67 61 63 79 41 6c 74 65  QLITE_LegacyAlte
e300: 72 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20  r    0x04000000 
e310: 20 2f 2a 20 4c 65 67 61 63 79 20 41 4c 54 45 52   /* Legacy ALTER
e320: 20 54 41 42 4c 45 20 62 65 68 61 76 69 6f 75 72   TABLE behaviour
e330: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e340: 54 45 5f 4e 6f 53 63 68 65 6d 61 45 72 72 6f 72  TE_NoSchemaError
e350: 20 20 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a    0x08000000  /*
e360: 20 44 6f 20 6e 6f 74 20 72 65 70 6f 72 74 20 73   Do not report s
e370: 63 68 65 6d 61 20 70 61 72 73 65 20 65 72 72 6f  chema parse erro
e380: 72 73 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  rs*/.#define SQL
e390: 49 54 45 5f 44 65 66 65 6e 73 69 76 65 20 20 20  ITE_Defensive   
e3a0: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
e3b0: 2a 20 49 6e 70 75 74 20 53 51 4c 20 69 73 20 6c  * Input SQL is l
e3c0: 69 6b 65 6c 79 20 68 6f 73 74 69 6c 65 20 2a 2f  ikely hostile */
e3d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e3e0: 44 71 73 44 44 4c 20 20 20 20 20 20 20 20 20 30  DqsDDL         0
e3f0: 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 64 62  x20000000  /* db
e400: 6c 2d 71 75 6f 74 65 64 20 73 74 72 69 6e 67 73  l-quoted strings
e410: 20 61 6c 6c 6f 77 65 64 20 69 6e 20 44 44 4c 2a   allowed in DDL*
e420: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e430: 5f 44 71 73 44 4d 4c 20 20 20 20 20 20 20 20 20  _DqsDML         
e440: 30 78 34 30 30 30 30 30 30 30 20 20 2f 2a 20 64  0x40000000  /* d
e450: 62 6c 2d 71 75 6f 74 65 64 20 73 74 72 69 6e 67  bl-quoted string
e460: 73 20 61 6c 6c 6f 77 65 64 20 69 6e 20 44 4d 4c  s allowed in DML
e470: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e480: 45 5f 45 6e 61 62 6c 65 56 69 65 77 20 20 20 20  E_EnableView    
e490: 20 30 78 38 30 30 30 30 30 30 30 20 20 2f 2a 20   0x80000000  /* 
e4a0: 45 6e 61 62 6c 65 20 74 68 65 20 75 73 65 20 6f  Enable the use o
e4b0: 66 20 76 69 65 77 73 20 2a 2f 0a 0a 2f 2a 20 46  f views */../* F
e4c0: 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69  lags used only i
e4d0: 66 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23  f debugging */.#
e4e0: 64 65 66 69 6e 65 20 48 49 28 58 29 20 20 28 28  define HI(X)  ((
e4f0: 75 36 34 29 28 58 29 3c 3c 33 32 29 0a 23 69 66  u64)(X)<<32).#if
e500: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
e510: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e520: 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 48  SqlTrace       H
e530: 49 28 30 78 30 31 30 30 30 30 30 29 20 2f 2a 20  I(0x0100000) /* 
e540: 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20  Debug print SQL 
e550: 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a  as it executes *
e560: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e570: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20  _VdbeListing    
e580: 48 49 28 30 78 30 32 30 30 30 30 30 29 20 2f 2a  HI(0x0200000) /*
e590: 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20   Debug listings 
e5a0: 6f 66 20 56 44 42 45 20 70 72 6f 67 73 20 2a 2f  of VDBE progs */
e5b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e5c0: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 48  VdbeTrace      H
e5d0: 49 28 30 78 30 34 30 30 30 30 30 29 20 2f 2a 20  I(0x0400000) /* 
e5e0: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
e5f0: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
e600: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
e610: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 48 49  dbeAddopTrace HI
e620: 28 30 78 30 38 30 30 30 30 30 29 20 2f 2a 20 54  (0x0800000) /* T
e630: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
e640: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
e650: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e660: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 48  VdbeEQP        H
e670: 49 28 30 78 31 30 30 30 30 30 30 29 20 2f 2a 20  I(0x1000000) /* 
e680: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
e690: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66  ERY PLAN */.#def
e6a0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 61 72 73 65  ine SQLITE_Parse
e6b0: 72 54 72 61 63 65 20 20 20 20 48 49 28 30 78 32  rTrace    HI(0x2
e6c0: 30 30 30 30 30 30 29 20 2f 2a 20 50 52 41 47 4d  000000) /* PRAGM
e6d0: 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d 4f  A parser_trace=O
e6e0: 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  N */.#endif../*.
e6f0: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
e700: 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44  s for sqlite3.mD
e710: 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e  bFlags.*/.#defin
e720: 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43  e DBFLAG_SchemaC
e730: 68 61 6e 67 65 20 20 20 30 78 30 30 30 31 20 20  hange   0x0001  
e740: 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48  /* Uncommitted H
e750: 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65  ash table change
e760: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46  s */.#define DBF
e770: 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74 69  LAG_PreferBuilti
e780: 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50 72  n  0x0002  /* Pr
e790: 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c  eference to buil
e7a0: 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64  t-in funcs */.#d
e7b0: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63  efine DBFLAG_Vac
e7c0: 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30 30  uum         0x00
e7d0: 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79  04  /* Currently
e7e0: 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a   in a VACUUM */.
e7f0: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56  #define DBFLAG_V
e800: 61 63 75 75 6d 49 6e 74 6f 20 20 20 20 20 30 78  acuumInto     0x
e810: 30 30 30 38 20 20 2f 2a 20 43 75 72 72 65 6e 74  0008  /* Current
e820: 6c 79 20 72 75 6e 6e 69 6e 67 20 56 41 43 55 55  ly running VACUU
e830: 4d 20 49 4e 54 4f 20 2a 2f 0a 23 64 65 66 69 6e  M INTO */.#defin
e840: 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b  e DBFLAG_SchemaK
e850: 6e 6f 77 6e 4f 6b 20 20 30 78 30 30 31 30 20 20  nownOk  0x0010  
e860: 2f 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e 6f  /* Schema is kno
e870: 77 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20 2a  wn to be valid *
e880: 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66  /../*.** Bits of
e890: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f   the sqlite3.dbO
e8a0: 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68  ptFlags field th
e8b0: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74  at are used by t
e8c0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  he.** sqlite3_te
e8d0: 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
e8e0: 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
e8f0: 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e  IZATIONS,...) in
e900: 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65  terface to.** se
e910: 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c  lectively disabl
e920: 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
e930: 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  zations..*/.#def
e940: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
e950: 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31  Flattener 0x0001
e960: 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74     /* Query flat
e970: 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  tening */.#defin
e980: 65 20 53 51 4c 49 54 45 5f 57 69 6e 64 6f 77 46  e SQLITE_WindowF
e990: 75 6e 63 20 20 20 20 20 30 78 30 30 30 32 20 20  unc     0x0002  
e9a0: 20 2f 2a 20 55 73 65 20 78 49 6e 76 65 72 73 65   /* Use xInverse
e9b0: 20 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e 63   for window func
e9c0: 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
e9d0: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
e9e0: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
e9f0: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
ea00: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
ea10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
ea20: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
ea30: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
ea40: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23  t factoring */.#
ea50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
ea60: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
ea70: 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  010   /* DISTINC
ea80: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
ea90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eaa0: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
eab0: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76   0x0020   /* Cov
eac0: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
ead0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
eae0: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
eaf0: 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f  in 0x0040   /* O
eb00: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
eb10: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
eb20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61  efine SQLITE_Tra
eb30: 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30 30  nsitive     0x00
eb40: 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69  80   /* Transiti
eb50: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ve constraints *
eb60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eb70: 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20  _OmitNoopJoin   
eb80: 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74  0x0100   /* Omit
eb90: 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69   unused tables i
eba0: 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69  n joins */.#defi
ebb0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f  ne SQLITE_CountO
ebc0: 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30 20  fView    0x0200 
ebd0: 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f    /* The count-o
ebe0: 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74  f-view optimizat
ebf0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
ec00: 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74  QLITE_CursorHint
ec10: 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  s    0x0400   /*
ec20: 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69   Add OP_CursorHi
ec30: 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64  nt opcodes */.#d
ec40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
ec50: 74 34 20 20 20 20 20 20 20 20 20 20 30 78 30 38  t4          0x08
ec60: 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54  00   /* Use STAT
ec70: 34 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a 20  4 data */.   /* 
ec80: 54 48 33 20 65 78 70 65 63 74 73 20 74 68 65 20  TH3 expects the 
ec90: 53 74 61 74 34 20 20 20 5e 5e 5e 5e 5e 5e 20 76  Stat4   ^^^^^^ v
eca0: 61 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38 30  alue to be 0x080
ecb0: 30 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67 65  0.  Don't change
ecc0: 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   it */.#define S
ecd0: 51 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20 20  QLITE_PushDown  
ece0: 20 20 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a       0x1000   /*
ecf0: 20 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20 6f   The push-down o
ed00: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
ed10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 69  define SQLITE_Si
ed20: 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78 32  mplifyJoin   0x2
ed30: 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74  000   /* Convert
ed40: 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f   LEFT JOIN to JO
ed50: 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  IN */.#define SQ
ed60: 4c 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20 20  LITE_SkipScan   
ed70: 20 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a 20      0x4000   /* 
ed80: 53 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23 64  Skip-scans */.#d
ed90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 6f  efine SQLITE_Pro
eda0: 70 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38 30  pagateConst 0x80
edb0: 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 73  00   /* The cons
edc0: 74 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f 6e  tant propagation
edd0: 20 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20   opt */.#define 
ede0: 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20  SQLITE_AllOpts  
edf0: 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f        0xffff   /
ee00: 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69  * All optimizati
ee10: 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ons */../*.** Ma
ee20: 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67  cros for testing
ee30: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
ee40: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72  optimizations ar
ee50: 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73  e enabled or dis
ee60: 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  abled..*/.#defin
ee70: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
ee80: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
ee90: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
eea0: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
eeb0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
eec0: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
eed0: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
eee0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
eef0: 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52  k))==0)../*.** R
ef00: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74  eturn true if it
ef10: 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f   OK to factor co
ef20: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
ef30: 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74  ns into the init
ef40: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f  ialization.** co
ef50: 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  de. The argument
ef60: 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65   is a Parse obje
ef70: 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ct for the code 
ef80: 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64  generator..*/.#d
ef90: 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f  efine ConstFacto
efa0: 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43  rOk(P) ((P)->okC
efb0: 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a  onstFactor)../*.
efc0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
efd0: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
efe0: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
eff0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
f000: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
f010: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
f020: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
f030: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
f040: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
f050: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
f060: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
f070: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
f080: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
f090: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
f0a0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
f0b0: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
f0c0: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
f0d0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
f0e0: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
f0f0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
f100: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
f110: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
f120: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
f130: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f140: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
f150: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
f160: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
f170: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
f180: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f190: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
f1a0: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
f1b0: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
f1c0: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
f1d0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f1e0: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
f1f0: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
f200: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
f210: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
f220: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
f230: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
f240: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
f250: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
f260: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  * structure.  Fo
f270: 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69  r global built-i
f280: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a  n functions (ex:
f290: 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29   substr(), max()
f2a0: 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20  , count()).** a 
f2b0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
f2c0: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
f2d0: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
f2e0: 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
f2f0: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20   object..** For 
f300: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
f310: 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
f320: 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20  ed functions, a 
f330: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a  pointer to this.
f340: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ** structure is 
f350: 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e  held in the db->
f360: 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65  aHash hash table
f370: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48  ..**.** The u.pH
f380: 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65  ash field is use
f390: 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20  d by the global 
f3a0: 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20  built-ins.  The 
f3b0: 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  u.pDestructor.**
f3c0: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
f3d0: 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  y per-connection
f3e0: 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f   app-def functio
f3f0: 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ns..*/.struct Fu
f400: 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72  ncDef {.  i8 nAr
f410: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
f420: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
f430: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
f440: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
f450: 75 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u32 funcFlags;  
f460: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
f470: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
f480: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
f490: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
f4a0: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
f4b0: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
f4c0: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
f4d0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
f4e0: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
f4f0: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
f500: 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33  *xSFunc)(sqlite3
f510: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
f520: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
f530: 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73  /* func or agg-s
f540: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
f550: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
f560: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
f570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f580: 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20  * Agg finalizer 
f590: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61 6c  */.  void (*xVal
f5a0: 75 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ue)(sqlite3_cont
f5b0: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
f5c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
f5d0: 72 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65 20  rrent agg value 
f5e0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e 76  */.  void (*xInv
f5f0: 65 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  erse)(sqlite3_co
f600: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
f610: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
f620: 69 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65 70  inverse agg-step
f630: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
f640: 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51   *zName;   /* SQ
f650: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
f660: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69  nction. */.  uni
f670: 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66  on {.    FuncDef
f680: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
f690: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
f6a0: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
f6b0: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
f6c0: 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63  .    FuncDestruc
f6d0: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
f6e0: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
f6f0: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
f700: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
f710: 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a    } u;.};../*.**
f720: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
f730: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
f740: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
f750: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
f760: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
f770: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
f780: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
f790: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
f7a0: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
f7b0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
f7c0: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
f7d0: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
f7e0: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
f7f0: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
f800: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
f810: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
f820: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
f830: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
f840: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
f850: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
f860: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
f870: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
f880: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
f890: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
f8a0: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
f8b0: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
f8c0: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
f8d0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
f8e0: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
f8f0: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
f900: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
f910: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
f920: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
f930: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
f940: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
f950: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
f960: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
f970: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
f980: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
f990: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
f9a0: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
f9b0: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
f9c0: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
f9d0: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
f9e0: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
f9f0: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
fa00: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
fa10: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
fa20: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
fa30: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
fa40: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
fa50: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
fa60: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
fa70: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
fa80: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
fa90: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
faa0: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
fab0: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
fac0: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
fad0: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
fae0: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
faf0: 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f    And.** SQLITE_
fb00: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75  FUNC_CONSTANT mu
fb10: 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
fb20: 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49  s SQLITE_DETERMI
fb30: 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a  NISTIC.  There.*
fb40: 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73  * are assert() s
fb50: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
fb60: 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20   code to verify 
fb70: 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  this..**.** Valu
fb80: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
fb90: 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
fba0: 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51  rt()):.**     SQ
fbb0: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
fbc0: 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61      ==  NC_MinMa
fbd0: 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f  xAgg      == SF_
fbe0: 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20  MinMaxAgg.**    
fbf0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
fc00: 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41  GTH    ==  OPFLA
fc10: 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20  G_LENGTHARG.**  
fc20: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54     SQLITE_FUNC_T
fc30: 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46  YPEOF    ==  OPF
fc40: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a  LAG_TYPEOFARG.**
fc50: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
fc60: 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53  _CONSTANT  ==  S
fc70: 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53  QLITE_DETERMINIS
fc80: 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49  TIC from the API
fc90: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
fca0: 55 4e 43 5f 44 49 52 45 43 54 20 20 20 20 3d 3d  UNC_DIRECT    ==
fcb0: 20 20 53 51 4c 49 54 45 5f 44 49 52 45 43 54 4f    SQLITE_DIRECTO
fcc0: 4e 4c 59 20 66 72 6f 6d 20 74 68 65 20 41 50 49  NLY from the API
fcd0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
fce0: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65  UNC_ENCMASK   de
fcf0: 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f  pends on SQLITE_
fd00: 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74  UTF* macros in t
fd10: 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e  he API.*/.#defin
fd20: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
fd30: 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a  CMASK  0x0003 /*
fd40: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
fd50: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20  LITE_UTF16BE or 
fd60: 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69  UTF16LE */.#defi
fd70: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
fd80: 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f  IKE     0x0004 /
fd90: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
fda0: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
fdb0: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
fdc0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
fdd0: 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  E     0x0008 /* 
fde0: 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c  Case-sensitive L
fdf0: 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f  IKE-type functio
fe00: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fe10: 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20  ITE_FUNC_EPHEM  
fe20: 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65    0x0010 /* Ephe
fe30: 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
fe40: 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
fe50: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fe60: 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20  NEEDCOLL 0x0020 
fe70: 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
fe80: 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
fe90: 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65   be called*/.#de
fea0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
feb0: 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30  _LENGTH   0x0040
fec0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
fed0: 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
fee0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fef0: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
ff00: 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0080 /* Built-i
ff10: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
ff20: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
ff30: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
ff40: 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75      0x0100 /* Bu
ff50: 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
ff60: 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
ff70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
ff80: 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30  _COALESCE 0x0200
ff90: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
ffa0: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
ffb0: 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
ffc0: 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
ffd0: 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75  ELY 0x0400 /* Bu
ffe0: 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28  ilt-in unlikely(
fff0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
10000 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
10010 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30  C_CONSTANT 0x080
10020 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e  0 /* Constant in
10030 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73  puts give a cons
10040 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23  tant output */.#
10050 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10060 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30  NC_MINMAX   0x10
10070 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d  00 /* True for m
10080 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61  in() and max() a
10090 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65  ggregates */.#de
100a0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
100b0 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30  _SLOCHNG  0x2000
100c0 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65   /* "Slow Change
100d0 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e  ". Value constan
100e0 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20  t during a.     
100f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
10110 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d  * single query -
10120 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76   might change ov
10130 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69  er time */.#defi
10140 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41  ne SQLITE_FUNC_A
10150 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20 2f  FFINITY 0x4000 /
10160 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e  * Built-in affin
10170 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ity() function *
10180 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10190 5f 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20 30  _FUNC_OFFSET   0
101a0 78 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x8000 /* Built-i
101b0 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28  n sqlite_offset(
101c0 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
101d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
101e0 43 5f 57 49 4e 44 4f 57 20 20 20 30 78 30 30 30  C_WINDOW   0x000
101f0 31 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  10000 /* Built-i
10200 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75  n window-only fu
10210 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
10220 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e  e SQLITE_FUNC_IN
10230 54 45 52 4e 41 4c 20 30 78 30 30 30 34 30 30 30  TERNAL 0x0004000
10240 30 20 2f 2a 20 46 6f 72 20 75 73 65 20 62 79 20  0 /* For use by 
10250 4e 65 73 74 65 64 50 61 72 73 65 28 29 20 6f 6e  NestedParse() on
10260 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ly */.#define SQ
10270 4c 49 54 45 5f 46 55 4e 43 5f 44 49 52 45 43 54  LITE_FUNC_DIRECT
10280 20 20 20 30 78 30 30 30 38 30 30 30 30 20 2f 2a     0x00080000 /*
10290 20 4e 6f 74 20 66 6f 72 20 75 73 65 20 69 6e 20   Not for use in 
102a0 54 52 49 47 47 45 52 73 20 6f 72 20 56 49 45 57  TRIGGERs or VIEW
102b0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
102c0 49 54 45 5f 46 55 4e 43 5f 53 55 42 54 59 50 45  ITE_FUNC_SUBTYPE
102d0 20 20 30 78 30 30 31 30 30 30 30 30 20 2f 2a 20    0x00100000 /* 
102e0 52 65 73 75 6c 74 20 6c 69 6b 65 6c 79 20 74 6f  Result likely to
102f0 20 68 61 76 65 20 73 75 62 2d 74 79 70 65 20 2a   have sub-type *
10300 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
10310 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
10320 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
10330 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
10340 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
10350 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
10360 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
10370 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
10380 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
10390 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
103a0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
103b0 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
103c0 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
103d0 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
103e0 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
103f0 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
10400 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d 70  zName.**     imp
10410 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75  lemented by C fu
10420 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61  nction xFunc tha
10430 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
10440 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a  rguments. The.**
10450 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65       value passe
10460 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73  d as iArg is cas
10470 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61  t to a (void*) a
10480 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c  nd made availabl
10490 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20  e.**     as the 
104a0 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
104b0 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20  e3_user_data()) 
104c0 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  for the function
104d0 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72 67 75  . If.**     argu
104e0 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65  ment bNC is true
104f0 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54  , then the SQLIT
10500 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
10510 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
10520 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a  **   VFUNCTION(z
10530 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10540 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
10550 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
10560 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
10570 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
10580 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
10590 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43 54  ..**.**   DFUNCT
105a0 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
105b0 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
105c0 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46  c).**     Like F
105d0 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69  UNCTION except i
105e0 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49  t omits the SQLI
105f0 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
10600 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20 20   flag and.**    
10610 20 61 64 64 73 20 74 68 65 20 53 51 4c 49 54 45   adds the SQLITE
10620 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66 6c  _FUNC_SLOCHNG fl
10630 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64 61  ag.  Used for da
10640 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74 69  te & time functi
10650 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20 66  ons.**     and f
10660 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73 71  unctions like sq
10670 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 74  lite_version() t
10680 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c 20  hat can change, 
10690 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a 2a  but not during.*
106a0 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20 71  *     a single q
106b0 75 65 72 79 2e 20 20 54 68 65 20 69 41 72 67 20  uery.  The iArg 
106c0 69 73 20 69 67 6e 6f 72 65 64 2e 20 20 54 68 65  is ignored.  The
106d0 20 75 73 65 72 2d 64 61 74 61 20 69 73 20 61 6c   user-data is al
106e0 77 61 79 73 20 73 65 74 0a 2a 2a 20 20 20 20 20  ways set.**     
106f0 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65  to a NULL pointe
10700 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72 61  r.  The bNC para
10710 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65  meter is not use
10720 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52 45 5f  d..**.**   PURE_
10730 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  DATE(zName, nArg
10740 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10750 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  nc).**     Used 
10760 66 6f 72 20 22 70 75 72 65 22 20 64 61 74 65 2f  for "pure" date/
10770 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20  time functions, 
10780 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6c 69  this macro is li
10790 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20  ke DFUNCTION.** 
107a0 20 20 20 20 65 78 63 65 70 74 20 74 68 61 74 20      except that 
107b0 69 74 20 64 6f 65 73 20 73 65 74 20 74 68 65 20  it does set the 
107c0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
107d0 54 41 4e 54 20 66 6c 61 67 73 2e 20 20 69 41 72  TANT flags.  iAr
107e0 67 20 69 73 0a 2a 2a 20 20 20 20 20 69 67 6e 6f  g is.**     igno
107f0 72 65 64 20 61 6e 64 20 74 68 65 20 75 73 65 72  red and the user
10800 2d 64 61 74 61 20 66 6f 72 20 74 68 65 73 65 20  -data for these 
10810 66 75 6e 63 74 69 6f 6e 73 20 69 73 20 73 65 74  functions is set
10820 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20 20 20 61   to an .**     a
10830 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c  rbitrary non-NUL
10840 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20  L pointer.  The 
10850 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69 73  bNC parameter is
10860 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
10870 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61     AGGREGATE(zNa
10880 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10890 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  bNC, xStep, xFin
108a0 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  al).**     Used 
108b0 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
108c0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
108d0 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
108e0 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
108f0 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
10900 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
10910 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
10920 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
10930 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
10940 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
10950 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
10960 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
10970 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
10980 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 57 46 55 4e  ()..**.**   WFUN
10990 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
109a0 67 2c 20 69 41 72 67 2c 20 78 53 74 65 70 2c 20  g, iArg, xStep, 
109b0 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20  xFinal, xValue, 
109c0 78 49 6e 76 65 72 73 65 29 0a 2a 2a 20 20 20 20  xInverse).**    
109d0 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
109e0 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
109f0 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
10a00 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a   implemented by.
10a10 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e  **     the C fun
10a20 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64  ctions xStep and
10a30 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72   xFinal. The fir
10a40 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65  st four paramete
10a50 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e  rs.**     are in
10a60 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65  terpreted in the
10a70 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65   same way as the
10a80 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74   first 4 paramet
10a90 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55  ers to.**     FU
10aa0 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20  NCTION()..**.** 
10ab0 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65    LIKEFUNC(zName
10ac0 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c  , nArg, pArg, fl
10ad0 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  ags).**     Used
10ae0 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
10af0 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
10b00 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
10b10 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20  ction zName.**  
10b20 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20     that accepts 
10b30 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61  nArg arguments a
10b40 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  nd is implemente
10b50 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43  d by a call to C
10b60 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
10b70 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
10b80 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
10b90 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
10ba0 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
10bb0 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
10bc0 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
10bd0 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
10be0 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
10bf0 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
10c00 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
10c10 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
10c20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
10c30 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
10c40 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
10c50 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
10c60 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10c70 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
10c80 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10c90 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
10ca0 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
10cb0 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
10cc0 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
10cd0 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10ce0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10cf0 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10d00 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f  #define VFUNCTIO
10d10 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
10d20 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10d30 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10d40 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10d50 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10d60 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
10d70 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10d80 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10d90 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10da0 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43   }.#define DFUNC
10db0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10dc0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10dd0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10de0 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10df0 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  NG|SQLITE_UTF8, 
10e00 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63  \.   0, 0, xFunc
10e10 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
10e20 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
10e30 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65   PURE_DATE(zName
10e40 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10e50 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
10e60 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10e70 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
10e80 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43  UTF8|SQLITE_FUNC
10e90 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20  _CONSTANT, \.   
10ea0 28 76 6f 69 64 2a 29 26 73 71 6c 69 74 65 33 43  (void*)&sqlite3C
10eb0 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c  onfig, 0, xFunc,
10ec0 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
10ed0 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10ee0 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
10ef0 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10f00 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
10f10 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53  ags) \.  {nArg,S
10f20 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
10f30 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
10f40 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
10f50 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
10f60 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54  Flags,\.   SQLIT
10f70 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
10f80 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
10f90 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b   0, 0, #zName, {
10fa0 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54 52  0} }.#define STR
10fb0 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  _FUNCTION(zName,
10fc0 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43   nArg, pArg, bNC
10fd0 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
10fe0 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10ff0 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55  SLOCHNG|SQLITE_U
11000 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
11010 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
11020 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
11030 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
11040 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20  Name, }.#define 
11050 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
11060 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
11070 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
11080 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
11090 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c  T|SQLITE_UTF8|fl
110a0 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20  ags, \.   (void 
110b0 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75  *)arg, 0, likeFu
110c0 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
110d0 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
110e0 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61  ne AGGREGATE(zNa
110f0 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
11100 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
11110 2c 20 78 56 61 6c 75 65 29 20 5c 0a 20 20 7b 6e  , xValue) \.  {n
11120 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
11130 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
11140 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
11150 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
11160 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65  TR(arg), 0, xSte
11170 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c  p,xFinal,xValue,
11180 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23  0,#zName, {0}}.#
11190 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
111a0 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  2(zName, nArg, a
111b0 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
111c0 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67  Final, extraFlag
111d0 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
111e0 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
111f0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
11200 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
11210 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
11220 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
11230 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 46 69  xStep,xFinal,xFi
11240 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30  nal,0,#zName, {0
11250 7d 7d 0a 23 64 65 66 69 6e 65 20 57 41 47 47 52  }}.#define WAGGR
11260 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
11270 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
11280 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75  p, xFinal, xValu
11290 65 2c 20 78 49 6e 76 65 72 73 65 2c 20 66 29 20  e, xInverse, f) 
112a0 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
112b0 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
112c0 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
112d0 7c 66 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  |f, \.   SQLITE_
112e0 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
112f0 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
11300 2c 78 56 61 6c 75 65 2c 78 49 6e 76 65 72 73 65  ,xValue,xInverse
11310 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64  ,#zName, {0}}.#d
11320 65 66 69 6e 65 20 49 4e 54 45 52 4e 41 4c 5f 46  efine INTERNAL_F
11330 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
11340 41 72 67 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  Arg, xFunc) \.  
11350 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
11360 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c 53 51 4c 49  NC_INTERNAL|SQLI
11370 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46  TE_UTF8|SQLITE_F
11380 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a  UNC_CONSTANT, \.
11390 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20     0, 0, xFunc, 
113a0 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
113b0 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41   {0} }.../*.** A
113c0 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65 70  ll current savep
113d0 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64  oints are stored
113e0 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   in a linked lis
113f0 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a  t starting at.**
11400 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
11410 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20 65  int. The first e
11420 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69  lement in the li
11430 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72  st is the most r
11440 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65  ecently.** opene
11450 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76  d savepoint. Sav
11460 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65  epoints are adde
11470 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79  d to the list by
11480 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f   the vdbe.** OP_
11490 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
114a0 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
114b0 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63   Savepoint {.  c
114c0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114e0 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20     /* Savepoint 
114f0 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e  name (nul-termin
11500 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e  ated) */.  i64 n
11510 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11530 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
11540 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f  rred fk violatio
11550 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  ns */.  i64 nDef
11560 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20  erredImmCons;   
11570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
11580 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
11590 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53  d imm fk. */.  S
115a0 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b  avepoint *pNext;
115b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115c0 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76     /* Parent sav
115d0 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20  epoint (if any) 
115e0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
115f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75   following are u
11600 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e  sed as the secon
11610 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  d parameter to s
11620 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
11630 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65  ),.** and as the
11640 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
11650 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  the OP_Savepoint
11660 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
11670 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
11680 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a  NT_BEGIN      0.
11690 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
116a0 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23  T_RELEASE    1.#
116b0 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
116c0 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a  _ROLLBACK   2...
116d0 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74  /*.** Each SQLit
116e0 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61  e module (virtua
116f0 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  l table definiti
11700 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20 62  on) is defined b
11710 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
11720 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
11730 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f  g structure, sto
11740 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
11750 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61  e3.aModule.** ha
11760 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72  sh table..*/.str
11770 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63  uct Module {.  c
11780 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
11790 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20  ule *pModule;   
117a0 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
117b0 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f  pointers */.  co
117c0 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117e0 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65     /* Name passe
117f0 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
11800 6c 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  le() */.  int nR
11810 65 66 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  efModule;       
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11830 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
11840 74 65 72 73 20 74 6f 20 74 68 69 73 20 6f 62 6a  ters to this obj
11850 65 63 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ect */.  void *p
11860 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aux;            
11870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11880 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20   pAux passed to 
11890 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
118a0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  */.  void (*xDes
118b0 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20  troy)(void *);  
118c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64            /* Mod
118d0 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66  ule destructor f
118e0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62  unction */.  Tab
118f0 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20  le *pEpoTab;    
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11910 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74    /* Eponymous t
11920 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f  able for this mo
11930 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  dule */.};../*.*
11940 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
11950 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
11960 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  of an SQL table 
11970 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e  is held in an in
11980 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
11990 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  s structure..*/.
119a0 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a  struct Column {.
119b0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
119c0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
119d0 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c  is column, \000,
119e0 20 74 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a   then the type *
119f0 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b  /.  Expr *pDflt;
11a00 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
11a10 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
11a20 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
11a30 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  zColl;     /* Co
11a40 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11a50 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20  .  If NULL, use 
11a60 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20  the default */. 
11a70 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20   u8 notNull;    
11a80 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65    /* An OE_ code
11a90 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20   for handling a 
11aa0 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
11ab0 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  int */.  char af
11ac0 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65  finity;   /* One
11ad0 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   of the SQLITE_A
11ae0 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f  FF_... values */
11af0 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20  .  u8 szEst;    
11b00 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
11b10 20 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69   size of value i
11b20 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73  n this column. s
11b30 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f  izeof(INT)==1 */
11b40 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20  .  u8 colFlags; 
11b50 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70      /* Boolean p
11b60 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20  roperties.  See 
11b70 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73  COLFLAG_ defines
11b80 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
11b90 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
11ba0 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c  for Column.colFl
11bb0 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags:.*/.#define 
11bc0 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20  COLFLAG_PRIMKEY 
11bd0 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f   0x0001    /* Co
11be0 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
11bf0 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
11c00 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11c10 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30  AG_HIDDEN   0x00
11c20 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65  02    /* A hidde
11c30 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69  n column in a vi
11c40 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  rtual table */.#
11c50 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
11c60 41 53 54 59 50 45 20 20 30 78 30 30 30 34 20 20  ASTYPE  0x0004  
11c70 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66    /* Type name f
11c80 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61  ollows column na
11c90 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  me */.#define CO
11ca0 4c 46 4c 41 47 5f 55 4e 49 51 55 45 20 20 20 30  LFLAG_UNIQUE   0
11cb0 78 30 30 30 38 20 20 20 20 2f 2a 20 43 6f 6c 75  x0008    /* Colu
11cc0 6d 6e 20 64 65 66 20 63 6f 6e 74 61 69 6e 73 20  mn def contains 
11cd0 22 55 4e 49 51 55 45 22 20 6f 72 20 22 50 4b 22  "UNIQUE" or "PK"
11ce0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
11cf0 4c 41 47 5f 53 4f 52 54 45 52 52 45 46 20 30 78  LAG_SORTERREF 0x
11d00 30 30 31 30 20 20 20 2f 2a 20 55 73 65 20 73 6f  0010   /* Use so
11d10 72 74 65 72 2d 72 65 66 73 20 77 69 74 68 20 74  rter-refs with t
11d20 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f  his column */../
11d30 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
11d40 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
11d50 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
11d60 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
11d70 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
11d80 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
11d90 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
11da0 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
11db0 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
11dc0 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
11dd0 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
11de0 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
11df0 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
11e00 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
11e10 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
11e20 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
11e30 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
11e40 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
11e50 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
11e60 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
11e70 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
11e80 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
11e90 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
11ea0 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
11eb0 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
11ec0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
11ed0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
11ee0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
11ef0 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
11f00 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11f20 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
11f30 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
11f40 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
11f50 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
11f60 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
11f70 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
11f80 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
11f90 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
11fa0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
11fb0 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
11fc0 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
11fd0 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
11fe0 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
11ff0 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
12000 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
12010 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
12020 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
12030 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
12040 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
12050 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
12060 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
12070 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
12080 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
12090 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
120a0 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45  LITE_SO_UNDEFINE
120b0 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20  D -1 /* No sort 
120c0 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20  order specified 
120d0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e  */../*.** Column
120e0 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e   affinity types.
120f0 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65  .**.** These use
12100 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e  d to have mnemon
12110 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27  ic name like 'i'
12120 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
12130 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27  INTEGER and.** '
12140 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  t' for SQLITE_AF
12150 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20  F_TEXT.  But we 
12160 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c  can save a littl
12170 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72  e space and impr
12180 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64  ove.** the speed
12190 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d   a little by num
121a0 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bering the value
121b0 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e  s consecutively.
121c0 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
121d0 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
121e0 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
121f0 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68  in with 'A'.  Th
12200 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
12210 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
12220 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
12230 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
12240 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
12250 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
12260 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
12270 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
12280 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
12290 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
122a0 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
122b0 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
122c0 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
122d0 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
122e0 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
122f0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64  comparison.  And
12300 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69   the BLOB type i
12310 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66  s first..*/.#def
12320 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ine SQLITE_AFF_N
12330 4f 4e 45 20 20 20 20 20 30 78 34 30 20 20 2f 2a  ONE     0x40  /*
12340 20 27 40 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20   '@' */.#define 
12350 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20  SQLITE_AFF_BLOB 
12360 20 20 20 20 30 78 34 31 20 20 2f 2a 20 27 41 27      0x41  /* 'A'
12370 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
12380 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20  TE_AFF_TEXT     
12390 30 78 34 32 20 20 2f 2a 20 27 42 27 20 2a 2f 0a  0x42  /* 'B' */.
123a0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
123b0 46 46 5f 4e 55 4d 45 52 49 43 20 20 30 78 34 33  FF_NUMERIC  0x43
123c0 20 20 2f 2a 20 27 43 27 20 2a 2f 0a 23 64 65 66    /* 'C' */.#def
123d0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  ine SQLITE_AFF_I
123e0 4e 54 45 47 45 52 20 20 30 78 34 34 20 20 2f 2a  NTEGER  0x44  /*
123f0 20 27 44 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20   'D' */.#define 
12400 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
12410 20 20 20 20 30 78 34 35 20 20 2f 2a 20 27 45 27      0x45  /* 'E'
12420 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c   */..#define sql
12430 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66  ite3IsNumericAff
12440 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d  inity(X)  ((X)>=
12450 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
12460 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  IC)../*.** The S
12470 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76  QLITE_AFF_MASK v
12480 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20  alues masks off 
12490 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  the significant 
124a0 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66  bits of an.** af
124b0 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f  finity value..*/
124c0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
124d0 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
124e0 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
124f0 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
12500 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
12510 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
12520 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
12530 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
12540 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
12550 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
12560 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
12570 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
12580 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
12590 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
125a0 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
125b0 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
125c0 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
125d0 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
125e0 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
125f0 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
12600 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
12610 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
12620 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
12630 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
12640 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
12650 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20  QLITE_KEEPNULL  
12660 20 20 20 30 78 30 38 20 20 2f 2a 20 55 73 65 64     0x08  /* Used
12670 20 62 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72   by vector == or
12680 20 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   <> */.#define S
12690 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
126a0 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
126b0 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
126c0 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
126d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
126e0 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
126f0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
12700 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
12710 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
12720 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
12730 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
12740 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
12750 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12760 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
12770 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
12780 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
12790 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
127a0 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
127b0 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
127c0 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
127d0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
127e0 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
127f0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
12800 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
12810 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
12820 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68   shared, then th
12830 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61  ere is one insta
12840 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73  nce of this.** s
12850 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63  tructure for eac
12860 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
12870 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29  ction (sqlite3*)
12880 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73   that uses the s
12890 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e  hared.** schema.
128a0 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
128b0 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
128c0 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72  onnection requir
128d0 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75  es its own uniqu
128e0 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  e.** instance of
128f0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
12900 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74  b* handle used t
12910 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
12920 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d  tual table.** im
12930 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
12940 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
12950 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
12960 68 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a  hared between.**
12970 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12980 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
12990 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
129a0 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
129b0 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  ase.** schema is
129c0 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20   shared, as the 
129d0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
129e0 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20  ften stores the 
129f0 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
12a00 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61  ection handle pa
12a10 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74  ssed to it via t
12a20 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72  he xConnect() or
12a30 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f   xCreate() metho
12a40 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74  d.** during init
12a50 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72  ialization inter
12a60 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61  nally. This data
12a70 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12a80 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68  handle may.** th
12a90 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68  en be used by th
12aa0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
12ab0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
12ac0 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61  o access real ta
12ad0 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74  bles.** within t
12ae0 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20  he database. So 
12af0 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72  that they appear
12b00 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
12b10 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73  callers.** trans
12b20 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
12b30 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
12b40 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
12b50 61 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ame database.** 
12b60 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68  connection as th
12b70 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75  at used to execu
12b80 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e  te SQL operation
12b90 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s on the virtual
12ba0 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
12bb0 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  l VTable objects
12bc0 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
12bd0 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62   to a single tab
12be0 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a  le in a shared.*
12bf0 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
12c00 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  a are initially 
12c10 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
12c20 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20  ed-list pointed 
12c30 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62  to by.** the Tab
12c40 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65  le.pVTable membe
12c50 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68  r variable of th
12c60 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
12c70 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a  Table object..**
12c80 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33   When an sqlite3
12c90 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61  _prepare() opera
12ca0 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64  tion is required
12cb0 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
12cc0 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c  irtual.** table,
12cd0 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65   it searches the
12ce0 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54   list for the VT
12cf0 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73  able that corres
12d00 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20  ponds to the.** 
12d10 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
12d20 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72  ion doing the pr
12d30 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f  eparing so as to
12d40 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74   use the correct
12d50 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62  .** sqlite3_vtab
12d60 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20  * handle in the 
12d70 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a  compiled query..
12d80 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e  **.** When an in
12d90 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62  -memory Table ob
12da0 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20  ject is deleted 
12db0 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65  (for example whe
12dc0 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  n the.** schema 
12dd0 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65  is being reloade
12de0 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f  d for some reaso
12df0 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f  n), the VTable o
12e00 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a  bjects are not.*
12e10 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
12e20 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
12e30 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
12e40 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a  xDisconnect()ed.
12e50 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
12e60 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72  Instead, they ar
12e70 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  e moved from the
12e80 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c   Table.pVTable l
12e90 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65  ist to.** anothe
12ea0 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  r linked list he
12eb0 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  aded by the sqli
12ec0 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20  te3.pDisconnect 
12ed0 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a  member of the.**
12ee0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
12ef0 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
12f00 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20  . They are then 
12f10 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e  deleted/xDisconn
12f20 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69  ected.** next ti
12f30 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69  me a statement i
12f40 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67  s prepared using
12f50 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20   said sqlite3*. 
12f60 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20  This is done.** 
12f70 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63  to avoid deadloc
12f80 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69  k issues involvi
12f90 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69  ng multiple sqli
12fa0 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65  te3.mutex mutexe
12fb0 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63  s..** Refer to c
12fc0 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75  omments above fu
12fd0 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74  nction sqlite3Vt
12fe0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66  abUnlockList() f
12ff0 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61  or an.** explana
13000 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69  tion as to why i
13010 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64  t is safe to add
13020 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20   an entry to an 
13030 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
13040 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68  ect.** list with
13050 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  out holding the 
13060 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
13070 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
13080 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  x..**.** The mem
13090 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  ory for objects 
130a0 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
130b0 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64  always allocated
130c0 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62   by.** sqlite3Db
130d0 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20  Malloc(), using 
130e0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  the connection h
130f0 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  andle stored in 
13100 56 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20  VTable.db as.** 
13110 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
13120 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54  nt..*/.struct VT
13130 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  able {.  sqlite3
13140 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
13150 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63     /* Database c
13160 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69  onnection associ
13170 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74  ated with this t
13180 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65  able */.  Module
13190 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20   *pMod;         
131a0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
131b0 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  o module impleme
131c0 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  ntation */.  sql
131d0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
131e0 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  ;      /* Pointe
131f0 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e  r to vtab instan
13200 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ce */.  int nRef
13210 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13220 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
13230 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
13240 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75  structure */.  u
13250 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20  8 bConstraint;  
13260 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
13270 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   if constraints 
13280 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f  are supported */
13290 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
132a0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
132b0 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56  Depth of the SAV
132c0 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a  EPOINT stack */.
132d0 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b    VTable *pNext;
132e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
132f0 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69  ext in linked li
13300 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  st (see above) *
13310 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
13320 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20  schema for each 
13330 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69  SQL table and vi
13340 65 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ew is represente
13350 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62  d in memory.** b
13360 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
13370 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
13380 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
13390 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68  uct Table {.  ch
133a0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
133b0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
133c0 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
133d0 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f  */.  Column *aCo
133e0 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66  l;        /* Inf
133f0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
13400 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
13410 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
13420 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
13430 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74  SQL indexes on t
13440 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  his table. */.  
13450 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
13460 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72       /* NULL for
13470 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73   tables.  Points
13480 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69   to definition i
13490 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46  f a view. */.  F
134a0 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20  Key *pFKey;     
134b0 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69      /* Linked li
134c0 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67  st of all foreig
134d0 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74  n keys in this t
134e0 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  able */.  char *
134f0 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f  zColAff;       /
13500 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
13510 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
13520 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
13530 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
13540 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
13550 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
13560 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
13570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
13580 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73  ... also used as
13590 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73   column name lis
135a0 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20  t in a VIEW */. 
135b0 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
135c0 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
135d0 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69  ree page for thi
135e0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32  s table */.  u32
135f0 20 6e 54 61 62 52 65 66 3b 20 20 20 20 20 20 20   nTabRef;       
13600 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
13610 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
13620 54 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 74  Table */.  u32 t
13630 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
13640 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20  /* Mask of TF_* 
13650 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36 20  values */.  i16 
13660 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20  iPKey;          
13670 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74   /* If not negat
13680 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50  ive, use aCol[iP
13690 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69  Key] as the rowi
136a0 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  d */.  i16 nCol;
136b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
136c0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
136d0 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
136e0 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c  /.  LogEst nRowL
136f0 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69  ogEst;   /* Esti
13700 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61  mated rows in ta
13710 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74  ble - from sqlit
13720 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f  e_stat1 table */
13730 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52  .  LogEst szTabR
13740 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  ow;     /* Estim
13750 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63  ated size of eac
13760 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62  h table row in b
13770 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ytes */.#ifdef S
13780 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53  QLITE_ENABLE_COS
13790 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63  TMULT.  LogEst c
137a0 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20  ostMult;     /* 
137b0 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20  Cost multiplier 
137c0 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74  for using this t
137d0 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  able */.#endif. 
137e0 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
137f0 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
13800 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
13810 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
13820 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
13830 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
13840 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
13850 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
13860 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
13870 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
13880 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
13890 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
138a0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
138b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
138c0 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
138d0 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
138e0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
138f0 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
13900 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
13910 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d  uleArg;  /* 0: m
13920 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20  odule 1: schema 
13930 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e  2: vtab name 3..
13940 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61  .: args */.  VTa
13950 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
13960 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
13970 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
13980 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
13990 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
139a0 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
139b0 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
139c0 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
139d0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
139e0 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
139f0 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
13a00 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
13a10 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
13a20 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
13a30 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
13a40 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
13a50 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
13a60 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
13a70 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64  **.** TF_OOOHidd
13a80 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61  en applies to ta
13a90 62 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68 61  bles or view tha
13aa0 74 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f  t have hidden co
13ab0 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a  lumns that are.*
13ac0 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f  * followed by no
13ad0 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  n-hidden columns
13ae0 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52  .  Example:  "CR
13af0 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
13b00 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74  LE x USING.** vt
13b10 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29  ab1(a HIDDEN, b)
13b20 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69  ;".  Since "b" i
13b30 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63  s a non-hidden c
13b40 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73  olumn but "a" is
13b50 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20   hidden,.** the 
13b60 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74  TF_OOOHidden att
13b70 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70  ribute would app
13b80 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e  ly in this case.
13b90 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65    Such tables re
13ba0 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c  quire.** special
13bb0 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67   handling during
13bc0 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69   INSERT processi
13bd0 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ng..*/.#define T
13be0 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
13bf0 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 52    0x0001    /* R
13c00 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20  ead-only system 
13c10 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
13c20 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20   TF_Ephemeral   
13c30 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
13c40 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61   An ephemeral ta
13c50 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
13c60 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
13c70 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
13c80 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61  able has a prima
13c90 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
13ca0 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65  e TF_Autoincreme
13cb0 6e 74 20 20 20 30 78 30 30 30 38 20 20 20 20 2f  nt   0x0008    /
13cc0 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72  * Integer primar
13cd0 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63  y key is autoinc
13ce0 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  rement */.#defin
13cf0 65 20 54 46 5f 48 61 73 53 74 61 74 31 20 20 20  e TF_HasStat1   
13d00 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
13d10 2a 20 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65 74  * nRowLogEst set
13d20 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
13d30 74 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  t1 */.#define TF
13d40 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20  _WithoutRowid   
13d50 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 4e 6f   0x0020    /* No
13d60 20 72 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59   rowid.  PRIMARY
13d70 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20   KEY is the key 
13d80 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f  */.#define TF_No
13d90 56 69 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78  VisibleRowid  0x
13da0 30 30 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73  0040    /* No us
13db0 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69  er-visible "rowi
13dc0 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  d" column */.#de
13dd0 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65  fine TF_OOOHidde
13de0 6e 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20  n       0x0080  
13df0 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65    /* Out-of-Orde
13e00 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  r hidden columns
13e10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53   */.#define TF_S
13e20 74 61 74 73 55 73 65 64 20 20 20 20 20 20 20 30  tatsUsed       0
13e30 78 30 31 30 30 20 20 20 20 2f 2a 20 51 75 65 72  x0100    /* Quer
13e40 79 20 70 6c 61 6e 6e 65 72 20 64 65 63 69 73 69  y planner decisi
13e50 6f 6e 73 20 61 66 66 65 63 74 65 64 20 62 79 0a  ons affected by.
13e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e80 20 20 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61 69       ** Index.ai
13e90 52 6f 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c 75  RowLogEst[] valu
13ea0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  es */.#define TF
13eb0 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20 20  _HasNotNull     
13ec0 20 30 78 30 32 30 30 20 20 20 20 2f 2a 20 43 6f   0x0200    /* Co
13ed0 6e 74 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20  ntains NOT NULL 
13ee0 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
13ef0 64 65 66 69 6e 65 20 54 46 5f 53 68 61 64 6f 77  define TF_Shadow
13f00 20 20 20 20 20 20 20 20 20 20 30 78 30 34 30 30            0x0400
13f10 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
13f20 61 20 73 68 61 64 6f 77 20 74 61 62 6c 65 20 2a  a shadow table *
13f30 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  /../*.** Test to
13f40 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20   see whether or 
13f50 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61  not a table is a
13f60 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
13f70 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65   This is.** done
13f80 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74   as a macro so t
13f90 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f  hat it will be o
13fa0 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65  ptimized out whe
13fb0 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  n virtual.** tab
13fc0 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d  le support is om
13fd0 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
13fe0 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  uild..*/.#ifndef
13ff0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
14000 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
14010 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
14020 20 20 20 20 20 20 28 28 58 29 2d 3e 6e 4d 6f 64        ((X)->nMod
14030 75 6c 65 41 72 67 29 0a 23 65 6c 73 65 0a 23 20  uleArg).#else.# 
14040 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
14050 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65 6e 64  l(X)      0.#end
14060 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
14070 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
14080 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69 64   a column is hid
14090 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72 79  den.  IsOrdinary
140a0 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a  HiddenColumn().*
140b0 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  * only works for
140c0 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61 62   non-virtual tab
140d0 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74 61  les (ordinary ta
140e0 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29 20  bles and views) 
140f0 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  and is.** always
14100 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53 51   false unless SQ
14110 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
14120 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64 65  EN_COLUMNS is de
14130 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20 49  fined.  The.** I
14140 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 20  sHiddenColumn() 
14150 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61 6c  macro is general
14160 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66   purpose..*/.#if
14170 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
14180 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
14190 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e 65  LUMNS).#  define
141a0 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
141b0 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29  X)         (((X)
141c0 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
141d0 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
141e0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
141f0 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
14200 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46  n(X) (((X)->colF
14210 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
14220 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69 66  IDDEN)!=0).#elif
14230 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
14240 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
14250 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  LE).#  define Is
14260 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
14270 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63          (((X)->c
14280 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
14290 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20  G_HIDDEN)!=0).# 
142a0 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61   define IsOrdina
142b0 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  ryHiddenColumn(X
142c0 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ) 0.#else.#  def
142d0 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
142e0 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 30 0a  mn(X)         0.
142f0 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
14300 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
14310 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f  (X) 0.#endif.../
14320 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65  * Does the table
14330 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f   have a rowid */
14340 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69  .#define HasRowi
14350 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e  d(X)     (((X)->
14360 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69  tabFlags & TF_Wi
14370 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a  thoutRowid)==0).
14380 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52  #define VisibleR
14390 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74  owid(X) (((X)->t
143a0 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56  abFlags & TF_NoV
143b0 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29  isibleRowid)==0)
143c0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72  ../*.** Each for
143d0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
143e0 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  int is an instan
143f0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
14400 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
14410 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b  *.** A foreign k
14420 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64  ey is associated
14430 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73   with two tables
14440 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61  .  The "from" ta
14450 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61  ble is.** the ta
14460 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
14470 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  s the REFERENCES
14480 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65   clause that cre
14490 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e  ates the foreign
144a0 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74  .** key.  The "t
144b0 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20  o" table is the 
144c0 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61  table that is na
144d0 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52  med in the REFER
144e0 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a  ENCES clause..**
144f0 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65   Consider this e
14500 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  xample:.**.**   
14510 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65    CREATE TABLE e
14520 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49  x1(.**       a I
14530 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
14540 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49  EY,.**       b I
14550 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e  NTEGER CONSTRAIN
14560 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53  T fk1 REFERENCES
14570 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29   ex2(x).**     )
14580 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65  ;.**.** For fore
14590 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74  ign key "fk1", t
145a0 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
145b0 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74   "ex1" and the t
145c0 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22  o-table is "ex2"
145d0 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20  ..** Equivalent 
145e0 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  names:.**.**    
145f0 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63   from-table == c
14600 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20  hild-table.**   
14610 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20      to-table == 
14620 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a  parent-table.**.
14630 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
14640 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
14650 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
14660 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
14670 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
14680 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
14690 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
146a0 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
146b0 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
146c0 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
146d0 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
146e0 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
146f0 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
14700 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
14710 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74  ..**.** The list
14720 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20   of all parents 
14730 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20  for child Table 
14740 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70  X is held at X.p
14750 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69  FKey..**.** A li
14760 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72  st of all childr
14770 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e  en for a table n
14780 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69  amed Z (which mi
14790 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69  ght not even exi
147a0 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69  st).** is held i
147b0 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73  n Schema.fkeyHas
147c0 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65  h with a hash ke
147d0 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63  y of Z..*/.struc
147e0 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65  t FKey {.  Table
147f0 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20   *pFrom;     /* 
14800 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
14810 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
14820 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69  clause (aka: Chi
14830 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ld) */.  FKey *p
14840 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65  NextFrom;  /* Ne
14850 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65  xt FKey with the
14860 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20   same in pFrom. 
14870 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70  Next parent of p
14880 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  From */.  char *
14890 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  zTo;        /* N
148a0 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61  ame of table tha
148b0 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73  t the key points
148c0 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74   to (aka: Parent
148d0 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
148e0 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74  xtTo;    /* Next
148f0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
14900 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f  To. Next child o
14910 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79  f zTo. */.  FKey
14920 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a   *pPrevTo;    /*
14930 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74   Previous with t
14940 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20  he same zTo */. 
14950 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
14960 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14970 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
14980 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20  key */.  /* EV: 
14990 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f  R-30323-21917 */
149a0 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64  .  u8 isDeferred
149b0 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  ;       /* True 
149c0 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
149d0 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
149e0 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
149f0 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
14a00 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20  ];        /* ON 
14a10 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50  DELETE and ON UP
14a20 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65  DATE actions, re
14a30 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20  spectively */.  
14a40 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67  Trigger *apTrigg
14a50 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72  er[2];/* Trigger
14a60 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20  s for aAction[] 
14a70 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  actions */.  str
14a80 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20  uct sColMap {   
14a90 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66     /* Mapping of
14aa0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
14ab0 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
14ac0 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
14ad0 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20  From;           
14ae0 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c   /* Index of col
14af0 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  umn in pFrom */.
14b00 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20      char *zCol; 
14b10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
14b20 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a  e of column in z
14b30 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65  To.  If NULL use
14b40 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
14b50 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20    } aCol[1];    
14b60 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
14b70 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66  ntry for each of
14b80 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f   nCol columns */
14b90 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74  .};../*.** SQLit
14ba0 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20  e supports many 
14bb0 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
14bc0 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73  o resolve a cons
14bd0 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  traint.** error.
14be0 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65    ROLLBACK proce
14bf0 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
14c00 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
14c10 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65  olation.** cause
14c20 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
14c30 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61  in process to fa
14c40 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63  il and for the c
14c50 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
14c60 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c  on.** to be roll
14c70 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20  ed back.  ABORT 
14c80 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
14c90 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
14ca0 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69  n process.** fai
14cb0 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72  ls and any prior
14cc0 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68   changes from th
14cd0 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e  at one operation
14ce0 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c   are backed out,
14cf0 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e  .** but the tran
14d00 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72  saction is not r
14d10 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49  olled back.  FAI
14d20 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  L processing mea
14d30 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f  ns that.** the o
14d40 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  peration in prog
14d50 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72  ress stops and r
14d60 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20  eturns an error 
14d70 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72  code.  But prior
14d80 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20  .** changes due 
14d90 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  to the same oper
14da0 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61  ation are not ba
14db0 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20  cked out and no 
14dc0 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75  rollback.** occu
14dd0 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e  rs.  IGNORE mean
14de0 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69  s that the parti
14df0 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63  cular row that c
14e00 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72  aused the constr
14e10 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73  aint.** error is
14e20 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72   not inserted or
14e30 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65   updated.  Proce
14e40 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
14e50 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20  and no error.** 
14e60 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45  is returned.  RE
14e70 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74  PLACE means that
14e80 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74   preexisting dat
14e90 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
14ea0 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51  caused.** a UNIQ
14eb0 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  UE constraint vi
14ec0 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f  olation are remo
14ed0 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ved so that the 
14ee0 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a  new insert or.**
14ef0 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63   update can proc
14f00 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  eed.  Processing
14f10 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
14f20 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72  o error is repor
14f30 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52  ted..**.** RESTR
14f40 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e  ICT, SETNULL, an
14f50 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e  d CASCADE action
14f60 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20  s apply only to 
14f70 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a  foreign keys..**
14f80 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65   RESTRICT is the
14f90 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66   same as ABORT f
14fa0 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72  or IMMEDIATE for
14fb0 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68  eign keys and th
14fc0 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c  e.** same as ROL
14fd0 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52  LBACK for DEFERR
14fe0 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c  ED keys.  SETNUL
14ff0 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  L means that the
15000 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
15010 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20  is set to NULL. 
15020 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74   CASCADE means t
15030 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20  hat a DELETE or 
15040 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a  UPDATE of the.**
15050 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
15060 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61  e row is propaga
15070 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77  ted into the row
15080 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a   that holds the.
15090 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a  ** foreign key..
150a0 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
150b0 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
150c0 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
150d0 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
150e0 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
150f0 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
15100 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
15110 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
15120 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
15130 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
15140 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
15150 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
15160 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
15170 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
15180 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
15190 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
151a0 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
151b0 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
151c0 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
151d0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
151e0 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
151f0 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
15200 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
15210 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
15220 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
15230 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
15240 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
15250 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
15260 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
15270 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
15280 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
15290 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
152a0 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
152b0 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
152c0 23 64 65 66 69 6e 65 20 4f 45 5f 55 70 64 61 74  #define OE_Updat
152d0 65 20 20 20 36 20 20 20 2f 2a 20 50 72 6f 63 65  e   6   /* Proce
152e0 73 73 20 61 73 20 61 20 44 4f 20 55 50 44 41 54  ss as a DO UPDAT
152f0 45 20 69 6e 20 61 6e 20 75 70 73 65 72 74 20 2a  E in an upsert *
15300 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73  /.#define OE_Res
15310 74 72 69 63 74 20 37 20 20 20 2f 2a 20 4f 45 5f  trict 7   /* OE_
15320 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49  Abort for IMMEDI
15330 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  ATE, OE_Rollback
15340 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f   for DEFERRED */
15350 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e  .#define OE_SetN
15360 75 6c 6c 20 20 38 20 20 20 2f 2a 20 53 65 74 20  ull  8   /* Set 
15370 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
15380 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f  value to NULL */
15390 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44  .#define OE_SetD
153a0 66 6c 74 20 20 39 20 20 20 2f 2a 20 53 65 74 20  flt  9   /* Set 
153b0 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
153c0 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66  value to its def
153d0 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ault */.#define 
153e0 4f 45 5f 43 61 73 63 61 64 65 20 20 31 30 20 20  OE_Cascade  10  
153f0 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63  /* Cascade the c
15400 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
15410 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 31  e OE_Default  11
15420 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
15430 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
15440 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
15450 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
15460 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
15470 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
15480 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
15490 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
154a0 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
154b0 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
154c0 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 0a   to control the.
154d0 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  ** comparison of
154e0 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b   the two index k
154f0 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  eys..**.** Note 
15500 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b  that aSortOrder[
15510 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61  ] and aColl[] ha
15520 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74  ve nField+1 slot
15530 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  s.  There.** are
15540 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f   nField slots fo
15550 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  r the columns of
15560 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f   an index then o
15570 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a  ne extra slot.**
15580 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61   for the rowid a
15590 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  t the end..*/.st
155a0 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
155b0 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20   u32 nRef;      
155c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
155d0 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  f references to 
155e0 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a  this KeyInfo obj
155f0 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ect */.  u8 enc;
15600 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15610 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20  Text encoding - 
15620 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  one of the SQLIT
15630 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f  E_UTF* values */
15640 0a 20 20 75 31 36 20 6e 4b 65 79 46 69 65 6c 64  .  u16 nKeyField
15650 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
15660 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20   of key columns 
15670 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
15680 20 20 75 31 36 20 6e 41 6c 6c 46 69 65 6c 64 3b    u16 nAllField;
15690 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 63        /* Total c
156a0 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75 64 69 6e  olumns, includin
156b0 67 20 6b 65 79 20 70 6c 75 73 20 6f 74 68 65 72  g key plus other
156c0 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  s */.  sqlite3 *
156d0 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
156e0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
156f0 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61  ction */.  u8 *a
15700 53 6f 72 74 46 6c 61 67 73 3b 20 20 20 20 20 2f  SortFlags;     /
15710 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72  * Sort order for
15720 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f   each column. */
15730 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c  .  CollSeq *aCol
15740 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  l[1];  /* Collat
15750 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ing sequence for
15760 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   each term of th
15770 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 23 64 65  e key */.};..#de
15780 66 69 6e 65 20 4b 45 59 49 4e 46 4f 5f 4f 52 44  fine KEYINFO_ORD
15790 45 52 5f 44 45 53 43 20 20 20 20 30 78 30 31 0a  ER_DESC    0x01.
157a0 23 64 65 66 69 6e 65 20 4b 45 59 49 4e 46 4f 5f  #define KEYINFO_
157b0 4f 52 44 45 52 5f 42 49 47 4e 55 4c 4c 20 30 78  ORDER_BIGNULL 0x
157c0 30 32 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f  02../*.** This o
157d0 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65  bject holds a re
157e0 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20 62  cord which has b
157f0 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69  een parsed out i
15800 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a  nto individual.*
15810 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68  * fields, for th
15820 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f  e purposes of do
15830 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e  ing a comparison
15840 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
15850 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
15860 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
15870 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
15880 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
15890 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
158a0 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
158b0 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
158c0 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
158d0 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
158e0 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
158f0 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
15900 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
15910 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
15920 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
15930 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
15940 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
15950 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
15960 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e  opcode..**.** An
15970 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
15980 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20  s object serves 
15990 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64  as a "key" for d
159a0 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e  oing a search on
159b0 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74  .** an index b+t
159c0 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66  ree. The goal of
159d0 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20 74   the search is t
159e0 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79  o find the entry
159f0 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73   that.** is clos
15a00 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65  ed to the key de
15a10 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73 20  scribed by this 
15a20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62  object.  This ob
15a30 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a  ject might hold.
15a40 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69 78  ** just a prefix
15a50 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68   of the key.  Th
15a60 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
15a70 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a  ds is given by.*
15a80 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  * pKeyInfo->nFie
15a90 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31  ld..**.** The r1
15aa0 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61   and r2 fields a
15ab0 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f  re the values to
15ac0 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73 20   return if this 
15ad0 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
15ae0 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74  .** or greater t
15af0 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65  han a key in the
15b00 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74 69   btree, respecti
15b10 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65  vely.  These are
15b20 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20   normally.** -1 
15b30 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69 76  and +1 respectiv
15b40 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62  ely, but might b
15b50 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31  e inverted to +1
15b60 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62   and -1 if the b
15b70 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44  -tree.** is in D
15b80 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  ESC order..**.**
15b90 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69   The key compari
15ba0 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63  son functions ac
15bb0 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65  tually return de
15bc0 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68  fault_rc when th
15bd0 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71  ey find.** an eq
15be0 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  uals comparison.
15bf0 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e    default_rc can
15c00 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31   be -1, 0, or +1
15c10 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 0a  .  If there are.
15c20 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72  ** multiple entr
15c30 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65  ies in the b-tre
15c40 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
15c50 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c  key (when only l
15c60 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65  ooking.** at the
15c70 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d   first pKeyInfo-
15c80 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20  >nFields,) then 
15c90 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
15ca0 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a  e set to -1 to.*
15cb0 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  * cause the sear
15cc0 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  ch to find the l
15cd0 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31  ast match, or +1
15ce0 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65   to cause the se
15cf0 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20  arch to.** find 
15d00 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e  the first match.
15d10 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63  .**.** The key c
15d20 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69  omparison functi
15d30 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53  ons will set eqS
15d40 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74  een to true if t
15d50 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20  hey ever.** get 
15d60 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74  and equal result
15d70 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
15d80 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
15d90 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f  to a b-tree reco
15da0 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61  rd..** When defa
15db0 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73  ult_rc!=0, the s
15dc0 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20  earch might end 
15dd0 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64  up on the record
15de0 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20   immediately.** 
15df0 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74  before the first
15e00 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69   match or immedi
15e10 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20  ately after the 
15e20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65  last match.  The
15e30 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64  .** eqSeen field
15e40 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77   will indicate w
15e50 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
15e60 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69   exact match exi
15e70 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d  sts in the.** b-
15e80 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tree..*/.struct 
15e90 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b  UnpackedRecord {
15ea0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
15eb0 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  Info;  /* Collat
15ec0 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64  ion and sort-ord
15ed0 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  er information *
15ee0 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20  /.  Mem *aMem;  
15ef0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
15f00 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
15f10 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
15f20 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
15f30 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20  in apMem[] */.  
15f40 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20  i8 default_rc;  
15f50 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
15f60 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73  n result if keys
15f70 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20   are equal */.  
15f80 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  u8 errCode;     
15f90 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74      /* Error det
15fa0 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64  ected by xRecord
15fb0 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54  Compare (CORRUPT
15fc0 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20   or NOMEM) */.  
15fd0 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20  i8 r1;          
15fe0 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
15ff0 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c  return if (lhs <
16000 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32   rhs) */.  i8 r2
16010 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
16020 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
16030 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
16040 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b   */.  u8 eqSeen;
16050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
16060 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79  e if an equality
16070 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20   comparison has 
16080 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a  been seen */.};.
16090 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
160a0 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
160b0 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
160c0 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
160d0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
160e0 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
160f0 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
16100 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
16110 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
16120 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
16130 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
16140 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
16150 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
16160 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
16170 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
16180 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
16190 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
161a0 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
161b0 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
161c0 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
161d0 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
161e0 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
161f0 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
16200 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
16210 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
16220 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
16230 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
16240 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
16250 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
16260 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
16270 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
16280 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
16290 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
162a0 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
162b0 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
162c0 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
162d0 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
162e0 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
162f0 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
16300 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f   the.** first co
16310 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
16320 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
16330 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
16340 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
16350 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
16360 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
16370 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
16380 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
16390 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
163a0 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
163b0 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
163c0 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
163d0 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
163e0 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
163f0 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
16400 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
16410 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
16420 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
16430 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
16440 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
16450 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
16460 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
16470 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
16480 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
16490 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
164a0 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
164b0 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
164c0 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
164d0 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c  resolution.** al
164e0 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f  gorithm to emplo
164f0 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74  y whenever an at
16500 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
16510 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e   insert a non-un
16520 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e  ique.** element.
16530 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72  .**.** While par
16540 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41  sing a CREATE TA
16550 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e  BLE or CREATE IN
16560 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  DEX statement in
16570 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e   order to.** gen
16580 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20  erate VDBE code 
16590 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70  (as opposed to p
165a0 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20  arsing one read 
165b0 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d  from an sqlite_m
165c0 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61  aster.** table a
165d0 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e  s part of parsin
165e0 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61  g an existing da
165f0 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20  tabase schema), 
16600 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e  transient instan
16610 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  ces.** of this s
16620 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20  tructure may be 
16630 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73  created. In this
16640 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e   case the Index.
16650 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73  tnum variable is
16660 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
16670 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  e the address of
16680 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74   a VDBE instruct
16690 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62  ion, not a datab
166a0 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  ase page.** numb
166b0 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20  er (it cannot - 
166c0 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67  the database pag
166d0 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74  e is not allocat
166e0 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42  ed until the VDB
166f0 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20  E.** program is 
16700 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63  executed). See c
16710 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52  onvertToWithoutR
16720 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20  owidTable() for 
16730 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75  details..*/.stru
16740 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
16750 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
16760 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
16770 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
16780 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   i16 *aiColumn; 
16790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
167a0 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
167b0 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
167c0 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
167d0 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c    LogEst *aiRowL
167e0 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72  ogEst;     /* Fr
167f0 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e  om ANALYZE: Est.
16800 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62   rows selected b
16810 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  y each column */
16820 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65  .  Table *pTable
16830 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
16840 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
16850 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
16860 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
16870 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69           /* Stri
16880 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
16890 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
168a0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
168b0 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ex *pNext;      
168c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
168d0 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  t index associat
168e0 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ed with the same
168f0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65   table */.  Sche
16900 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
16910 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
16920 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
16930 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
16940 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
16950 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63     /* for each c
16960 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53  olumn: True==DES
16970 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f  C, False==ASC */
16980 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  .  const char **
16990 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41  azColl;     /* A
169a0 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
169b0 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
169c0 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
169d0 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68  Expr *pPartIdxWh
169e0 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52  ere;     /* WHER
169f0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
16a00 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a  tial indices */.
16a10 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c    ExprList *aCol
16a20 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f  Expr;      /* Co
16a30 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73  lumn expressions
16a40 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16a60 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
16a70 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
16a80 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
16a90 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
16aa0 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
16ab0 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
16ac0 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
16ad0 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
16ae0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16af0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
16b00 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
16b10 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
16b20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16b30 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
16b40 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
16b50 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
16b60 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
16b70 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
16b80 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
16b90 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
16ba0 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
16bb0 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20  d idxType:2;    
16bc0 20 20 2f 2a 20 30 3a 4e 6f 72 6d 61 6c 20 31 3a    /* 0:Normal 1:
16bd0 55 4e 49 51 55 45 2c 20 32 3a 50 52 49 4d 41 52  UNIQUE, 2:PRIMAR
16be0 59 20 4b 45 59 2c 20 33 3a 49 50 4b 20 2a 2f 0a  Y KEY, 3:IPK */.
16bf0 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
16c00 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
16c10 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
16c20 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
16c30 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
16c40 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
16c50 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
16c60 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
16c70 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
16c80 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
16c90 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
16ca0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
16cb0 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
16cc0 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
16cd0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
16ce0 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
16cf0 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
16d00 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
16d10 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ex */.  unsigned
16d20 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20   noSkipScan:1;  
16d30 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74   /* Do not try t
16d40 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20  o use skip-scan 
16d50 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73  if true */.  uns
16d60 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31  igned hasStat1:1
16d70 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f  ;     /* aiRowLo
16d80 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65  gEst values come
16d90 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
16da0 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  t1 */.  unsigned
16db0 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20 20   bNoQuery:1;    
16dc0 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 74   /* Do not use t
16dd0 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70 74  his index to opt
16de0 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a 2f  imize queries */
16df0 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 41 73 63  .  unsigned bAsc
16e00 4b 65 79 42 75 67 3a 31 3b 20 20 20 2f 2a 20 54  KeyBug:1;   /* T
16e10 72 75 65 20 69 66 20 74 68 65 20 62 62 61 37 62  rue if the bba7b
16e20 36 39 66 39 38 34 39 62 35 62 66 20 62 75 67 20  69f9849b5bf bug 
16e30 61 70 70 6c 69 65 73 20 2a 2f 0a 23 69 66 64 65  applies */.#ifde
16e40 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
16e50 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d  STAT4.  int nSam
16e60 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ple;            
16e70 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c   /* Number of el
16e80 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c  ements in aSampl
16e90 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  e[] */.  int nSa
16ea0 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20  mpleCol;        
16eb0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64    /* Size of Ind
16ec0 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20  exSample.anEq[] 
16ed0 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74  and so on */.  t
16ee0 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20  Rowcnt *aAvgEq; 
16ef0 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
16f00 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f  ge nEq values fo
16f10 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53  r keys not in aS
16f20 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78  ample */.  Index
16f30 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
16f40 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f      /* Samples o
16f50 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
16f60 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  key */.  tRowcnt
16f70 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20   *aiRowEst;     
16f80 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
16f90 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20  hmic stat1 data 
16fa0 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a  for this index *
16fb0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77  /.  tRowcnt nRow
16fc0 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20  Est0;        /* 
16fd0 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
16fe0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
16ff0 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23  n the index */.#
17000 65 6e 64 69 66 0a 20 20 42 69 74 6d 61 73 6b 20  endif.  Bitmask 
17010 63 6f 6c 4e 6f 74 49 64 78 65 64 3b 20 20 20 20  colNotIdxed;    
17020 20 2f 2a 20 30 20 66 6f 72 20 75 6e 69 6e 64 65   /* 0 for uninde
17030 78 65 64 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70  xed columns in p
17040 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  Tab */.};../*.**
17050 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
17060 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70  for Index.idxTyp
17070 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e.*/.#define SQL
17080 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44  ITE_IDXTYPE_APPD
17090 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43  EF      0   /* C
170a0 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45  reated using CRE
170b0 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
170c0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
170d0 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20  YPE_UNIQUE      
170e0 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1   /* Implement
170f0 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  s a UNIQUE const
17100 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
17110 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
17120 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20  PRIMARYKEY  2   
17130 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52  /* Is the PRIMAR
17140 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61  Y KEY for the ta
17150 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
17160 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 49 50  QLITE_IDXTYPE_IP
17170 4b 20 20 20 20 20 20 20 20 20 33 20 20 20 2f 2a  K         3   /*
17180 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
17190 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 0a 2f   KEY index */../
171a0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
171b0 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52   index X is a PR
171c0 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20  IMARY KEY index 
171d0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69  */.#define IsPri
171e0 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20  maryKeyIndex(X) 
171f0 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d   ((X)->idxType==
17200 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
17210 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52  RIMARYKEY)../* R
17220 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
17230 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55  dex X is a UNIQU
17240 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  E index */.#defi
17250 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  ne IsUniqueIndex
17260 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f  (X)      ((X)->o
17270 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29  nError!=OE_None)
17280 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61  ../* The Index.a
17290 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73  iColumn[] values
172a0 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f   are normally po
172b0 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20  sitive integer. 
172c0 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72   But.** there ar
172d0 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20  e some negative 
172e0 76 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65  values that have
172f0 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
17300 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  :.*/.#define XN_
17310 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20  ROWID     (-1)  
17320 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
17330 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69  lumn is the rowi
17340 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  d */.#define XN_
17350 45 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20  EXPR      (-2)  
17360 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
17370 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
17380 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ssion */../*.** 
17390 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72  Each sample stor
173a0 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
173b0 5f 73 74 61 74 34 20 74 61 62 6c 65 20 69 73 20  _stat4 table is 
173c0 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
173d0 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61  emory.** using a
173e0 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
173f0 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f  is type.  See do
17400 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74  cumentation at t
17410 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a  he top of the.**
17420 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63   analyze.c sourc
17430 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74  e file for addit
17440 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
17450 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  n..*/.struct Ind
17460 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69  exSample {.  voi
17470 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f  d *p;          /
17480 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d  * Pointer to sam
17490 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20  pled record */. 
174a0 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
174b0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65     /* Size of re
174c0 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f  cord in bytes */
174d0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71  .  tRowcnt *anEq
174e0 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
174f0 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
17500 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
17510 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
17520 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b    tRowcnt *anLt;
17530 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
17540 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
17550 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
17560 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
17570 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c  .  tRowcnt *anDL
17580 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  t;   /* Est. num
17590 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
175a0 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
175b0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
175c0 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
175d0 20 76 61 6c 75 65 73 20 74 6f 20 75 73 65 20 77   values to use w
175e0 69 74 68 69 6e 20 74 68 65 20 66 6c 61 67 73 20  ithin the flags 
175f0 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
17600 74 65 33 47 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a  te3GetToken()..*
17610 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
17620 5f 54 4f 4b 45 4e 5f 51 55 4f 54 45 44 20 20 20  _TOKEN_QUOTED   
17630 20 30 78 31 20 2f 2a 20 54 6f 6b 65 6e 20 69 73   0x1 /* Token is
17640 20 61 20 71 75 6f 74 65 64 20 69 64 65 6e 74 69   a quoted identi
17650 66 69 65 72 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  fier. */.#define
17660 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45   SQLITE_TOKEN_KE
17670 59 57 4f 52 44 20 20 20 30 78 32 20 2f 2a 20 54  YWORD   0x2 /* T
17680 6f 6b 65 6e 20 69 73 20 61 20 6b 65 79 77 6f 72  oken is a keywor
17690 64 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  d. */../*.** Eac
176a0 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f  h token coming o
176b0 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20  ut of the lexer 
176c0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
176d0 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
176e0 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65  ure.  Tokens are
176f0 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61   also used as pa
17700 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  rt of an express
17710 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  ion..**.** The m
17720 65 6d 6f 72 79 20 74 68 61 74 20 22 7a 22 20 70  emory that "z" p
17730 6f 69 6e 74 73 20 74 6f 20 69 73 20 6f 77 6e 65  oints to is owne
17740 64 20 62 79 20 6f 74 68 65 72 20 6f 62 6a 65 63  d by other objec
17750 74 73 2e 20 20 54 61 6b 65 20 63 61 72 65 0a 2a  ts.  Take care.*
17760 2a 20 74 68 61 74 20 74 68 65 20 6f 77 6e 65 72  * that the owner
17770 20 6f 66 20 74 68 65 20 22 7a 22 20 73 74 72 69   of the "z" stri
17780 6e 67 20 64 6f 65 73 20 6e 6f 74 20 64 65 61 6c  ng does not deal
17790 6c 6f 63 61 74 65 20 74 68 65 20 73 74 72 69 6e  locate the strin
177a0 67 20 62 65 66 6f 72 65 0a 2a 2a 20 74 68 65 20  g before.** the 
177b0 54 6f 6b 65 6e 20 67 6f 65 73 20 6f 75 74 20 6f  Token goes out o
177c0 66 20 73 63 6f 70 65 21 20 20 56 65 72 79 20 6f  f scope!  Very o
177d0 66 74 65 6e 2c 20 74 68 65 20 22 7a 22 20 70 6f  ften, the "z" po
177e0 69 6e 74 73 20 74 6f 20 73 6f 6d 65 20 70 6c 61  ints to some pla
177f0 63 65 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 69 64  ce.** in the mid
17800 64 6c 65 20 6f 66 20 74 68 65 20 50 61 72 73 65  dle of the Parse
17810 2e 7a 53 71 6c 20 74 65 78 74 2e 20 20 42 75 74  .zSql text.  But
17820 20 69 74 20 6d 69 67 68 74 20 61 6c 73 6f 20 70   it might also p
17830 6f 69 6e 74 20 74 6f 20 61 0a 2a 2a 20 73 74 61  oint to a.** sta
17840 74 69 63 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73  tic string..*/.s
17850 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20  truct Token {.  
17860 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20  const char *z;  
17870 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
17880 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55  e token.  Not NU
17890 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a  LL-terminated! *
178a0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
178b0 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72   n;    /* Number
178c0 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
178d0 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a  n this token */.
178e0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
178f0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
17900 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
17910 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
17920 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
17930 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45  ** code for a SE
17940 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69  LECT that contai
17950 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
17960 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  ctions..**.** If
17970 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47   Expr.op==TK_AGG
17980 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47  _COLUMN or TK_AG
17990 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20  G_FUNCTION then 
179a0 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73  Expr.pAggInfo is
179b0 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
179c0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
179d0 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75    The Expr.iColu
179e0 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  mn field is the 
179f0 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49  index in.** AggI
17a00 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67  nfo.aCol[] or Ag
17a10 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66  gInfo.aFunc[] of
17a20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
17a30 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
17a40 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74  ** code for that
17a50 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67   node..**.** Agg
17a60 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e  Info.pGroupBy an
17a70 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e  d AggInfo.aFunc.
17a80 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66  pExpr point to f
17a90 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65  ields within the
17aa0 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c  .** original Sel
17ab0 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68  ect structure th
17ac0 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
17ad0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
17ae0 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65  t.  These.** fie
17af0 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  lds do not need 
17b00 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e  to be freed when
17b10 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
17b20 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74  e AggInfo struct
17b30 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ure..*/.struct A
17b40 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69  ggInfo {.  u8 di
17b50 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20  rectMode;       
17b60 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e     /* Direct ren
17b70 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e  dering mode mean
17b80 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65  s take data dire
17b90 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  ctly.           
17ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17bb0 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61  * from source ta
17bc0 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e  bles rather than
17bd0 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f   from accumulato
17be0 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f  rs */.  u8 useSo
17bf0 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
17c00 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64  /* In direct mod
17c10 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65  e, reference the
17c20 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72   sorting index r
17c30 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20  ather.          
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c50 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72  ** than the sour
17c60 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  ce table */.  in
17c70 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  t sortingIdx;   
17c80 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
17c90 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
17ca0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
17cb0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50   int sortingIdxP
17cc0 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73  Tab;     /* Curs
17cd0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65  or number of pse
17ce0 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69  udo-table */.  i
17cf0 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d  nt nSortingColum
17d00 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  n;     /* Number
17d10 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
17d20 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
17d30 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c   */.  int mnReg,
17d40 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a   mxReg;       /*
17d50 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74   Range of regist
17d60 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ers allocated fo
17d70 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63  r aCol and aFunc
17d80 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
17d90 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a  pGroupBy;     /*
17da0 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c   The group by cl
17db0 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  ause */.  struct
17dc0 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20   AggInfo_col {  
17dd0 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f    /* For each co
17de0 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75  lumn used in sou
17df0 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20  rce tables */.  
17e00 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
17e10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f             /* So
17e20 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
17e30 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
17e40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
17e50 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
17e60 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
17e70 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75  */.    int iColu
17e80 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
17e90 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
17ea0 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72   within the sour
17eb0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
17ec0 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d  int iSorterColum
17ed0 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  n;       /* Colu
17ee0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  mn number in the
17ef0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
17f00 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17f20 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
17f30 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
17f40 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
17f50 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
17f60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
17f70 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65  e original expre
17f80 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43  ssion */.  } *aC
17f90 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d  ol;.  int nColum
17fa0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
17fb0 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20   Number of used 
17fc0 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b  entries in aCol[
17fd0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75  ] */.  int nAccu
17fe0 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f  mulator;       /
17ff0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
18000 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68  mns that show th
18010 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74  rough to the out
18020 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20  put..           
18030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18040 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c  * Additional col
18050 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e  umns are used on
18060 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73  ly as parameters
18070 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20   to.            
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18090 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
180a0 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
180b0 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20   AggInfo_func { 
180c0 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67    /* For each ag
180d0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
180e0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
180f0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
18100 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65   /* Expression e
18110 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63  ncoding the func
18120 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63  tion */.    Func
18130 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
18140 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72       /* The aggr
18150 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69  egate function i
18160 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
18170 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18190 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
181a0 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
181b0 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
181c0 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20   int iDistinct; 
181d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68            /* Eph
181e0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65  emeral table use
181f0 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53  d to enforce DIS
18200 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46  TINCT */.  } *aF
18210 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63  unc;.  int nFunc
18220 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
18230 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
18240 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a  ies in aFunc[] *
18250 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
18260 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69  datatype ynVar i
18270 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67  s a signed integ
18280 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69  er, either 16-bi
18290 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20  t or 32-bit..** 
182a0 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36  Usually it is 16
182b0 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53  -bits.  But if S
182c0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
182d0 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65  LE_NUMBER is gre
182e0 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37  ater.** than 327
182f0 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61  67 we have to ma
18300 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31  ke it 32-bit.  1
18310 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72  6-bit is preferr
18320 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74  ed because.** it
18330 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72   uses less memor
18340 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62  y in the Expr ob
18350 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61  ject, which is a
18360 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72   big memory user
18370 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77  .** in systems w
18380 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70  ith lots of prep
18390 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e  ared statements.
183a0 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63    And few applic
183b0 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d  ations.** need m
183c0 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31  ore than about 1
183d0 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65  0 or 20 variable
183e0 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74  s.  But some ext
183f0 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a  reme users want.
18400 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61  ** to have prepa
18410 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
18420 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76  ith over 32767 v
18430 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f  ariables, and fo
18440 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70  r them.** the op
18450 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
18460 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  e (at compile-ti
18470 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  me)..*/.#if SQLI
18480 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
18490 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79  NUMBER<=32767.ty
184a0 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b  pedef i16 ynVar;
184b0 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69  .#else.typedef i
184c0 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66  nt ynVar;.#endif
184d0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64  ../*.** Each nod
184e0 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  e of an expressi
184f0 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20  on in the parse 
18500 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61  tree is an insta
18510 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
18520 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
18530 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f  Expr.op is the o
18540 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67  pcode. The integ
18550 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20  er parser token 
18560 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64  codes are reused
18570 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68  .** as opcodes h
18580 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65  ere. For example
18590 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66  , the parser def
185a0 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65  ines TK_GE to be
185b0 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63   an integer.** c
185c0 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ode representing
185d0 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74   the ">=" operat
185e0 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e  or. This same in
185f0 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65  teger code is re
18600 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65  used.** to repre
18610 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72  sent the greater
18620 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74  -than-or-equal-t
18630 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  o operator in th
18640 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  e expression.** 
18650 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tree..**.** If t
18660 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
18670 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
18680 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f  (TK_INTEGER, TK_
18690 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a  FLOAT, TK_BLOB,.
186a0 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29  ** or TK_STRING)
186b0 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
186c0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74  n contains the t
186d0 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c  ext of the SQL l
186e0 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68  iteral. If.** th
186f0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
18700 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56  a variable (TK_V
18710 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45  ARIABLE), then E
18720 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
18730 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62  ns the.** variab
18740 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79  le name. Finally
18750 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  , if the express
18760 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
18770 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54  nction (TK_FUNCT
18780 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78  ION),.** then Ex
18790 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
187a0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
187b0 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  e function..**.*
187c0 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e  * Expr.pRight an
187d0 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65  d Expr.pLeft are
187e0 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
187f0 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f  ght subexpressio
18800 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72  ns of a.** binar
18810 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68  y operator. Eith
18820 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62  er or both may b
18830 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78  e NULL..**.** Ex
18840 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20  pr.x.pList is a 
18850 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74  list of argument
18860 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  s if the express
18870 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
18880 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53  nction,.** a CAS
18890 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20  E expression or 
188a0 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e  an IN expression
188b0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c   of the form "<l
188c0 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e  hs> IN (<y>, <z>
188d0 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78  ...)"..** Expr.x
188e0 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64  .pSelect is used
188f0 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
18900 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65  on is a sub-sele
18910 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73  ct or an express
18920 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f  ion of.** the fo
18930 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45  rm "<lhs> IN (SE
18940 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74  LECT ...)". If t
18950 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  he EP_xIsSelect 
18960 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68  bit is set in th
18970 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20  e.** Expr.flags 
18980 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e  mask, then Expr.
18990 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
189a0 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45  id. Otherwise, E
189b0 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a  xpr.x.pList is.*
189c0 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41  * valid..**.** A
189d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  n expression of 
189e0 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49  the form ID or I
189f0 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61  D.ID refers to a
18a00 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62   column in a tab
18a10 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20  le..** For such 
18a20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70  expressions, Exp
18a30 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54  r.op is set to T
18a40 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70  K_COLUMN and Exp
18a50 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74  r.iTable is.** t
18a60 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f  he integer curso
18a70 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44  r number of a VD
18a80 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  BE cursor pointi
18a90 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  ng to that table
18aa0 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f   and.** Expr.iCo
18ab0 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75  lumn is the colu
18ac0 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  mn number for th
18ad0 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d  e specific colum
18ae0 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78  n.  If the.** ex
18af0 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64  pression is used
18b00 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20   as a result in 
18b10 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c  an aggregate SEL
18b20 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ECT, then the.**
18b30 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73   value is also s
18b40 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70  tored in the Exp
18b50 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e  r.iAgg column in
18b60 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
18b70 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e  o that.** it can
18b80 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74   be accessed aft
18b90 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65  er all aggregate
18ba0 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a  s are computed..
18bb0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
18bc0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e  ression is an un
18bd0 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d  bound variable m
18be0 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f  arker (a questio
18bf0 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63  n mark.** charac
18c00 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f  ter '?' in the o
18c10 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65  riginal SQL) the
18c20 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c  n the Expr.iTabl
18c30 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65  e holds the inde
18c40 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20  x.** number for 
18c50 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a  that variable..*
18c60 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
18c70 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71  ession is a subq
18c80 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69  uery then Expr.i
18c90 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20  Column holds an 
18ca0 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73  integer.** regis
18cb0 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61  ter number conta
18cc0 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  ining the result
18cd0 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79   of the subquery
18ce0 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62  .  If the.** sub
18cf0 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f  query gives a co
18d00 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74  nstant result, t
18d10 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31  hen iTable is -1
18d20 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65  .  If the subque
18d30 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69  ry.** gives a di
18d40 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61  fferent answer a
18d50 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65  t different time
18d60 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65  s during stateme
18d70 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a  nt processing.**
18d80 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
18d90 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
18da0 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74   subroutine that
18db0 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75   computes the su
18dc0 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66  bquery..**.** If
18dd0 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20   the Expr is of 
18de0 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  type OP_Column, 
18df0 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74  and the table it
18e00 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72   is selecting fr
18e10 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20  om.** is a disk 
18e20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c  table or the "ol
18e30 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c  d.*" pseudo-tabl
18e40 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69  e, then pTab poi
18e50 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f  nts to the.** co
18e60 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
18e70 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a  e definition..**
18e80 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e  .** ALLOCATION N
18e90 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72  OTES:.**.** Expr
18ea0 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65   objects can use
18eb0 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79   a lot of memory
18ec0 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61   space in databa
18ed0 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a  se schema.  To.*
18ee0 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65  * help reduce me
18ef0 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74  mory requirement
18f00 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20  s, sometimes an 
18f10 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c  Expr object will
18f20 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64   be.** truncated
18f30 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65  .  And to reduce
18f40 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
18f50 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
18f60 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20  s, sometimes.** 
18f70 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72  two or more Expr
18f80 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65   objects will be
18f90 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
18fa0 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  gle memory alloc
18fb0 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68  ation,.** togeth
18fc0 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f  er with Expr.zTo
18fd0 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a  ken strings..**.
18fe0 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  ** If the EP_Red
18ff0 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65  uced and EP_Toke
19000 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20  nOnly flags are 
19010 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45  set when.** an E
19020 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72  xpr object is tr
19030 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45  uncated.  When E
19040 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
19050 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68  , then all.** th
19060 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a  e child Expr obj
19070 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  ects in the Expr
19080 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e  .pLeft and Expr.
19090 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a  pRight subtrees.
190a0 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ** are contained
190b0 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
190c0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
190d0 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76  on.  Note, howev
190e0 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  er, that.** the 
190f0 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72  subtrees in Expr
19100 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72  .x.pList or Expr
19110 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61  .x.pSelect are a
19120 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79  lways separately
19130 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72  .** allocated, r
19140 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
19150 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52  ther or not EP_R
19160 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a  educed is set..*
19170 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a  /.struct Expr {.
19180 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
19190 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72           /* Oper
191a0 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20  ation performed 
191b0 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
191c0 20 20 63 68 61 72 20 61 66 66 45 78 70 72 3b 20    char affExpr; 
191d0 20 20 20 20 20 20 20 20 20 2f 2a 20 61 66 66 69           /* affi
191e0 6e 69 74 79 2c 20 6f 72 20 52 41 49 53 45 20 74  nity, or RAISE t
191f0 79 70 65 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61  ype */.  u32 fla
19200 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
19210 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
19220 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
19230 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
19240 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
19250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
19260 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
19270 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
19280 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
19290 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
192a0 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
192b0 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
192c0 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
192d0 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
192e0 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
192f0 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
19300 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
19310 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
19320 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
19330 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
19340 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
19350 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
19360 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
19370 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
19380 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
19390 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
193a0 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
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 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
193f0 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
19400 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
19410 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
19420 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
19430 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
19440 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
19450 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
19460 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20  List;     /* op 
19470 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
19480 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43  LECT, CASE, FUNC
19490 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f  TION, BETWEEN */
194a0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
194b0 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f  lect;     /* EP_
194c0 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70  xIsSelect and op
194d0 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
194e0 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a  ELECT */.  } x;.
194f0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
19500 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20  Reduced flag is 
19510 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
19520 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
19530 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
19540 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
19550 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
19560 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
19570 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
19580 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
19590 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
195a0 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
195b0 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
195c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
195d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
195e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
195f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
19600 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
19610 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
19620 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
19630 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f       /* Height o
19640 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65  f the tree heade
19650 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
19660 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69  /.#endif.  int i
19670 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
19680 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
19690 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
196a0 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63   table holding c
196b0 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
196d0 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72  * TK_REGISTER: r
196e0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20  egister number. 
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19700 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52          ** TK_TR
19710 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c  IGGER: 1 -> new,
19720 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20   0 -> old.      
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c     ** EP_Unlikel
19750 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69  y:  134217728 ti
19760 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20  mes likelihood. 
19770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19780 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 49 4e          ** TK_IN
19790 3a 20 65 70 68 65 6d 65 72 69 61 6c 20 74 61 62  : ephemerial tab
197a0 6c 65 20 68 6f 6c 64 69 6e 67 20 52 48 53 0a 20  le holding RHS. 
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45          ** TK_SE
197d0 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 4e 75 6d  LECT_COLUMN: Num
197e0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f  ber of columns o
197f0 6e 20 74 68 65 20 4c 48 53 0a 20 20 20 20 20 20  n the LHS.      
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a     ** TK_SELECT:
19820 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f 66   1st register of
19830 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a   result vector *
19840 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
19850 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
19860 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
19870 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
19880 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
198a0 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
198b0 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
198c0 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20  always >= 1)..  
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c         ** TK_SEL
198f0 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75  ECT_COLUMN: colu
19900 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
19910 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36   vector */.  i16
19920 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20   iAgg;          
19930 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
19940 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e  ry in pAggInfo->
19950 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e  aCol[] or ->aFun
19960 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69  c[] */.  i16 iRi
19970 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20  ghtJoinTable;   
19980 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69  /* If EP_FromJoi
19990 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62  n, the right tab
199a0 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a  le of the join *
199b0 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
199c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
199d0 5f 52 45 47 49 53 54 45 52 2f 54 4b 5f 54 52 55  _REGISTER/TK_TRU
199e0 54 48 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  TH: original val
199f0 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a10 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
19a20 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
19a30 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
19a40 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
19a50 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19a60 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
19a70 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
19a80 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
19a90 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
19aa0 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
19ab0 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
19ac0 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e 69 6f  NCTION */.  unio
19ad0 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  n {.    Table *p
19ae0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
19af0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54 61 62  * TK_COLUMN: Tab
19b00 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f  le containing co
19b10 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20 4e 55 4c  lumn. Can be NUL
19b20 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  L.              
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19b40 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20  for a column of 
19b50 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65  an index on an e
19b60 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
19b70 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20   Window *pWin;  
19b80 20 20 20 20 20 20 20 20 2f 2a 20 45 50 5f 57 69          /* EP_Wi
19b90 6e 46 75 6e 63 3a 20 57 69 6e 64 6f 77 2f 46 69  nFunc: Window/Fi
19ba0 6c 74 65 72 20 64 65 66 6e 20 66 6f 72 20 61 20  lter defn for a 
19bb0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
19bc0 73 74 72 75 63 74 20 7b 20 20 20 20 20 20 20 20  struct {        
19bd0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 49 4e 2c         /* TK_IN,
19be0 20 54 4b 5f 53 45 4c 45 43 54 2c 20 61 6e 64 20   TK_SELECT, and 
19bf0 54 4b 5f 45 58 49 53 54 53 20 2a 2f 0a 20 20 20  TK_EXISTS */.   
19c00 20 20 20 69 6e 74 20 69 41 64 64 72 3b 20 20 20     int iAddr;   
19c10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 75 62            /* Sub
19c20 72 6f 75 74 69 6e 65 20 65 6e 74 72 79 20 61 64  routine entry ad
19c30 64 72 65 73 73 20 2a 2f 0a 20 20 20 20 20 20 69  dress */.      i
19c40 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20  nt regReturn;   
19c50 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
19c60 72 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 72  r used to hold r
19c70 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 2a 2f  eturn address */
19c80 0a 20 20 20 20 7d 20 73 75 62 3b 0a 20 20 7d 20  .    } sub;.  } 
19c90 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  y;.};../*.** The
19ca0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
19cb0 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
19cc0 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
19cd0 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 20  flags field..** 
19ce0 56 61 6c 75 65 20 72 65 73 74 72 69 63 74 69 6f  Value restrictio
19cf0 6e 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20  ns:.**.**       
19d00 20 20 20 45 50 5f 41 67 67 20 3d 3d 20 4e 43 5f     EP_Agg == NC_
19d10 48 61 73 41 67 67 20 3d 3d 20 53 46 5f 48 61 73  HasAgg == SF_Has
19d20 41 67 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  Agg.**          
19d30 45 50 5f 57 69 6e 20 3d 3d 20 4e 43 5f 48 61 73  EP_Win == NC_Has
19d40 57 69 6e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  Win.*/.#define E
19d50 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 30 78 30  P_FromJoin   0x0
19d60 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61  00001 /* Origina
19d70 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20  tes in ON/USING 
19d80 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20  clause of outer 
19d90 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
19da0 45 50 5f 44 69 73 74 69 6e 63 74 20 20 20 30 78  EP_Distinct   0x
19db0 30 30 30 30 30 32 20 2f 2a 20 41 67 67 72 65 67  000002 /* Aggreg
19dc0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
19dd0 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
19de0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
19df0 5f 48 61 73 46 75 6e 63 20 20 20 20 30 78 30 30  _HasFunc    0x00
19e00 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0004 /* Contains
19e10 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e   one or more fun
19e20 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69  ctions of any ki
19e30 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nd */.#define EP
19e40 5f 46 69 78 65 64 43 6f 6c 20 20 20 30 78 30 30  _FixedCol   0x00
19e50 30 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d  0008 /* TK_Colum
19e60 6e 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 66  n with a known f
19e70 69 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a 23 64  ixed value */.#d
19e80 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20  efine EP_Agg    
19e90 20 20 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20      0x000010 /* 
19ea0 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
19eb0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
19ec0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
19ed0 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74  ine EP_VarSelect
19ee0 20 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53    0x000020 /* pS
19ef0 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
19f00 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
19f10 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
19f20 44 62 6c 51 75 6f 74 65 64 20 20 30 78 30 30 30  DblQuoted  0x000
19f30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77  040 /* token.z w
19f40 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e  as originally in
19f50 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e   "..." */.#defin
19f60 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 20  e EP_InfixFunc  
19f70 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65  0x000080 /* True
19f80 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
19f90 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
19fa0 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
19fb0 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
19fc0 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65   0x000100 /* Tre
19fd0 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
19fe0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
19ff0 20 2a 2f 0a 20 20 2f 2a 20 20 20 20 20 20 20 20   */.  /*        
1a000 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 32            0x0002
1a010 30 30 20 41 76 61 69 6c 61 62 6c 65 20 66 6f 72  00 Available for
1a020 20 72 65 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e   reuse */.#defin
1a030 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 20  e EP_IntValue   
1a040 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65  0x000400 /* Inte
1a050 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
1a060 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
1a070 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
1a080 73 53 65 6c 65 63 74 20 20 30 78 30 30 30 38 30  sSelect  0x00080
1a090 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69  0 /* x.pSelect i
1a0a0 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69  s valid (otherwi
1a0b0 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a  se x.pList is) *
1a0c0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69  /.#define EP_Ski
1a0d0 70 20 20 20 20 20 20 20 30 78 30 30 31 30 30 30  p       0x001000
1a0e0 20 2f 2a 20 4f 70 65 72 61 74 6f 72 20 64 6f 65   /* Operator doe
1a0f0 73 20 6e 6f 74 20 63 6f 6e 74 72 69 62 75 74 65  s not contribute
1a100 20 74 6f 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a   to affinity */.
1a110 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
1a120 65 64 20 20 20 20 30 78 30 30 32 30 30 30 20 2f  ed    0x002000 /
1a130 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
1a140 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62  PR_REDUCEDSIZE b
1a150 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
1a160 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c  fine EP_TokenOnl
1a170 79 20 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45  y  0x004000 /* E
1a180 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
1a190 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
1a1a0 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
1a1b0 69 6e 65 20 45 50 5f 57 69 6e 20 20 20 20 20 20  ine EP_Win      
1a1c0 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 43 6f    0x008000 /* Co
1a1d0 6e 74 61 69 6e 73 20 77 69 6e 64 6f 77 20 66 75  ntains window fu
1a1e0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
1a1f0 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20  ne EP_MemToken  
1a200 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65   0x010000 /* Nee
1a210 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
1a220 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
1a230 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e   */.#define EP_N
1a240 6f 52 65 64 75 63 65 20 20 20 30 78 30 32 30 30  oReduce   0x0200
1a250 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50  00 /* Cannot EXP
1a260 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73  RDUP_REDUCE this
1a270 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65   Expr */.#define
1a280 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 20 30   EP_Unlikely   0
1a290 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b  x040000 /* unlik
1a2a0 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68  ely() or likelih
1a2b0 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ood() function *
1a2c0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e  /.#define EP_Con
1a2d0 73 74 46 75 6e 63 20 20 30 78 30 38 30 30 30 30  stFunc  0x080000
1a2e0 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55 4e   /* A SQLITE_FUN
1a2f0 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53  C_CONSTANT or _S
1a300 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20  LOCHNG function 
1a310 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61  */.#define EP_Ca
1a320 6e 42 65 4e 75 6c 6c 20 20 30 78 31 30 30 30 30  nBeNull  0x10000
1a330 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c  0 /* Can be null
1a340 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c   despite NOT NUL
1a350 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
1a360 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75  #define EP_Subqu
1a370 65 72 79 20 20 20 30 78 32 30 30 30 30 30 20 2f  ery   0x200000 /
1a380 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
1a390 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72  a TK_SELECT oper
1a3a0 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ator */.#define 
1a3b0 45 50 5f 41 6c 69 61 73 20 20 20 20 20 20 30 78  EP_Alias      0x
1a3c0 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20  400000 /* Is an 
1a3d0 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75  alias for a resu
1a3e0 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f  lt set column */
1a3f0 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66  .#define EP_Leaf
1a400 20 20 20 20 20 20 20 30 78 38 30 30 30 30 30 20         0x800000 
1a410 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e  /* Expr.pLeft, .
1a420 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65  pRight, .u.pSele
1a430 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 23  ct all NULL */.#
1a440 64 65 66 69 6e 65 20 45 50 5f 57 69 6e 46 75 6e  define EP_WinFun
1a450 63 20 20 20 30 78 31 30 30 30 30 30 30 20 2f 2a  c   0x1000000 /*
1a460 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 20 77 69 74   TK_FUNCTION wit
1a470 68 20 45 78 70 72 2e 79 2e 70 57 69 6e 20 73 65  h Expr.y.pWin se
1a480 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
1a490 53 75 62 72 74 6e 20 20 20 20 30 78 32 30 30 30  Subrtn    0x2000
1a4a0 30 30 30 20 2f 2a 20 55 73 65 73 20 45 78 70 72  000 /* Uses Expr
1a4b0 2e 79 2e 73 75 62 2e 20 54 4b 5f 49 4e 2c 20 5f  .y.sub. TK_IN, _
1a4c0 53 45 4c 45 43 54 2c 20 6f 72 20 5f 45 58 49 53  SELECT, or _EXIS
1a4d0 54 53 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  TS */.#define EP
1a4e0 5f 51 75 6f 74 65 64 20 20 20 20 30 78 34 30 30  _Quoted    0x400
1a4f0 30 30 30 30 20 2f 2a 20 54 4b 5f 49 44 20 77 61  0000 /* TK_ID wa
1a500 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 71 75 6f  s originally quo
1a510 74 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ted */.#define E
1a520 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 38 30  P_Static    0x80
1a530 30 30 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e  00000 /* Held in
1a540 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
1a550 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
1a560 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  () */.#define EP
1a570 5f 49 73 54 72 75 65 20 20 20 30 78 31 30 30 30  _IsTrue   0x1000
1a580 30 30 30 30 20 2f 2a 20 41 6c 77 61 79 73 20 68  0000 /* Always h
1a590 61 73 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  as boolean value
1a5a0 20 6f 66 20 54 52 55 45 20 2a 2f 0a 23 64 65 66   of TRUE */.#def
1a5b0 69 6e 65 20 45 50 5f 49 73 46 61 6c 73 65 20 20  ine EP_IsFalse  
1a5c0 30 78 32 30 30 30 30 30 30 30 20 2f 2a 20 41 6c  0x20000000 /* Al
1a5d0 77 61 79 73 20 68 61 73 20 62 6f 6f 6c 65 61 6e  ways has boolean
1a5e0 20 76 61 6c 75 65 20 6f 66 20 46 41 4c 53 45 20   value of FALSE 
1a5f0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
1a600 64 69 72 65 63 74 20 30 78 34 30 30 30 30 30 30  direct 0x4000000
1a610 30 20 2f 2a 20 43 6f 6e 74 61 69 6e 65 64 20 77  0 /* Contained w
1a620 69 74 68 69 6e 20 61 20 54 52 49 47 47 45 52 20  ithin a TRIGGER 
1a630 6f 72 20 61 20 56 49 45 57 20 2a 2f 0a 0a 2f 2a  or a VIEW */../*
1a640 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f 70 61  .** The EP_Propa
1a650 67 61 74 65 20 6d 61 73 6b 20 69 73 20 61 20 73  gate mask is a s
1a660 65 74 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73  et of properties
1a670 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69 63 61   that automatica
1a680 6c 6c 79 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a  lly propagate.**
1a690 20 75 70 77 61 72 64 73 20 69 6e 74 6f 20 70 61   upwards into pa
1a6a0 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23  rent nodes..*/.#
1a6b0 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
1a6c0 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
1a6d0 45 50 5f 53 75 62 71 75 65 72 79 7c 45 50 5f 48  EP_Subquery|EP_H
1a6e0 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54  asFunc)../*.** T
1a6f0 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
1a700 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
1a710 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
1a720 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  its in the.** Ex
1a730 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
1a740 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  */.#define ExprH
1a750 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  asProperty(E,P) 
1a760 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73      (((E)->flags
1a770 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
1a780 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70  e ExprHasAllProp
1a790 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29  erty(E,P)  (((E)
1a7a0 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
1a7b0 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53  )).#define ExprS
1a7c0 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  etProperty(E,P) 
1a7d0 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d      (E)->flags|=
1a7e0 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  (P).#define Expr
1a7f0 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c  ClearProperty(E,
1a800 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26  P)   (E)->flags&
1a810 3d 7e 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78  =~(P).#define Ex
1a820 70 72 41 6c 77 61 79 73 54 72 75 65 28 45 29 20  prAlwaysTrue(E) 
1a830 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
1a840 45 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49  EP_FromJoin|EP_I
1a850 73 54 72 75 65 29 29 3d 3d 45 50 5f 49 73 54 72  sTrue))==EP_IsTr
1a860 75 65 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  ue).#define Expr
1a870 41 6c 77 61 79 73 46 61 6c 73 65 28 45 29 20 20  AlwaysFalse(E)  
1a880 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 45 50  (((E)->flags&(EP
1a890 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73 46  _FromJoin|EP_IsF
1a8a0 61 6c 73 65 29 29 3d 3d 45 50 5f 49 73 46 61 6c  alse))==EP_IsFal
1a8b0 73 65 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72  se)../* The Expr
1a8c0 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29  SetVVAProperty()
1a8d0 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
1a8e0 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  or Verification,
1a8f0 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20   Validation,.** 
1a900 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
1a910 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b  n only.  It work
1a920 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72  s like ExprSetPr
1a930 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20  operty() during 
1a940 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73  VVA.** processes
1a950 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20   but is a no-op 
1a960 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f  for delivery..*/
1a970 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1a980 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
1a990 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
1a9a0 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67  (E,P)  (E)->flag
1a9b0 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  s|=(P).#else.# d
1a9c0 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
1a9d0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65  Property(E,P).#e
1a9e0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
1a9f0 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
1aa00 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
1aa10 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
1aa20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a  a normal Expr.**
1aa30 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72   struct, an Expr
1aa40 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
1aa50 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
1aa60 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61   set in Expr.fla
1aa70 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70  gs.** and an Exp
1aa80 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
1aa90 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
1aaa0 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  lag set..*/.#def
1aab0 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a  ine EXPR_FULLSIZ
1aac0 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65  E           size
1aad0 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20  of(Expr)        
1aae0 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20     /* Full size 
1aaf0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
1ab00 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20  REDUCEDSIZE     
1ab10 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
1ab20 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d  ,iTable)  /* Com
1ab30 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  mon features */.
1ab40 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b  #define EXPR_TOK
1ab50 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20  ENONLYSIZE      
1ab60 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c  offsetof(Expr,pL
1ab70 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20  eft)   /* Fewer 
1ab80 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a  features */../*.
1ab90 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  ** Flags passed 
1aba0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78  to the sqlite3Ex
1abb0 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e  prDup() function
1abc0 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  . See the header
1abd0 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76   comment.** abov
1abe0 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
1abf0 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
1ac00 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
1ac10 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
1ac20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
1ac30 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
1ac40 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
1ac50 0a 2a 2a 20 54 72 75 65 20 69 66 20 74 68 65 20  .** True if the 
1ac60 65 78 70 72 65 73 73 69 6f 6e 20 70 61 73 73 65  expression passe
1ac70 64 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74  d as an argument
1ac80 20 77 61 73 20 61 20 66 75 6e 63 74 69 6f 6e 20   was a function 
1ac90 77 69 74 68 0a 2a 2a 20 61 6e 20 4f 56 45 52 28  with.** an OVER(
1aca0 29 20 63 6c 61 75 73 65 20 28 61 20 77 69 6e 64  ) clause (a wind
1acb0 6f 77 20 66 75 6e 63 74 69 6f 6e 29 2e 0a 2a 2f  ow function)..*/
1acc0 0a 23 64 65 66 69 6e 65 20 49 73 57 69 6e 64 6f  .#define IsWindo
1acd0 77 46 75 6e 63 28 70 29 20 28 20 5c 0a 20 20 20  wFunc(p) ( \.   
1ace0 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79   ExprHasProperty
1acf0 28 28 70 29 2c 20 45 50 5f 57 69 6e 46 75 6e 63  ((p), EP_WinFunc
1ad00 29 20 26 26 20 70 2d 3e 79 2e 70 57 69 6e 2d 3e  ) && p->y.pWin->
1ad10 65 46 72 6d 54 79 70 65 21 3d 54 4b 5f 46 49 4c  eFrmType!=TK_FIL
1ad20 54 45 52 20 5c 0a 29 0a 0a 2f 2a 0a 2a 2a 20 41  TER \.)../*.** A
1ad30 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
1ad40 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72  ions.  Each expr
1ad50 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f  ession may optio
1ad60 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20  nally have a.** 
1ad70 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e  name.  An expr/n
1ad80 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ame combination 
1ad90 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73  can be used in s
1ada0 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63  everal ways, suc
1adb0 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74  h.** as the list
1adc0 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22   of "expr AS ID"
1add0 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e   fields followin
1ade0 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20  g a "SELECT" or 
1adf0 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f  in the.** list o
1ae00 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74  f "ID = expr" it
1ae10 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45  ems in an UPDATE
1ae20 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  .  A list of exp
1ae30 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20  ressions can.** 
1ae40 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20  also be used as 
1ae50 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
1ae60 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77  a function, in w
1ae70 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e  hich case the a.
1ae80 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69  zName.** field i
1ae90 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
1aea0 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65  * By default the
1aeb0 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c   Expr.zSpan fiel
1aec0 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d  d holds a human-
1aed0 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70  readable descrip
1aee0 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65  tion of.** the e
1aef0 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
1af00 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  s used in the ge
1af10 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f  neration of erro
1af20 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a  r messages and.*
1af30 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e  * column labels.
1af40 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
1af50 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79  Expr.zSpan is ty
1af60 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74  pically the text
1af70 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20   of a.** column 
1af80 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74  expression as it
1af90 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c   exists in a SEL
1afa0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
1afb0 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74  However, if.** t
1afc0 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c  he bSpanIsTab fl
1afd0 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
1afe0 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61  zSpan is overloa
1aff0 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20  ded to mean the 
1b000 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72  name.** of the r
1b010 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20  esult column in 
1b020 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41  the form: DATABA
1b030 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e  SE.TABLE.COLUMN.
1b040 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20    This later.** 
1b050 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72  form is used for
1b060 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e   name resolution
1b070 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f   with nested FRO
1b080 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74  M clauses..*/.st
1b090 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a  ruct ExprList {.
1b0a0 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20    int nExpr;    
1b0b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b0c0 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  er of expression
1b0d0 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
1b0e0 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69  .  struct ExprLi
1b0f0 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72  st_item { /* For
1b100 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
1b110 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
1b120 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
1b130 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1b140 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
1b150 72 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  r this expressio
1b160 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
1b170 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1b180 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69   /* Token associ
1b190 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65  ated with this e
1b1a0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
1b1b0 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
1b1c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67           /* Orig
1b1d0 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65  inal text of the
1b1e0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
1b1f0 20 20 20 75 38 20 73 6f 72 74 46 6c 61 67 73 3b     u8 sortFlags;
1b200 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1b210 73 6b 20 6f 66 20 4b 45 59 49 4e 46 4f 5f 4f 52  sk of KEYINFO_OR
1b220 44 45 52 5f 2a 20 66 6c 61 67 73 20 2a 2f 0a 20  DER_* flags */. 
1b230 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
1b240 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
1b250 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
1b260 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
1b270 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
1b280 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
1b290 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
1b2a0 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
1b2b0 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
1b2c0 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61    unsigned reusa
1b2d0 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e  ble :1;   /* Con
1b2e0 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
1b2f0 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a   is reusable */.
1b300 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 6f      unsigned bSo
1b310 72 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20 44  rterRef :1; /* D
1b320 65 66 65 72 20 65 76 61 6c 75 61 74 69 6f 6e 20  efer evaluation 
1b330 75 6e 74 69 6c 20 61 66 74 65 72 20 73 6f 72 74  until after sort
1b340 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ing */.    unsig
1b350 6e 65 64 20 62 4e 75 6c 6c 73 3a 20 31 3b 20 20  ned bNulls: 1;  
1b360 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 65 78     /* True if ex
1b370 70 6c 69 63 69 74 20 22 4e 55 4c 4c 53 20 46 49  plicit "NULLS FI
1b380 52 53 54 2f 4c 41 53 54 22 20 2a 2f 0a 20 20 20  RST/LAST" */.   
1b390 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73   union {.      s
1b3a0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20  truct {.        
1b3b0 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b  u16 iOrderByCol;
1b3c0 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44        /* For ORD
1b3d0 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75  ER BY, column nu
1b3e0 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73  mber in result s
1b3f0 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31  et */.        u1
1b400 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
1b410 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
1b420 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d  o Parse.aAlias[]
1b430 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20   for zName */.  
1b440 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69      } x;.      i
1b450 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67  nt iConstExprReg
1b460 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  ;      /* Regist
1b470 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72  er in which Expr
1b480 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64   value is cached
1b490 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d   */.    } u;.  }
1b4a0 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
1b4b0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 73          /* One s
1b4c0 6c 6f 74 20 66 6f 72 20 65 61 63 68 20 65 78 70  lot for each exp
1b4d0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
1b4e0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1b4f0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1b500 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
1b510 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
1b520 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
1b530 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
1b540 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
1b550 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
1b560 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
1b570 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
1b580 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
1b590 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
1b5a0 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
1b5b0 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
1b5c0 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
1b5d0 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
1b5e0 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
1b5f0 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
1b600 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
1b610 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
1b620 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
1b630 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
1b640 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
1b650 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
1b660 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
1b670 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
1b680 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
1b690 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
1b6a0 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
1b6b0 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
1b6c0 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
1b6d0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
1b6e0 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
1b6f0 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
1b700 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
1b710 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
1b720 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
1b730 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
1b740 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
1b750 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
1b760 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
1b770 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
1b780 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
1b790 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
1b7a0 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
1b7b0 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
1b7c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b7d0 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
1b7e0 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1b7f0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1b800 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1b810 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52  describes the FR
1b820 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
1b830 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1b840 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f  .** Each table o
1b850 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
1b860 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
1b870 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d   a separate elem
1b880 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72  ent of.** the Sr
1b890 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e  cList.a[] array.
1b8a0 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20  .**.** With the 
1b8b0 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74  addition of mult
1b8c0 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75  iple database su
1b8d0 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f  pport, the follo
1b8e0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
1b8f0 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73  * can also be us
1b900 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61  ed to describe a
1b910 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
1b920 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61  e such as the ta
1b930 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d  ble that.** is m
1b940 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e  odified by an IN
1b950 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72  SERT, DELETE, or
1b960 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1b970 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20  t.  In standard 
1b980 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74  SQL,.** such a t
1b990 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73  able must be a s
1b9a0 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20  imple name: ID. 
1b9b0 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20   But in SQLite, 
1b9c0 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a  the table can.**
1b9d0 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69   now be identifi
1b9e0 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65  ed by a database
1b9f0 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68   name, a dot, th
1ba00 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  en the table nam
1ba10 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20  e: ID.ID..**.** 
1ba20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61  The jointype sta
1ba30 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20  rts out showing 
1ba40 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65  the join type be
1ba50 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e  tween the curren
1ba60 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74  t table.** and t
1ba70 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e  he next table on
1ba80 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20   the list.  The 
1ba90 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68  parser builds th
1baa0 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e  e list this way.
1bab0 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53  .** But sqlite3S
1bac0 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
1bad0 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66  ype() later shif
1bae0 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73  ts the jointypes
1baf0 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a   so that each.**
1bb00 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73   jointype expres
1bb10 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74  ses the join bet
1bb20 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61  ween the table a
1bb30 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
1bb40 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  table..**.** In 
1bb50 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c  the colUsed fiel
1bb60 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  d, the high-orde
1bb70 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69  r bit (bit 63) i
1bb80 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62  s set if the tab
1bb90 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d  le.** contains m
1bba0 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75  ore than 63 colu
1bbb0 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74  mns and the 64-t
1bbc0 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d  h or later colum
1bbd0 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74  n is used..*/.st
1bbe0 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20  ruct SrcList {. 
1bbf0 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20   int nSrc;      
1bc00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
1bc10 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72  ables or subquer
1bc20 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ies in the FROM 
1bc30 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  clause */.  u32 
1bc40 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
1bc50 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
1bc60 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61  s allocated in a
1bc70 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74  [] below */.  st
1bc80 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
1bc90 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a  m {.    Schema *
1bca0 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68  pSchema;  /* Sch
1bcb0 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69  ema to which thi
1bcc0 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20  s item is fixed 
1bcd0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61  */.    char *zDa
1bce0 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65  tabase;  /* Name
1bcf0 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
1bd00 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  ding this table 
1bd10 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
1bd20 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
1bd30 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
1bd40 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61  .    char *zAlia
1bd50 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42  s;     /* The "B
1bd60 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41  " part of a "A A
1bd70 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e  S B" phrase.  zN
1bd80 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a  ame is the "A" *
1bd90 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
1bda0 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51  b;      /* An SQ
1bdb0 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  L table correspo
1bdc0 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a  nding to zName *
1bdd0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
1bde0 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c  elect;  /* A SEL
1bdf0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73  ECT statement us
1be00 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  ed in place of a
1be10 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
1be20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53     int addrFillS
1be30 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20  ub;  /* Address 
1be40 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f  of subroutine to
1be50 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71   manifest a subq
1be60 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20  uery */.    int 
1be70 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a  regReturn;    /*
1be80 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1be90 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  g return address
1bea0 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20   of addrFillSub 
1beb0 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
1bec0 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69  sult;    /* Regi
1bed0 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65  sters holding re
1bee0 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f  sults of a co-ro
1bef0 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72  utine */.    str
1bf00 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a  uct {.      u8 j
1bf10 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a  ointype;      /*
1bf20 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65   Type of join be
1bf30 74 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65  tween this table
1bf40 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
1bf50 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  s */.      unsig
1bf60 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a  ned notIndexed :
1bf70 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
1bf80 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20   there is a NOT 
1bf90 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a  INDEXED clause *
1bfa0 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1bfb0 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b   isIndexedBy :1;
1bfc0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1bfd0 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45  ere is an INDEXE
1bfe0 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  D BY clause */. 
1bff0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1c000 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20  TabFunc :1;     
1c010 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65  /* True if table
1c020 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
1c030 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20   syntax */.     
1c040 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72   unsigned isCorr
1c050 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54  elated :1;  /* T
1c060 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79  rue if sub-query
1c070 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a   is correlated *
1c080 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1c090 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31   viaCoroutine :1
1c0a0 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65  ;  /* Implemente
1c0b0 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e  d as a co-routin
1c0c0 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
1c0d0 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20  ned isRecursive 
1c0e0 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  :1;   /* True fo
1c0f0 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65  r recursive refe
1c100 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f  rence in WITH */
1c110 0a 20 20 20 20 7d 20 66 67 3b 0a 20 20 20 20 69  .    } fg;.    i
1c120 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20  nt iCursor;     
1c130 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
1c140 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20  sor number used 
1c150 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74  to access this t
1c160 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72  able */.    Expr
1c170 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a   *pOn;        /*
1c180 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f   The ON clause o
1c190 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
1c1a0 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20  IdList *pUsing; 
1c1b0 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63    /* The USING c
1c1c0 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
1c1d0 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63  */.    Bitmask c
1c1e0 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20  olUsed;  /* Bit 
1c1f0 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20  N (1<<N) set if 
1c200 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62  column N of pTab
1c210 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20   is used */.    
1c220 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68  union {.      ch
1c230 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20  ar *zIndexedBy; 
1c240 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72     /* Identifier
1c250 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42   from "INDEXED B
1c260 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75  Y <zIndex>" clau
1c270 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72  se */.      Expr
1c280 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20  List *pFuncArg; 
1c290 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f   /* Arguments to
1c2a0 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
1c2b0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20  nction */.    } 
1c2c0 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70  u1;.    Index *p
1c2d0 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64  IBIndex;  /* Ind
1c2e0 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72  ex structure cor
1c2f0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31  responding to u1
1c300 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20  .zIndexedBy */. 
1c310 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
1c320 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
1c330 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
1c340 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
1c350 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
1c360 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
1c370 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
1c380 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
1c390 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
1c3a0 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
1c3b0 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
1c3c0 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
1c3d0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1c3e0 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
1c3f0 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
1c400 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
1c410 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
1c420 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
1c430 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
1c440 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
1c450 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
1c460 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
1c470 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
1c480 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
1c490 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
1c4a0 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
1c4b0 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
1c4c0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1c4d0 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
1c4e0 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
1c4f0 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
1c500 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
1c510 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
1c520 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
1c530 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
1c540 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
1c550 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73  */.../*.** Flags
1c560 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
1c570 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20   the wctrlFlags 
1c580 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c  parameter of sql
1c590 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
1c5a0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72  .** and the Wher
1c5b0 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73  eInfo.wctrlFlags
1c5c0 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56   member..**.** V
1c5d0 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1c5e0 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
1c5f0 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1c600 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54   WHERE_USE_LIMIT
1c610 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d    == SF_FixedLim
1c620 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  it.*/.#define WH
1c630 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
1c640 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
1c650 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
1c660 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
1c670 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
1c680 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
1c690 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
1c6a0 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
1c6b0 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
1c6c0 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
1c6d0 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
1c6e0 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
1c6f0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
1c700 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
1c710 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
1c720 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
1c730 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
1c740 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c750 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52  E_ONEPASS_MULTIR
1c760 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45  OW 0x0008 /* ONE
1c770 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68 20  PASS is ok with 
1c780 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1c790 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1c7a0 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
1c7b0 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20  0x0010 /* Ok to 
1c7c0 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
1c7d0 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
1c7e0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f  define WHERE_OR_
1c7f0 53 55 42 43 4c 41 55 53 45 20 20 20 20 20 30 78  SUBCLAUSE     0x
1c800 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73 69  0020 /* Processi
1c810 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45 20 61  ng a sub-WHERE a
1c820 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20 20  s part of.      
1c830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c850 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d 69  ** the OR optimi
1c860 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69  zation  */.#defi
1c870 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59  ne WHERE_GROUPBY
1c880 20 20 20 20 20 20 20 20 20 20 30 78 30 30 34 30            0x0040
1c890 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20   /* pOrderBy is 
1c8a0 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42  really a GROUP B
1c8b0 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  Y */.#define WHE
1c8c0 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20  RE_DISTINCTBY   
1c8d0 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70 4f      0x0080 /* pO
1c8e0 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79  rderby is really
1c8f0 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75   a DISTINCT clau
1c900 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  se */.#define WH
1c910 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43  ERE_WANT_DISTINC
1c920 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 41  T    0x0100 /* A
1c930 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20  ll output needs 
1c940 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a  to be distinct *
1c950 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c960 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20  SORTBYGROUP     
1c970 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70 6f   0x0200 /* Suppo
1c980 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  rt sqlite3WhereI
1c990 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65  sSorted() */.#de
1c9a0 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f  fine WHERE_SEEK_
1c9b0 54 41 42 4c 45 20 20 20 20 20 20 20 30 78 30 34  TABLE       0x04
1c9c0 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66  00 /* Do not def
1c9d0 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e  er seeks on main
1c9e0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
1c9f0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1ca00 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30 30 20  LIMIT    0x0800 
1ca10 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54  /* ORDERBY+LIMIT
1ca20 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f   on the inner lo
1ca30 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  op */.#define WH
1ca40 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41  ERE_SEEK_UNIQ_TA
1ca50 42 4c 45 20 20 30 78 31 30 30 30 20 2f 2a 20 44  BLE  0x1000 /* D
1ca60 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b  o not defer seek
1ca70 73 20 69 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20  s if unique */. 
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca90 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
1caa0 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72  2000    not curr
1cab0 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64  ently used */.#d
1cac0 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53 45 5f  efine WHERE_USE_
1cad0 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30 78 34  LIMIT        0x4
1cae0 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65 20 4c  000 /* Use the L
1caf0 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65 73 74  IMIT in cost est
1cb00 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20 20 20  imates */.      
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb20 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30 30 20    /*     0x8000 
1cb30 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79     not currently
1cb40 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c   used */../* All
1cb50 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
1cb60 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57  es from sqlite3W
1cb70 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29  hereIsDistinct()
1cb80 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
1cb90 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20  E_DISTINCT_NOOP 
1cba0 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49       0  /* DISTI
1cbb0 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20  NCT keyword not 
1cbc0 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1cbd0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
1cbe0 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e  NIQUE    1  /* N
1cbf0 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a  o duplicates */.
1cc00 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1cc10 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20  STINCT_ORDERED  
1cc20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69   2  /* All dupli
1cc30 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65  cates are adjace
1cc40 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nt */.#define WH
1cc50 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f  ERE_DISTINCT_UNO
1cc60 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70  RDERED 3  /* Dup
1cc70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74  licates are scat
1cc80 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tered */../*.** 
1cc90 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65  A NameContext de
1cca0 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20  fines a context 
1ccb0 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f  in which to reso
1ccc0 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  lve table and co
1ccd0 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20  lumn.** names.  
1cce0 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73  The context cons
1ccf0 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f  ists of a list o
1cd00 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53  f tables (the pS
1cd10 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e  rcList) field an
1cd20 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e  d.** a list of n
1cd30 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
1cd40 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e  (pEList).  The n
1cd50 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
1cd60 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e  list may.** be N
1cd70 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63  ULL.  The pSrc c
1cd80 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
1cd90 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
1cda0 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20   a SELECT or.** 
1cdb0 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
1cdc0 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62  ng operated on b
1cdd0 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
1cde0 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68  , or DELETE.  Th
1cdf0 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72  e.** pEList corr
1ce00 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72  esponds to the r
1ce10 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53  esult set of a S
1ce20 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c  ELECT and is NUL
1ce30 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73  L for.** other s
1ce40 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
1ce50 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61   NameContexts ca
1ce60 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68  n be nested.  Wh
1ce70 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  en resolving nam
1ce80 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f  es, the inner-mo
1ce90 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  st.** context is
1cea0 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
1ceb0 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
1cec0 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
1ced0 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
1cee0 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
1cef0 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
1cf00 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
1cf10 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
1cf20 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
1cf30 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
1cf40 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
1cf50 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
1cf60 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
1cf70 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
1cf80 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
1cf90 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
1cfa0 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
1cfb0 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
1cfc0 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
1cfd0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
1cfe0 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72  .** Each subquer
1cff0 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d  y gets a new Nam
1d000 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70  eContext.  The p
1d010 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74  Next field point
1d020 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  s to the.** Name
1d030 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70  Context in the p
1d040 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68  arent query.  Th
1d050 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f  us the process o
1d060 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a  f scanning the.*
1d070 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69  * NameContext li
1d080 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
1d090 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f  o searching thro
1d0a0 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79  ugh successively
1d0b0 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65   outer.** subque
1d0c0 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  ries looking for
1d0d0 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72   a match..*/.str
1d0e0 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
1d0f0 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1d100 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  e;       /* The 
1d110 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c  parser */.  SrcL
1d120 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
1d130 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1d140 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72  tables used to r
1d150 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a  esolve names */.
1d160 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
1d170 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1d180 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
1d190 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
1d1a0 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20  t columns */.   
1d1b0 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
1d1c0 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  fo;   /* Informa
1d1d0 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65  tion about aggre
1d1e0 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65  gates at this le
1d1f0 76 65 6c 20 2a 2f 0a 20 20 20 20 55 70 73 65 72  vel */.    Upser
1d200 74 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20  t *pUpsert;     
1d210 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  /* ON CONFLICT c
1d220 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f  lause informatio
1d230 6e 20 66 72 6f 6d 20 61 6e 20 75 70 73 65 72 74  n from an upsert
1d240 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a 20 20 4e   */.  } uNC;.  N
1d250 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78  ameContext *pNex
1d260 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65  t;  /* Next oute
1d270 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20  r name context. 
1d280 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d   NULL for outerm
1d290 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  ost */.  int nRe
1d2a0 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
1d2b0 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73   Number of names
1d2c0 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69   resolved by thi
1d2d0 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69  s context */.  i
1d2e0 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1d2f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d300 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65   errors encounte
1d310 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76  red while resolv
1d320 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 69  ing names */.  i
1d330 6e 74 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20  nt ncFlags;     
1d340 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d      /* Zero or m
1d350 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64  ore NC_* flags d
1d360 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a  efined below */.
1d370 20 20 53 65 6c 65 63 74 20 2a 70 57 69 6e 53 65    Select *pWinSe
1d380 6c 65 63 74 3b 20 20 2f 2a 20 53 45 4c 45 43 54  lect;  /* SELECT
1d390 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 61   statement for a
1d3a0 6e 79 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  ny window functi
1d3b0 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ons */.};../*.**
1d3c0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
1d3d0 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
1d3e0 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
1d3f0 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  ld..**.** Value 
1d400 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c  constraints (all
1d410 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73   checked via ass
1d420 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43  ert()):.**    NC
1d430 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53 46  _HasAgg    == SF
1d440 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 45 50  _HasAgg    == EP
1d450 5f 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69  _Agg.**    NC_Mi
1d460 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69  nMaxAgg == SF_Mi
1d470 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c 49 54  nMaxAgg == SQLIT
1d480 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a  E_FUNC_MINMAX.**
1d490 20 20 20 20 4e 43 5f 48 61 73 57 69 6e 20 20 20      NC_HasWin   
1d4a0 20 3d 3d 20 45 50 5f 57 69 6e 0a 2a 2a 0a 2a 2f   == EP_Win.**.*/
1d4b0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f  .#define NC_Allo
1d4c0 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a  wAgg  0x0001  /*
1d4d0 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
1d4e0 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ions are allowed
1d4f0 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65   here */.#define
1d500 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
1d510 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66  0002  /* True if
1d520 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
1d530 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
1d540 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1d550 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20  sCheck   0x0004 
1d560 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1d570 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
1d580 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
1d590 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  t */.#define NC_
1d5a0 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38  InAggFunc 0x0008
1d5b0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
1d5c0 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
1d5d0 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
1d5e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
1d5f0 73 41 67 67 20 20 20 20 30 78 30 30 31 30 20 20  sAgg    0x0010  
1d600 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
1d610 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1d620 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
1d630 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20  ne NC_IdxExpr   
1d640 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20  0x0020  /* True 
1d650 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c  if resolving col
1d660 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49  umns of CREATE I
1d670 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
1d680 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30  NC_VarSelect 0x0
1d690 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c  040  /* A correl
1d6a0 61 74 65 64 20 73 75 62 71 75 65 72 79 20 68 61  ated subquery ha
1d6b0 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23  s been seen */.#
1d6c0 64 65 66 69 6e 65 20 4e 43 5f 55 45 4c 69 73 74  define NC_UEList
1d6d0 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54      0x0080  /* T
1d6e0 72 75 65 20 69 66 20 75 4e 43 2e 70 45 4c 69 73  rue if uNC.pELis
1d6f0 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  t is used */.#de
1d700 66 69 6e 65 20 4e 43 5f 55 41 67 67 49 6e 66 6f  fine NC_UAggInfo
1d710 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72 75    0x0100  /* Tru
1d720 65 20 69 66 20 75 4e 43 2e 70 41 67 67 49 6e 66  e if uNC.pAggInf
1d730 6f 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  o is used */.#de
1d740 66 69 6e 65 20 4e 43 5f 55 55 70 73 65 72 74 20  fine NC_UUpsert 
1d750 20 20 30 78 30 32 30 30 20 20 2f 2a 20 54 72 75    0x0200  /* Tru
1d760 65 20 69 66 20 75 4e 43 2e 70 55 70 73 65 72 74  e if uNC.pUpsert
1d770 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
1d780 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ine NC_MinMaxAgg
1d790 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f   0x1000  /* min/
1d7a0 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73  max aggregates s
1d7b0 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61  een.  See note a
1d7c0 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  bove */.#define 
1d7d0 4e 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30 78 32  NC_Complex   0x2
1d7e0 30 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  000  /* True if 
1d7f0 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 73 75  a function or su
1d800 62 71 75 65 72 79 20 73 65 65 6e 20 2a 2f 0a 23  bquery seen */.#
1d810 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 57  define NC_AllowW
1d820 69 6e 20 20 30 78 34 30 30 30 20 20 2f 2a 20 57  in  0x4000  /* W
1d830 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
1d840 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
1d850 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
1d860 61 73 57 69 6e 20 20 20 20 30 78 38 30 30 30 20  asWin    0x8000 
1d870 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1d880 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73  window functions
1d890 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1d8a0 20 4e 43 5f 49 73 44 44 4c 20 20 20 20 30 78 31   NC_IsDDL    0x1
1d8b0 30 30 30 30 20 20 2f 2a 20 52 65 73 6f 6c 76 69  0000  /* Resolvi
1d8c0 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 52  ng names in a CR
1d8d0 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 2a  EATE statement *
1d8e0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1d8f0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1d900 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20 64 65 73  owing object des
1d910 63 72 69 62 65 73 20 61 20 73 69 6e 67 6c 65 20  cribes a single 
1d920 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63  ON CONFLICT.** c
1d930 6c 61 75 73 65 20 69 6e 20 61 6e 20 75 70 73 65  lause in an upse
1d940 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 55  rt..**.** The pU
1d950 70 73 65 72 74 54 61 72 67 65 74 20 66 69 65 6c  psertTarget fiel
1d960 64 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 69 66  d is only set if
1d970 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
1d980 20 63 6c 61 75 73 65 20 69 6e 63 6c 75 64 65 73   clause includes
1d990 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72  .** conflict-tar
1d9a0 67 65 74 20 63 6c 61 75 73 65 2e 20 20 28 49 6e  get clause.  (In
1d9b0 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 61 2c   "ON CONFLICT(a,
1d9c0 62 29 22 20 74 68 65 20 22 28 61 2c 62 29 22 20  b)" the "(a,b)" 
1d9d0 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69  is the.** confli
1d9e0 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65  ct-target clause
1d9f0 2e 29 20 20 54 68 65 20 70 55 70 73 65 72 74 54  .)  The pUpsertT
1da00 61 72 67 65 74 57 68 65 72 65 20 69 73 20 74 68  argetWhere is th
1da10 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48  e optional.** WH
1da20 45 52 45 20 63 6c 61 75 73 65 20 75 73 65 64 20  ERE clause used 
1da30 74 6f 20 69 64 65 6e 74 69 66 79 20 70 61 72 74  to identify part
1da40 69 61 6c 20 75 6e 69 71 75 65 20 69 6e 64 65 78  ial unique index
1da50 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65 72  es..**.** pUpser
1da60 74 53 65 74 20 69 73 20 74 68 65 20 6c 69 73 74  tSet is the list
1da70 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70 72 20   of column=expr 
1da80 74 65 72 6d 73 20 6f 66 20 74 68 65 20 55 50 44  terms of the UPD
1da90 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a  ATE statement. .
1daa0 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 53 65  ** The pUpsertSe
1dab0 74 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c 20  t field is NULL 
1dac0 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c 49 43  for a ON CONFLIC
1dad0 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20 54  T DO NOTHING.  T
1dae0 68 65 0a 2a 2a 20 70 55 70 73 65 72 74 57 68 65  he.** pUpsertWhe
1daf0 72 65 20 69 73 20 74 68 65 20 57 48 45 52 45 20  re is the WHERE 
1db00 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 55  clause for the U
1db10 50 44 41 54 45 20 61 6e 64 20 69 73 20 4e 55 4c  PDATE and is NUL
1db20 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57 48 45 52  L if the.** WHER
1db30 45 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74  E clause is omit
1db40 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  ted..*/.struct U
1db50 70 73 65 72 74 20 7b 0a 20 20 45 78 70 72 4c 69  psert {.  ExprLi
1db60 73 74 20 2a 70 55 70 73 65 72 74 54 61 72 67 65  st *pUpsertTarge
1db70 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20  t;  /* Optional 
1db80 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 63  description of c
1db90 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78  onflicting index
1dba0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73   */.  Expr *pUps
1dbb0 65 72 74 54 61 72 67 65 74 57 68 65 72 65 3b 20  ertTargetWhere; 
1dbc0 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
1dbd0 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 65  for partial inde
1dbe0 78 20 74 61 72 67 65 74 73 20 2a 2f 0a 20 20 45  x targets */.  E
1dbf0 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74  xprList *pUpsert
1dc00 53 65 74 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  Set;     /* The 
1dc10 53 45 54 20 63 6c 61 75 73 65 20 66 72 6f 6d 20  SET clause from 
1dc20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55  an ON CONFLICT U
1dc30 50 44 41 54 45 20 2a 2f 0a 20 20 45 78 70 72 20  PDATE */.  Expr 
1dc40 2a 70 55 70 73 65 72 74 57 68 65 72 65 3b 20 20  *pUpsertWhere;  
1dc50 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
1dc60 61 75 73 65 20 66 6f 72 20 74 68 65 20 4f 4e 20  ause for the ON 
1dc70 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20  CONFLICT UPDATE 
1dc80 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69 65 6c  */.  /* The fiel
1dc90 64 73 20 61 62 6f 76 65 20 63 6f 6d 70 72 69 73  ds above compris
1dca0 65 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  e the parse tree
1dcb0 20 66 6f 72 20 74 68 65 20 75 70 73 65 72 74 20   for the upsert 
1dcc0 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54 68 65  clause..  ** The
1dcd0 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 61 72   fields below ar
1dce0 65 20 75 73 65 64 20 74 6f 20 74 72 61 6e 73 66  e used to transf
1dcf0 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  er information f
1dd00 72 6f 6d 20 74 68 65 20 49 4e 53 45 52 54 0a 20  rom the INSERT. 
1dd10 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 64   ** processing d
1dd20 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20 55 50 44  own into the UPD
1dd30 41 54 45 20 70 72 6f 63 65 73 73 69 6e 67 20 77  ATE processing w
1dd40 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67 20  hile generating 
1dd50 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73 65 72  code..  ** Upser
1dd60 74 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d 6f 72  t owns the memor
1dd70 79 20 61 6c 6c 6f 63 61 74 65 64 20 61 62 6f 76  y allocated abov
1dd80 65 2c 20 62 75 74 20 6e 6f 74 20 74 68 65 20 6d  e, but not the m
1dd90 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a  emory below. */.
1dda0 20 20 49 6e 64 65 78 20 2a 70 55 70 73 65 72 74    Index *pUpsert
1ddb0 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 43  Idx;        /* C
1ddc0 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20 70  onstraint that p
1ddd0 55 70 73 65 72 74 54 61 72 67 65 74 20 69 64 65  UpsertTarget ide
1dde0 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20 53 72 63  ntifies */.  Src
1ddf0 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53 72 63  List *pUpsertSrc
1de00 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  ;      /* Table 
1de10 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 2a 2f  to be updated */
1de20 0a 20 20 69 6e 74 20 72 65 67 44 61 74 61 3b 20  .  int regData; 
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1de40 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 68  First register h
1de50 6f 6c 64 69 6e 67 20 61 72 72 61 79 20 6f 66 20  olding array of 
1de60 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e 74 20  VALUES */.  int 
1de70 69 44 61 74 61 43 75 72 3b 20 20 20 20 20 20 20  iDataCur;       
1de80 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1de90 66 20 74 68 65 20 64 61 74 61 20 63 75 72 73 6f  f the data curso
1dea0 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78 43  r */.  int iIdxC
1deb0 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
1dec0 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1ded0 20 66 69 72 73 74 20 69 6e 64 65 78 20 63 75 72   first index cur
1dee0 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sor */.};../*.**
1def0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1df00 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1df10 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
1df20 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   all information
1df30 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65  .** needed to ge
1df40 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20  nerate code for 
1df50 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
1df60 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
1df70 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
1df80 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20 63  comment on the c
1df90 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65 67 69 73  omputeLimitRegis
1dfa0 74 65 72 73 28 29 20 72 6f 75 74 69 6e 65 20 66  ters() routine f
1dfb0 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c 65 64  or a.** detailed
1dfc0 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20   description of 
1dfd0 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74  the meaning of t
1dfe0 68 65 20 69 4c 69 6d 69 74 20 61 6e 64 20 69 4f  he iLimit and iO
1dff0 66 66 73 65 74 20 66 69 65 6c 64 73 2e 0a 2a 2a  ffset fields..**
1e000 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
1e010 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
1e020 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
1e030 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
1e040 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
1e050 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
1e060 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
1e070 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
1e080 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
1e090 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
1e0a0 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
1e0b0 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
1e0c0 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
1e0d0 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
1e0e0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1e0f0 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
1e100 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
1e110 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
1e120 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
1e130 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
1e140 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
1e150 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
1e160 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
1e170 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
1e180 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
1e190 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
1e1a0 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
1e1b0 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
1e1c0 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1e1d0 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
1e1e0 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
1e1f0 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
1e200 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
1e210 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
1e220 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
1e230 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
1e240 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
1e250 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
1e260 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
1e270 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
1e280 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
1e290 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2b0 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
1e2c0 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
1e2d0 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
1e2e0 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53  T */.  LogEst nS
1e2f0 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a  electRow;     /*
1e300 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
1e310 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
1e320 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61   */.  u32 selFla
1e330 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
1e340 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c  Various SF_* val
1e350 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69  ues */.  int iLi
1e360 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20  mit, iOffset;   
1e370 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1e380 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49  ers holding LIMI
1e390 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74  T & OFFSET count
1e3a0 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c  ers */.  u32 sel
1e3b0 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Id;             
1e3c0 2f 2a 20 55 6e 69 71 75 65 20 69 64 65 6e 74 69  /* Unique identi
1e3d0 66 69 65 72 20 6e 75 6d 62 65 72 20 66 6f 72 20  fier number for 
1e3e0 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20  this SELECT */. 
1e3f0 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68   int addrOpenEph
1e400 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70  m[2];   /* OP_Op
1e410 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20  enEphem opcodes 
1e420 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20  related to this 
1e430 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c  select */.  SrcL
1e440 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
1e450 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
1e460 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
1e470 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
1e480 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
1e490 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1e4a0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
1e4b0 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
1e4c0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
1e4d0 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
1e4e0 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
1e4f0 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
1e500 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1e510 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
1e520 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
1e530 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
1e540 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
1e550 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
1e560 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
1e570 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
1e580 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
1e590 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
1e5a0 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
1e5b0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
1e5c0 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
1e5d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
1e5e0 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
1e5f0 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
1e600 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  d. */.  With *pW
1e610 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ith;           /
1e620 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74  * WITH clause at
1e630 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73  tached to this s
1e640 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20  elect. Or NULL. 
1e650 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1e660 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
1e670 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e  C.  Window *pWin
1e680 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ;          /* Li
1e690 73 74 20 6f 66 20 77 69 6e 64 6f 77 20 66 75 6e  st of window fun
1e6a0 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e 64  ctions */.  Wind
1e6b0 6f 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20 20 20  ow *pWinDefn;   
1e6c0 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 6e 61     /* List of na
1e6d0 6d 65 64 20 77 69 6e 64 6f 77 20 64 65 66 69 6e  med window defin
1e6e0 69 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  itions */.#endif
1e6f0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
1e700 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
1e710 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
1e720 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
1e730 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
1e740 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a  elect Flag"..**.
1e750 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1e760 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1e770 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a  d via assert()).
1e780 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67  **     SF_HasAgg
1e790 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67       == NC_HasAg
1e7a0 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d  g.**     SF_MinM
1e7b0 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e  axAgg  == NC_Min
1e7c0 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51  MaxAgg     == SQ
1e7d0 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
1e7e0 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64  .**     SF_Fixed
1e7f0 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55  Limit == WHERE_U
1e800 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66  SE_LIMIT.*/.#def
1e810 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20  ine SF_Distinct 
1e820 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f        0x00001  /
1e830 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20  * Output should 
1e840 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23  be DISTINCT */.#
1e850 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20  define SF_All   
1e860 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32           0x00002
1e870 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68    /* Includes th
1e880 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f  e ALL keyword */
1e890 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f  .#define SF_Reso
1e8a0 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30  lved       0x000
1e8b0 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65  04  /* Identifie
1e8c0 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  rs have been res
1e8d0 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  olved */.#define
1e8e0 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20   SF_Aggregate   
1e8f0 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43     0x00008  /* C
1e900 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63  ontains agg func
1e910 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50  tions or a GROUP
1e920 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   BY */.#define S
1e930 46 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20  F_HasAgg        
1e940 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e   0x00010  /* Con
1e950 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
1e960 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
1e970 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65  fine SF_UsesEphe
1e980 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20  meral  0x00020  
1e990 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e  /* Uses the Open
1e9a0 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1e9b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45   */.#define SF_E
1e9c0 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78  xpanded       0x
1e9d0 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65  00040  /* sqlite
1e9e0 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20  3SelectExpand() 
1e9f0 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a  called on this *
1ea00 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1ea10 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30  TypeInfo    0x00
1ea20 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62  080  /* FROM sub
1ea30 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62  queries have Tab
1ea40 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23  le metadata */.#
1ea50 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75  define SF_Compou
1ea60 6e 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30  nd       0x00100
1ea70 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63    /* Part of a c
1ea80 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f  ompound query */
1ea90 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
1eaa0 65 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32  es         0x002
1eab0 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  00  /* Synthesiz
1eac0 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
1ead0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1eae0 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20   SF_MultiValue  
1eaf0 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53     0x00400  /* S
1eb00 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72  ingle VALUES ter
1eb10 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  m with multiple 
1eb20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1eb30 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
1eb40 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61    0x00800  /* Pa
1eb50 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
1eb60 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
1eb70 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1eb80 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30  MinMaxAgg      0
1eb90 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65  x01000  /* Aggre
1eba0 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  gate containing 
1ebb0 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a  min() or max() *
1ebc0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63  /.#define SF_Rec
1ebd0 75 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32  ursive      0x02
1ebe0 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75  000  /* The recu
1ebf0 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20  rsive part of a 
1ec00 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f  recursive CTE */
1ec10 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65  .#define SF_Fixe
1ec20 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30  dLimit     0x040
1ec30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f  00  /* nSelectRo
1ec40 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74  w set by a const
1ec50 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65  ant LIMIT */.#de
1ec60 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e  fine SF_MaybeCon
1ec70 76 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20  vert   0x08000  
1ec80 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43  /* Need convertC
1ec90 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1eca0 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1ecb0 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65  fine SF_Converte
1ecc0 64 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20  d      0x10000  
1ecd0 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d  /* By convertCom
1ece0 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1ecf0 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
1ed00 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64  ne SF_IncludeHid
1ed10 64 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a  den  0x20000  /*
1ed20 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20   Include hidden 
1ed30 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75  columns in outpu
1ed40 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  t */.#define SF_
1ed50 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20 30  ComplexResult  0
1ed60 78 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75 6c  x40000  /* Resul
1ed70 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71 75  t contains subqu
1ed80 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ery or function 
1ed90 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 57 68  */.#define SF_Wh
1eda0 65 72 65 42 65 67 69 6e 20 20 20 20 20 30 78 38  ereBegin     0x8
1edb0 30 30 30 30 20 20 2f 2a 20 52 65 61 6c 6c 79 20  0000  /* Really 
1edc0 61 20 57 68 65 72 65 42 65 67 69 6e 28 29 20 63  a WhereBegin() c
1edd0 61 6c 6c 2e 20 20 44 65 62 75 67 20 4f 6e 6c 79  all.  Debug Only
1ede0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72   */../*.** The r
1edf0 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45  esults of a SELE
1ee00 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69  CT can be distri
1ee10 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c  buted in several
1ee20 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65   ways, as define
1ee30 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74  d.** by one of t
1ee40 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1ee50 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20  ros.  The "SRT" 
1ee60 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45  prefix means "SE
1ee70 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54  LECT Result.** T
1ee80 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ype"..**.**     
1ee90 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
1eea0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1eeb0 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70   a key in a temp
1eec0 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20  orary index.**  
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eee0 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79     identified by
1eef0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1ef00 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1ef10 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76  xcept      Remov
1ef20 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  e results from t
1ef30 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64  he temporary ind
1ef40 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ex pDest->iSDPar
1ef50 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1ef60 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f  _Exists      Sto
1ef70 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79  re a 1 in memory
1ef80 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44   cell pDest->iSD
1ef90 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75  Parm if the resu
1efa0 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  lt.**           
1efb0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73            set is
1efc0 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a   not empty..**.*
1efd0 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72  *     SRT_Discar
1efe0 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20  d     Throw the 
1eff0 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54  results away.  T
1f000 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53  his is used by S
1f010 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20  ELECT.**        
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1f030 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
1f040 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e  riggers whose on
1f050 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a  ly purpose is.**
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f070 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66       the side-ef
1f080 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f  fects of functio
1f090 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  ns..**.** All of
1f0a0 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66   the above are f
1f0b0 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68  ree to ignore th
1f0c0 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61  eir ORDER BY cla
1f0d0 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a  use. Those that.
1f0e0 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68  ** follow must h
1f0f0 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42  onor the ORDER B
1f100 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1f110 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20      SRT_Output  
1f120 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72      Generate a r
1f130 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73  ow of output (us
1f140 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c  ing the OP_Resul
1f150 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20  tRow.**         
1f160 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f              opco
1f170 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77  de) for each row
1f180 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
1f190 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  et..**.**     SR
1f1a0 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e  T_Mem         On
1f1b0 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20  ly valid if the 
1f1c0 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67  result is a sing
1f1d0 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20  le column..**   
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1f0 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73    Store the firs
1f200 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
1f210 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77  first result row
1f220 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f230 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73          in regis
1f240 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
1f250 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20  rm then abandon 
1f260 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20  the rest.**     
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f280 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54  of the query.  T
1f290 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1f2a0 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31  implies "LIMIT 1
1f2b0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1f2c0 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65  _Set         The
1f2d0 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20   result must be 
1f2e0 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1f2f0 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20    Store each.** 
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f310 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c      row of resul
1f320 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20  t as the key in 
1f330 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1f340 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70               App
1f360 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ly the affinity 
1f370 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62  pDest->affSdst b
1f380 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a  efore storing.**
1f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3a0 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55       results.  U
1f3b0 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
1f3c0 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e   "IN (SELECT ...
1f3d0 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  )"..**.**     SR
1f3e0 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72  T_EphemTab    Cr
1f3f0 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72  eate an temporar
1f400 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1f410 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65  SDParm and store
1f420 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f430 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75          the resu
1f440 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75  lt there. The cu
1f450 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65  rsor is left ope
1f460 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20  n after.**      
1f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f480 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20  eturning.  This 
1f490 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  is like SRT_Tabl
1f4a0 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  e except that.**
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4c0 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e       this destin
1f4d0 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70  ation uses OP_Op
1f4e0 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63  enEphemeral to c
1f4f0 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  reate.**        
1f500 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1f510 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a   table first..**
1f520 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f  .**     SRT_Coro
1f530 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65  utine   Generate
1f540 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68   a co-routine th
1f550 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77  at returns a new
1f560 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20   row of.**      
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f580 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65  esults each time
1f590 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
1f5a0 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   The entry point
1f5b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f5c0 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
1f5d0 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f  o-routine is sto
1f5e0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1f5f0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a  pDest->iSDParm.*
1f600 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f610 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65        and the re
1f620 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72  sult row is stor
1f630 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65  ed in pDest->nDe
1f640 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  st registers.** 
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74      starting wit
1f670 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a  h pDest->iSdst..
1f680 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61  **.**     SRT_Ta
1f690 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  ble       Store 
1f6a0 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f  results in tempo
1f6b0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1f6c0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1f6d0 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20    SRT_Fifo      
1f6e0 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1f6f0 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65  RT_EphemTab exce
1f700 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  pt that the tabl
1f710 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1f720 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75           is assu
1f730 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62  med to already b
1f740 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66  e open.  SRT_Fif
1f750 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  o has.**        
1f760 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1f770 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70   additional prop
1f780 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62  erty of being ab
1f790 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20  le to ignore.** 
1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7b0 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59      the ORDER BY
1f7c0 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1f7d0 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20     SRT_DistFifo 
1f7e0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1f7f0 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1f800 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1f810 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1f820 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74               But
1f830 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72   also use tempor
1f840 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1f850 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a  >iSDParm+1 as.**
1f860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f870 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66       a record of
1f880 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c   all prior resul
1f890 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e  ts and ignore an
1f8a0 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20  y duplicate.**  
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8c0 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d     rows.  Name m
1f8d0 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74  eans:  "Distinct
1f8e0 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Fifo"..**.**   
1f8f0 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20    SRT_Queue     
1f900 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1f910 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1f920 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1f930 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20   (really.**     
1f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f950 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65  an index).  Appe
1f960 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75  nd a sequence nu
1f970 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  mber so that all
1f980 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20   entries.**     
1f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9a0 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a  are distinct..**
1f9b0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1f9c0 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65  Queue   Store re
1f9d0 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1f9e0 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1f9f0 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a  SDParm only if.*
1fa00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1fa10 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72        the same r
1fa20 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20  ecord has never 
1fa30 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f  been stored befo
1fa40 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20  re.  The.**     
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa60 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e  index at pDest->
1fa70 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61  iSDParm+1 hold a
1fa80 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e  ll prior stores.
1fa90 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  .*/.#define SRT_
1faa0 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20  Union        1  
1fab0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1fac0 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1fad0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1fae0 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20  RT_Except       
1faf0 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73  2  /* Remove res
1fb00 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e  ult from a UNION
1fb10 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1fb20 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20  e SRT_Exists    
1fb30 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31     3  /* Store 1
1fb40 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
1fb50 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23  s not empty */.#
1fb60 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61  define SRT_Disca
1fb70 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f  rd      4  /* Do
1fb80 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65   not save the re
1fb90 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a  sults anywhere *
1fba0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69  /.#define SRT_Fi
1fbb0 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a  fo         5  /*
1fbc0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1fbd0 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1fbe0 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1fbf0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1fc00 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20  tFifo     6  /* 
1fc10 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62  Like SRT_Fifo, b
1fc20 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1fc30 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
1fc40 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20  e SRT_Queue     
1fc50 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72     7  /* Store r
1fc60 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75  esult in an queu
1fc70 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1fc80 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20  _DistQueue    8 
1fc90 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65   /* Like SRT_Que
1fca0 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  ue, but unique r
1fcb0 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a  esults only */..
1fcc0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1fcd0 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
1fce0 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
1fcf0 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
1fd00 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
1fd10 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
1fd20 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65  )<=SRT_DistQueue
1fd30 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f  )..#define SRT_O
1fd40 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f  utput       9  /
1fd50 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f  * Output each ro
1fd60 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
1fd70 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20  define SRT_Mem  
1fd80 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74         10  /* St
1fd90 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ore result in a 
1fda0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23  memory cell */.#
1fdb0 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20  define SRT_Set  
1fdc0 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74         11  /* St
1fdd0 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b  ore results as k
1fde0 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1fdf0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1fe00 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f  phemTab    12  /
1fe10 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65  * Create transie
1fe20 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65  nt tab and store
1fe30 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
1fe40 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43  */.#define SRT_C
1fe50 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f  oroutine   13  /
1fe60 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e  * Generate a sin
1fe70 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
1fe80 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1fe90 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20  _Table       14 
1fea0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1feb0 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
1fec0 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
1fed0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1fee0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
1fef0 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
1ff00 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20  where to put of 
1ff10 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a  the results of.*
1ff20 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  * a SELECT state
1ff30 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
1ff40 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75  SelectDest {.  u
1ff50 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20  8 eDest;        
1ff60 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
1ff70 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
1ff80 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
1ff90 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69  _* above. */.  i
1ffa0 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
1ffb0 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
1ffc0 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
1ffd0 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
1ffe0 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
1fff0 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
20000 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
20010 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
20020 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
20030 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20  nt nSdst;       
20040 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20050 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
20060 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ated */.  char *
20070 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f  zAffSdst;      /
20080 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
20090 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
200a0 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  Set */.  ExprLis
200b0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a  t *pOrderBy;  /*
200c0 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72   Key columns for
200d0 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53   SRT_Queue and S
200e0 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a  RT_DistQueue */.
200f0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
20100 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
20110 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
20120 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
20130 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
20140 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65  T.** tables, the
20150 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
20160 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
20170 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
20180 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
20190 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
201a0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
201b0 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
201c0 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
201d0 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
201e0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
201f0 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
20200 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
20210 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
20220 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
20230 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
20240 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69   done within tri
20250 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
20260 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
20270 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
20280 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
20290 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
202a0 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
202b0 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
202c0 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
202d0 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
202e0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
202f0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
20300 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
20310 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
20320 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
20330 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
20340 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
20350 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
20360 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
20370 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
20380 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
20390 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
203a0 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
203b0 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
203c0 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
203d0 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
203e0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
203f0 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
20400 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
20410 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
20420 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73  At least one ins
20430 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
20440 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
20450 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
20460 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20  each.** trigger 
20470 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65  that may be fire
20480 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20  d while parsing 
20490 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  an INSERT, UPDAT
204a0 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73  E or DELETE.** s
204b0 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75  tatement. All su
204c0 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73  ch objects are s
204d0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e  tored in the lin
204e0 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
204f0 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69  at.** Parse.pTri
20500 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65  ggerPrg and dele
20510 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65  ted once stateme
20520 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68  nt compilation h
20530 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c  as been.** compl
20540 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64  eted..**.** A Vd
20550 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  be sub-program t
20560 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
20570 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e  he body and WHEN
20580 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67   clause of trigg
20590 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  er.** TriggerPrg
205a0 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d  .pTrigger, assum
205b0 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e  ing a default ON
205c0 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
205d0 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72   of.** TriggerPr
205e0 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f  g.orconf, is sto
205f0 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67  red in the Trigg
20600 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76  erPrg.pProgram v
20610 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  ariable..** The 
20620 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
20630 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e  g list never con
20640 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65  tains two entrie
20650 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a  s with the same.
20660 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f  ** values for bo
20670 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20  th pTrigger and 
20680 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  orconf..**.** Th
20690 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
206a0 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c  lmask[0] variabl
206b0 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61  e is set to a ma
206c0 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
206d0 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20  mns.** accessed 
206e0 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72  (or set to 0 for
206f0 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20   triggers fired 
20700 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49  as a result of I
20710 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65  NSERT.** stateme
20720 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
20730 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
20740 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
20750 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
20760 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
20770 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
20780 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
20790 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
207a0 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
207b0 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
207c0 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
207d0 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
207e0 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
207f0 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
20800 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
20810 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
20820 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
20830 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
20840 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
20850 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
20860 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
20870 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
20880 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
20890 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
208a0 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
208b0 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d   u32 aColmask[2]
208c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
208d0 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e  s of old.*, new.
208e0 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73  * columns access
208f0 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
20900 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61  The yDbMask data
20910 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74  type for the bit
20920 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61  mask of all atta
20930 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
20940 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
20950 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
20960 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
20970 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53   char yDbMask[(S
20980 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
20990 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69  ED+9)/8];.# defi
209a0 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
209b0 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f  I)    (((M)[(I)/
209c0 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29  8]&(1<<((I)&7)))
209d0 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
209e0 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
209f0 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69   memset((M),0,si
20a00 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e  zeof(M)).# defin
20a10 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
20a20 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c       (M)[(I)/8]|
20a30 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20  =(1<<((I)&7)).# 
20a40 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
20a50 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65  Zero(M)   sqlite
20a60 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
20a70 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
20a80 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73  kNonZero(M)   (s
20a90 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
20aa0 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65  ero(M)==0).#else
20ab0 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
20ac0 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b  ned int yDbMask;
20ad0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
20ae0 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
20af0 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29  M)&(((yDbMask)1)
20b00 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65  <<(I)))!=0).# de
20b10 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
20b20 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20  M)      (M)=0.# 
20b30 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
20b40 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28  (M,I)     (M)|=(
20b50 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
20b60 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
20b70 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28  skAllZero(M)   (
20b80 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  M)==0.# define D
20b90 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
20ba0 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a    (M)!=0.#endif.
20bb0 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
20bc0 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
20bd0 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
20be0 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
20bf0 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
20c00 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
20c10 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
20c20 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
20c30 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
20c40 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
20c50 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
20c60 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
20c70 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
20c80 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
20c90 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
20ca0 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
20cb0 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
20cc0 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
20cd0 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
20ce0 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
20cf0 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
20d00 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
20d10 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
20d20 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
20d30 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
20d40 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
20d50 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
20d60 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
20d70 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
20d80 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
20d90 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
20da0 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
20db0 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20  shared-cache.** 
20dc0 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
20dd0 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73  ed (if sqlite3Ts
20de0 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61  d()->useSharedDa
20df0 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65  ta is true). The
20e00 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  y are.** used to
20e10 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f   store the set o
20e20 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65  f table-locks re
20e30 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74  quired by the st
20e40 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a  atement being.**
20e50 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74   compiled. Funct
20e60 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ion sqlite3Table
20e70 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74  Lock() is used t
20e80 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f  o add entries to
20e90 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f   the.** list..*/
20ea0 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a  .struct Parse {.
20eb0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
20ec0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61         /* The ma
20ed0 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75  in database stru
20ee0 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20  cture */.  char 
20ef0 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
20f00 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
20f10 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
20f20 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
20f30 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
20f40 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
20f50 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
20f60 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
20f70 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
20f80 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69  ode from executi
20f90 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61  on */.  u8 colNa
20fa0 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20  mesSet;      /* 
20fb0 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f  TRUE after OP_Co
20fc0 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65  lumnName has bee
20fd0 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62  n issued to pVdb
20fe0 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53  e */.  u8 checkS
20ff0 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43  chema;      /* C
21000 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f  auses schema coo
21010 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20  kie check after 
21020 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38  an error */.  u8
21030 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20   nested;        
21040 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21050 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
21060 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20  the parser/code 
21070 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75  generator */.  u
21080 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20  8 nTempReg;     
21090 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
210a0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
210b0 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67  ters in aTempReg
210c0 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c  [] */.  u8 isMul
210d0 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20  tiWrite;     /* 
210e0 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
210f0 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73  t may modify/ins
21100 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ert multiple row
21110 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f  s */.  u8 mayAbo
21120 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rt;         /* T
21130 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
21140 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42   may throw an AB
21150 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f  ORT exception */
21160 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e  .  u8 hasCompoun
21170 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20  d;      /* Need 
21180 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72  to invoke conver
21190 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
211a0 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20  oSubquery() */. 
211b0 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f   u8 okConstFacto
211c0 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66  r;    /* OK to f
211d0 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
211e0 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61  nts */.  u8 disa
211f0 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a  bleLookaside; /*
21200 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   Number of times
21210 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62   lookaside has b
21220 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a  een disabled */.
21230 20 20 75 38 20 64 69 73 61 62 6c 65 56 74 61 62    u8 disableVtab
21240 3b 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c  ;      /* Disabl
21250 65 20 61 6c 6c 20 76 69 72 74 75 61 6c 20 74 61  e all virtual ta
21260 62 6c 65 73 20 66 6f 72 20 74 68 69 73 20 70 61  bles for this pa
21270 72 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  rse */.  int nRa
21280 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
21290 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
212a0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
212b0 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
212c0 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
212d0 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
212e0 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
212f0 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
21300 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
21310 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21320 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
21330 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
21340 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
21350 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
21360 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
21370 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
21380 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
21390 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
213a0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
213b0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
213c0 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20  nt szOpAlloc;   
213d0 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
213e0 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c  memory space all
213f0 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e  ocated for Vdbe.
21400 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69  aOp[] */.  int i
21410 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20  SelfTab;        
21420 2f 2a 20 54 61 62 6c 65 20 61 73 73 6f 63 69 61  /* Table associa
21430 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e 64 65  ted with an inde
21440 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65  x on expr, or ne
21450 67 61 74 69 76 65 0a 20 20 20 20 20 20 20 20 20  gative.         
21460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
21470 20 6f 66 20 74 68 65 20 62 61 73 65 20 72 65 67   of the base reg
21480 69 73 74 65 72 20 64 75 72 69 6e 67 20 63 68 65  ister during che
21490 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65 76  ck-constraint ev
214a0 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  al */.  int nLab
214b0 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
214c0 54 68 65 20 2a 6e 65 67 61 74 69 76 65 2a 20 6f  The *negative* o
214d0 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
214e0 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20  labels used */. 
214f0 20 69 6e 74 20 6e 4c 61 62 65 6c 41 6c 6c 6f 63   int nLabelAlloc
21500 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ;     /* Number 
21510 6f 66 20 73 6c 6f 74 73 20 69 6e 20 61 4c 61 62  of slots in aLab
21520 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  el */.  int *aLa
21530 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
21540 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
21550 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78  e labels */.  Ex
21560 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
21570 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
21580 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
21590 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
215a0 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
215b0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
215c0 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
215d0 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
215e0 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
215f0 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
21600 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
21610 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
21620 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
21630 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
21640 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
21650 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
21660 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  s */.  int regRo
21670 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
21680 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
21690 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
216a0 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
216b0 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
216c0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
216d0 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
216e0 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
216f0 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
21700 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
21710 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
21720 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
21730 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
21740 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74  program */.  int
21750 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20   nSelect;       
21760 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53    /* Number of S
21770 45 4c 45 43 54 20 73 74 6d 74 73 2e 20 43 6f 75  ELECT stmts. Cou
21780 6e 74 65 72 20 66 6f 72 20 53 65 6c 65 63 74 2e  nter for Select.
21790 73 65 6c 49 64 20 2a 2f 0a 23 69 66 6e 64 65 66  selId */.#ifndef
217a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
217b0 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
217c0 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
217d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
217e0 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
217f0 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
21800 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
21810 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
21820 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
21830 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
21840 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
21850 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
21860 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
21870 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
21880 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  T counters */.  
21890 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
218a0 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
218b0 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
218c0 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
218d0 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
218e0 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
218f0 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
21900 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
21910 6f 72 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  or */.  Parse *p
21920 50 61 72 65 6e 74 50 61 72 73 65 3b 20 2f 2a 20  ParentParse; /* 
21930 50 61 72 65 6e 74 20 70 61 72 73 65 72 20 69 66  Parent parser if
21940 20 74 68 69 73 20 70 61 72 73 65 72 20 69 73 20   this parser is 
21950 6e 65 73 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nested */.  int 
21960 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20  addrCrTab;      
21970 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
21980 50 5f 43 72 65 61 74 65 42 74 72 65 65 20 6f 70  P_CreateBtree op
21990 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54  code on CREATE T
219a0 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51  ABLE */.  u32 nQ
219b0 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f  ueryLoop;      /
219c0 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20  * Est number of 
219d0 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  iterations of a 
219e0 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e  query (10*log2(N
219f0 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  )) */.  u32 oldm
21a00 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
21a10 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
21a20 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
21a30 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
21a40 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
21a50 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
21a60 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
21a70 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
21a80 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
21a90 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
21aa0 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
21ab0 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
21ac0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
21ad0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
21ae0 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
21af0 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
21b00 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
21b10 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
21b20 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
21b30 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  /***********
21b40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21b70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
21b80 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f 76    ** Fields abov
21b90 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  e must be initia
21ba0 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20  lized to zero.  
21bb0 54 68 65 20 66 69 65 6c 64 73 20 74 68 61 74 20  The fields that 
21bc0 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77  follow,.  ** dow
21bd0 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69  n to the beginni
21be0 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  ng of the recurs
21bf0 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20  ive section, do 
21c00 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 0a 20  not need to be. 
21c10 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   ** initialized 
21c20 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20  as they will be 
21c30 73 65 74 20 62 65 66 6f 72 65 20 62 65 69 6e 67  set before being
21c40 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f 75 6e   used.  The boun
21c50 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64 65 74  dary is.  ** det
21c60 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66 73 65  ermined by offse
21c70 74 6f 66 28 50 61 72 73 65 2c 61 54 65 6d 70 52  tof(Parse,aTempR
21c80 65 67 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  eg)..  *********
21c90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21cb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21cc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21cd0 2a 2f 0a 0a 20 20 69 6e 74 20 61 54 65 6d 70 52  */..  int aTempR
21ce0 65 67 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a  eg[8];        /*
21cf0 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f   Holding area fo
21d00 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  r temporary regi
21d10 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sters */.  Token
21d20 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20   sNameToken;    
21d30 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68     /* Token with
21d40 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68   unqualified sch
21d50 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20  ema object name 
21d60 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
21d70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21d80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21d90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
21db0 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    ** Above is co
21dc0 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
21dd0 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
21de0 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
21df0 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
21e00 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
21e10 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62    The boundary b
21e20 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f  etween these two
21e30 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65   regions is dete
21e40 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e  rmined.  ** usin
21e50 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  g offsetof(Parse
21e60 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20  ,sLastToken) so 
21e70 74 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66  the sLastToken f
21e80 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65  ield must be the
21e90 0a 20 20 2a 2a 20 66 69 72 73 74 20 66 69 65 6c  .  ** first fiel
21ea0 64 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69  d in the recursi
21eb0 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a  ve region..  ***
21ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21f00 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20  *****/..  Token 
21f10 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
21f20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f    /* The last to
21f30 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ken parsed */.  
21f40 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20  ynVar nVar;     
21f50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
21f60 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
21f70 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
21f80 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
21f90 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72   u8 iPkSortOrder
21fa0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53  ;          /* AS
21fb0 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e  C or DESC for IN
21fc0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
21fd0 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69  Y */.  u8 explai
21fe0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
21ff0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
22000 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20  EXPLAIN flag is 
22010 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65  found on the que
22020 72 79 20 2a 2f 0a 23 69 66 20 21 28 64 65 66 69  ry */.#if !(defi
22030 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22040 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20 26 26  VIRTUALTABLE) &&
22050 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
22060 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29  OMIT_ALTERTABLE)
22070 29 0a 20 20 75 38 20 65 50 61 72 73 65 4d 6f 64  ).  u8 eParseMod
22080 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
22090 20 50 41 52 53 45 5f 4d 4f 44 45 5f 58 58 58 20   PARSE_MODE_XXX 
220a0 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 65 6e 64  constant */.#end
220b0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
220c0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
220d0 42 4c 45 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c  BLE.  int nVtabL
220e0 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
220f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
22100 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c  tual tables to l
22110 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ock */.#endif.  
22120 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
22130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
22140 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69  ression tree hei
22150 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73  ght of current s
22160 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66  ub-select */.#if
22170 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22180 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 61  _EXPLAIN.  int a
22190 64 64 72 45 78 70 6c 61 69 6e 3b 20 20 20 20 20  ddrExplain;     
221a0 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
221b0 6f 66 20 63 75 72 72 65 6e 74 20 4f 50 5f 45 78  of current OP_Ex
221c0 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a  plain opcode */.
221d0 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a  #endif.  VList *
221e0 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  pVList;         
221f0 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65     /* Mapping be
22200 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e  tween variable n
22210 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73  ames and numbers
22220 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
22230 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
22240 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
22250 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
22260 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
22270 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
22280 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
22290 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
222a0 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
222b0 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
222c0 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
222d0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
222e0 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
222f0 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
22300 54 41 42 4c 45 20 2a 2f 0a 20 20 49 6e 64 65 78  TABLE */.  Index
22310 20 2a 70 4e 65 77 49 6e 64 65 78 3b 20 20 20 20   *pNewIndex;    
22320 20 20 20 20 20 2f 2a 20 41 6e 20 69 6e 64 65 78       /* An index
22330 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
22340 65 64 20 62 79 20 43 52 45 41 54 45 20 49 4e 44  ed by CREATE IND
22350 45 58 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  EX..            
22360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22370 2a 2a 20 41 6c 73 6f 20 75 73 65 64 20 74 6f 20  ** Also used to 
22380 68 6f 6c 64 20 72 65 64 75 6e 64 61 6e 74 20 55  hold redundant U
22390 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
223a0 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s.              
223b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
223c0 20 64 75 72 69 6e 67 20 61 20 52 45 4e 41 4d 45   during a RENAME
223d0 20 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 54 72 69   COLUMN */.  Tri
223e0 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65  gger *pNewTrigge
223f0 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  r;     /* Trigge
22400 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63  r under construc
22410 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52  t by a CREATE TR
22420 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74  IGGER */.  const
22430 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
22440 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20  ext; /* The 6th 
22450 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d  parameter to db-
22460 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73  >xAuth callbacks
22470 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
22480 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
22490 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
224a0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
224b0 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
224c0 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
224d0 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
224e0 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
224f0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
22500 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
22510 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
22520 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
22530 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
22540 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
22550 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
22560 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
22570 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
22580 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
22590 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
225a0 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
225b0 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20  d triggers */.  
225c0 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
225d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
225e0 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65  rent WITH clause
225f0 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57  , or NULL */.  W
22600 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65  ith *pWithToFree
22610 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65  ;        /* Free
22620 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63   this WITH objec
22630 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  t at the end of 
22640 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 23 69 66  the parse */.#if
22650 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22660 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 52 65  _ALTERTABLE.  Re
22670 6e 61 6d 65 54 6f 6b 65 6e 20 2a 70 52 65 6e 61  nameToken *pRena
22680 6d 65 3b 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e  me;     /* Token
22690 73 20 73 75 62 6a 65 63 74 20 74 6f 20 72 65 6e  s subject to ren
226a0 61 6d 69 6e 67 20 62 79 20 41 4c 54 45 52 20 54  aming by ALTER T
226b0 41 42 4c 45 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  ABLE */.#endif.}
226c0 3b 0a 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  ;..#define PARSE
226d0 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 20 20 20 20  _MODE_NORMAL    
226e0 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 50 41      0.#define PA
226f0 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52 45  RSE_MODE_DECLARE
22700 5f 56 54 41 42 20 20 31 0a 23 64 65 66 69 6e 65  _VTAB  1.#define
22710 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41   PARSE_MODE_RENA
22720 4d 45 5f 43 4f 4c 55 4d 4e 20 32 0a 23 64 65 66  ME_COLUMN 2.#def
22730 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52  ine PARSE_MODE_R
22740 45 4e 41 4d 45 5f 54 41 42 4c 45 20 20 33 0a 0a  ENAME_TABLE  3..
22750 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20  /*.** Sizes and 
22760 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61 72 69  pointers of vari
22770 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74 68 65  ous parts of the
22780 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a   Parse object..*
22790 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
227a0 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28  HDR_SZ offsetof(
227b0 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29 20  Parse,aTempReg) 
227c0 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72  /* Recursive par
227d0 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a  t w/o aColCache*
227e0 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
227f0 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65  RECURSE_SZ offse
22800 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54  tof(Parse,sLastT
22810 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75  oken)    /* Recu
22820 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
22830 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
22840 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73  _SZ (sizeof(Pars
22850 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45  e)-PARSE_RECURSE
22860 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75  _SZ) /* Non-recu
22870 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
22880 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
22890 28 58 29 20 28 28 28 63 68 61 72 2a 29 28 58 29  (X) (((char*)(X)
228a0 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  )+PARSE_RECURSE_
228b0 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20  SZ)  /* Pointer 
228c0 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a  to tail */../*.*
228d0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
228e0 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
228f0 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
22900 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
22910 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
22920 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
22930 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
22940 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
22950 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
22960 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
22970 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65   (pParse->eParse
22980 4d 6f 64 65 3d 3d 50 41 52 53 45 5f 4d 4f 44 45  Mode==PARSE_MODE
22990 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 29 0a 23  _DECLARE_VTAB).#
229a0 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
229b0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
229c0 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23 64 65  LTERTABLE).  #de
229d0 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f  fine IN_RENAME_O
229e0 42 4a 45 43 54 20 30 0a 23 65 6c 73 65 0a 20 20  BJECT 0.#else.  
229f0 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d  #define IN_RENAM
22a00 45 5f 4f 42 4a 45 43 54 20 28 70 50 61 72 73 65  E_OBJECT (pParse
22a10 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3e 3d 50 41  ->eParseMode>=PA
22a20 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f  RSE_MODE_RENAME_
22a30 43 4f 4c 55 4d 4e 29 0a 23 65 6e 64 69 66 0a 0a  COLUMN).#endif..
22a40 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
22a50 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
22a60 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e 65 64  ABLE) && defined
22a70 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  (SQLITE_OMIT_ALT
22a80 45 52 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69  ERTABLE).  #defi
22a90 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41  ne IN_SPECIAL_PA
22aa0 52 53 45 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  RSE 0.#else.  #d
22ab0 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c  efine IN_SPECIAL
22ac0 5f 50 41 52 53 45 20 28 70 50 61 72 73 65 2d 3e  _PARSE (pParse->
22ad0 65 50 61 72 73 65 4d 6f 64 65 21 3d 50 41 52 53  eParseMode!=PARS
22ae0 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 29 0a 23  E_MODE_NORMAL).#
22af0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
22b00 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
22b10 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
22b20 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
22b30 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
22b40 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
22b50 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
22b60 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
22b70 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
22b80 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
22b90 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
22ba0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
22bb0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
22bc0 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
22bd0 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
22be0 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
22bf0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
22c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22c10 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
22c20 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
22c30 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
22c40 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
22c50 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
22c60 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
22c70 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
22c80 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
22c90 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ):.**    OPFLAG_
22ca0 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20  LENGTHARG    == 
22cb0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
22cc0 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TH.**    OPFLAG_
22cd0 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20  TYPEOFARG    == 
22ce0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
22cf0 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  OF.**    OPFLAG_
22d00 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20  BULKCSR      == 
22d10 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a  BTREE_BULKLOAD.*
22d20 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b  *    OPFLAG_SEEK
22d30 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45  EQ       == BTRE
22d40 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20  E_SEEK_EQ.**    
22d50 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
22d60 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52      == BTREE_FOR
22d70 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46  DELETE.**    OPF
22d80 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
22d90 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f   == BTREE_SAVEPO
22da0 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46  SITION.**    OPF
22db0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
22dc0 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c   == BTREE_AUXDEL
22dd0 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE.*/.#define O
22de0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
22df0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
22e00 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f  P_Insert: Set to
22e10 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
22e20 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nge */.         
22e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
22e50 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28  lso used in P2 (
22e60 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65  not P5) of OP_De
22e70 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lete */.#define 
22e80 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 20 20 20  OPFLAG_NOCHNG   
22e90 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
22ea0 4f 50 5f 56 43 6f 6c 75 6d 6e 20 6e 6f 63 68 61  OP_VColumn nocha
22eb0 6e 67 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a  nge for UPDATE *
22ec0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22ed0 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20 30  _EPHEM         0
22ee0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x01    /* OP_Col
22ef0 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f  umn: Ephemeral o
22f00 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23  utput is ok */.#
22f10 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
22f20 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 32 30  STROWID     0x20
22f30 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
22f40 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
22f50 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
22f60 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
22f70 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
22f80 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
22f90 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
22fa0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22fb0 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
22fc0 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
22fd0 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
22fe0 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
22ff0 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
23000 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
23010 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
23020 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
23030 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
23040 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50  ne OPFLAG_ISNOOP
23050 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20 20          0x40    
23060 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65  /* OP_Delete doe
23070 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f  s pre-update-hoo
23080 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  k only */.#defin
23090 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  e OPFLAG_LENGTHA
230a0 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20 2f  RG     0x40    /
230b0 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
230c0 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68   used for length
230d0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
230e0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20  FLAG_TYPEOFARG  
230f0 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50     0x80    /* OP
23100 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
23110 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a  d for typeof() *
23120 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
23130 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30  _BULKCSR       0
23140 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x01    /* OP_Ope
23150 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e  n** used to open
23160 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a   bulk cursor */.
23170 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53  #define OPFLAG_S
23180 45 45 4b 45 51 20 20 20 20 20 20 20 20 30 78 30  EEKEQ        0x0
23190 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  2    /* OP_Open*
231a0 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20 45 51  * cursor uses EQ
231b0 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64   seek only */.#d
231c0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52  efine OPFLAG_FOR
231d0 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 38 20  DELETE     0x08 
231e0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68     /* OP_Open sh
231f0 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46  ould use BTREE_F
23200 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  ORDELETE */.#def
23210 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  ine OPFLAG_P2ISR
23220 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20 20  EG       0x10   
23230 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65   /* P2 to OP_Ope
23240 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65  n** is a registe
23250 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66  r number */.#def
23260 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  ine OPFLAG_PERMU
23270 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  TE       0x01   
23280 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20   /* OP_Compare: 
23290 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74  use the permutat
232a0 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
232b0 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
232c0 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f  ON  0x02    /* O
232d0 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72 74 3a  P_Delete/Insert:
232e0 20 73 61 76 65 20 63 75 72 73 6f 72 20 70 6f 73   save cursor pos
232f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
23300 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20  AG_AUXDELETE    
23310 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44   0x04    /* OP_D
23320 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20  elete: index in 
23330 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 23  a DELETE op */.#
23340 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f  define OPFLAG_NO
23350 43 48 4e 47 5f 4d 41 47 49 43 20 20 30 78 36 64  CHNG_MAGIC  0x6d
23360 20 20 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65 52 65      /* OP_MakeRe
23370 63 6f 72 64 3a 20 73 65 72 69 61 6c 74 79 70 65  cord: serialtype
23380 20 31 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a   10 is ok */../*
23390 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
233a0 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
233b0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
233c0 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
233d0 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
233e0 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20  truct Trigger.. 
233f0 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
23400 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
23410 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
23420 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
23430 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
23440 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
23450 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
23460 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
23470 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
23480 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65  e. *    database
23490 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54  ). This allows T
234a0 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65  rigger structure
234b0 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65  s to be retrieve
234c0 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e  d by name.. * 2.
234d0 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73   All triggers as
234e0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
234f0 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72  single table for
23500 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c  m a linked list,
23510 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20   using the. *   
23520 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66   pNext member of
23530 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
23540 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
23550 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
23560 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e  of the. *    lin
23570 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72  ked list is stor
23580 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67  ed as the "pTrig
23590 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ger" member of t
235a0 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a  he associated. *
235b0 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65      struct Table
235c0 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65  .. *. * The "ste
235d0 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70  p_list" member p
235e0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
235f0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
23600 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63  linked list. * c
23610 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
23620 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
23630 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72  cified as the tr
23640 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20  igger program.. 
23650 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
23660 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  r {.  char *zNam
23670 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
23680 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
23690 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20   trigger        
236a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236b0 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65  */.  char *table
236c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
236d0 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  The table or vie
236e0 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  w to which the t
236f0 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a  rigger applies *
23700 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
23710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
23720 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
23730 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
23740 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f  NSERT         */
23750 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20  .  u8 tr_tm;    
23760 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
23770 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46  e of TRIGGER_BEF
23780 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54  ORE, TRIGGER_AFT
23790 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  ER */.  Expr *pW
237a0 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  hen;            
237b0 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75  /* The WHEN clau
237c0 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  se of the expres
237d0 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c  sion (may be NUL
237e0 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  L) */.  IdList *
237f0 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20  pColumns;       
23800 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  /* If this is an
23810 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75   UPDATE OF <colu
23820 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72  mn-list> trigger
23830 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
23840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23850 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  he <column-list>
23860 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20   is stored here 
23870 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
23880 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20  hema;        /* 
23890 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
238a0 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f  g the trigger */
238b0 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53  .  Schema *pTabS
238c0 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
238d0 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
238e0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  the table */.  T
238f0 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70  riggerStep *step
23900 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c  _list; /* Link l
23910 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70  ist of trigger p
23920 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20  rogram steps    
23930 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72           */.  Tr
23940 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20  igger *pNext;   
23950 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72        /* Next tr
23960 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  igger associated
23970 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20   with the table 
23980 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74  */.};../*.** A t
23990 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72  rigger is either
239a0 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20   a BEFORE or an 
239b0 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20  AFTER trigger.  
239c0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
239d0 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72  nstants.** deter
239e0 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a  mine which..**.*
239f0 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d  * If there are m
23a00 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73  ultiple triggers
23a10 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73  , you might of s
23a20 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73  ome BEFORE and s
23a30 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e  ome AFTER..** In
23a40 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65   that cases, the
23a50 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77   constants below
23a60 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67   can be ORed tog
23a70 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ether..*/.#defin
23a80 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  e TRIGGER_BEFORE
23a90 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47    1.#define TRIG
23aa0 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f  GER_AFTER   2../
23ab0 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *. * An instance
23ac0 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
23ad0 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74  erStep is used t
23ae0 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65  o store a single
23af0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20   SQL statement. 
23b00 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74  * that is a part
23b10 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72   of a trigger-pr
23b20 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73  ogram.. *. * Ins
23b30 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
23b40 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65   TriggerStep are
23b50 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
23b60 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  gly linked list 
23b70 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67  (linked. * using
23b80 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d   the "pNext" mem
23b90 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20  ber) referenced 
23ba0 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73  by the "step_lis
23bb0 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  t" member of the
23bc0 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73  . * associated s
23bd0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e  truct Trigger in
23be0 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73  stance. The firs
23bf0 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
23c00 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a   linked list is.
23c10 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65   * the first ste
23c20 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  p of the trigger
23c30 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20  -program.. *. * 
23c40 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20  The "op" member 
23c50 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65  indicates whethe
23c60 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c  r this is a "DEL
23c70 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20  ETE", "INSERT", 
23c80 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22  "UPDATE" or. * "
23c90 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e  SELECT" statemen
23ca0 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20  t. The meanings 
23cb0 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d  of the other mem
23cc0 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e  bers is determin
23cd0 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c  ed by the. * val
23ce0 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f  ue of "op" as fo
23cf0 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70  llows:. *. * (op
23d00 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20   == TK_INSERT). 
23d10 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73  * orconf    -> s
23d20 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e  tores the ON CON
23d30 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a  FLICT algorithm.
23d40 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20   * pSelect   -> 
23d50 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
23d60 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45  SERT INTO ... SE
23d70 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LECT ... stateme
23d80 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
23d90 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
23da0 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ores a pointer t
23db0 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  o the SELECT sta
23dc0 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73  tement. Otherwis
23dd0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67  e NULL.. * zTarg
23de0 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
23df0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
23e00 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
23e10 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
23e20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
23e30 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
23e40 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
23e50 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
23e60 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
23e70 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
23e80 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
23e90 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
23ea0 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
23eb0 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
23ec0 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
23ed0 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
23ee0 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20  LUES .... *     
23ef0 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
23f00 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74  nt, then this st
23f10 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  ores the column-
23f20 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20  names to be. *  
23f30 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
23f40 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a  rted into.. *. *
23f50 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54   (op == TK_DELET
23f60 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  E). * zTarget   
23f70 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
23f80 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
23f90 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a   delete from.. *
23fa0 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
23fb0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
23fc0 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
23fd0 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
23fe0 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
23ff0 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
24000 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20  rwise NULL.. *. 
24010 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41  * (op == TK_UPDA
24020 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
24030 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
24040 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
24050 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68  o update.. * pWh
24060 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
24070 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
24080 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
24090 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
240a0 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
240b0 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
240c0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72  e NULL.. * pExpr
240d0 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f  List -> A list o
240e0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f  f the columns to
240f0 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20   update and the 
24100 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75  expressions to u
24110 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20  pdate. *        
24120 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53        them to. S
24130 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  ee sqlite3Update
24140 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  () documentation
24150 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20   of "pChanges". 
24160 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
24170 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a  rgument.. *. */.
24180 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
24190 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  ep {.  u8 op;   
241a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
241b0 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
241c0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
241d0 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54  NSERT, TK_SELECT
241e0 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b   */.  u8 orconf;
241f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
24200 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a  _Rollback etc. *
24210 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
24220 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ig;      /* The 
24230 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69  trigger that thi
24240 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74  s step is a part
24250 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20   of */.  Select 
24260 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
24270 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
24280 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45  t or RHS of INSE
24290 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e  RT INTO SELECT .
242a0 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  .. */.  char *zT
242b0 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20  arget;       /* 
242c0 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72  Target table for
242d0 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c   DELETE, UPDATE,
242e0 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70   INSERT */.  Exp
242f0 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
24300 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
24310 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45  lause for DELETE
24320 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73   or UPDATE steps
24330 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
24340 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45  pExprList; /* SE
24350 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44  T clause for UPD
24360 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  ATE */.  IdList 
24370 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a  *pIdList;     /*
24380 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f   Column names fo
24390 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 55 70  r INSERT */.  Up
243a0 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20 20  sert *pUpsert;  
243b0 20 20 20 2f 2a 20 55 70 73 65 72 74 20 63 6c 61     /* Upsert cla
243c0 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e 53 45 52  uses on an INSER
243d0 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 70  T */.  char *zSp
243e0 61 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  an;         /* O
243f0 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65 78 74  riginal SQL text
24400 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64   of this command
24410 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
24420 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  p *pNext;  /* Ne
24430 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c  xt in the link-l
24440 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ist */.  Trigger
24450 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a  Step *pLast;  /*
24460 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e   Last element in
24470 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69   link-list. Vali
24480 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f  d for 1st elem o
24490 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  nly */.};../*.**
244a0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
244b0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
244c0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  s information us
244d0 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
244e0 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e  Fix....** routin
244f0 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20  es as they walk 
24500 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 74  the parse tree t
24510 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20  o make database 
24520 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78  references.** ex
24530 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65 64  plicit..*/.typed
24540 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65  ef struct DbFixe
24550 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63  r DbFixer;.struc
24560 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61  t DbFixer {.  Pa
24570 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
24580 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67    /* The parsing
24590 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72   context.  Error
245a0 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65   messages writte
245b0 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  n here */.  Sche
245c0 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
245d0 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20  /* Fix items to 
245e0 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20  this schema */. 
245f0 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20   int bVarOnly;  
24600 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f       /* Check fo
24610 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72  r variable refer
24620 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  ences only */.  
24630 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
24640 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
24650 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65   all objects are
24660 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
24670 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
24680 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
24690 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20  pe;  /* Type of 
246a0 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
246b0 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
246c0 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e  essages */.  con
246d0 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b  st Token *pName;
246e0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
246f0 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
24700 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
24710 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ges */.};../*.**
24720 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65   An objected use
24730 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20  d to accumulate 
24740 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74  the text of a st
24750 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a  ring where we.**
24760 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   do not necessar
24770 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67  ily know how big
24780 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c   the string will
24790 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a   be in the end..
247a0 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65  */.struct sqlite
247b0 33 5f 73 74 72 20 7b 0a 20 20 73 71 6c 69 74 65  3_str {.  sqlite
247c0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
247d0 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62  * Optional datab
247e0 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64  ase for lookasid
247f0 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20  e.  Can be NULL 
24800 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74  */.  char *zText
24810 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
24820 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65   string collecte
24830 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33  d so far */.  u3
24840 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  2  nAlloc;      
24850 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
24860 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
24870 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33  in zText */.  u3
24880 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  2  mxAlloc;     
24890 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
248a0 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  lowed allocation
248b0 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c  .  0 for no mall
248c0 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 33  oc usage */.  u3
248d0 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20  2  nChar;       
248e0 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
248f0 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61  the string so fa
24900 72 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45  r */.  u8   accE
24910 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53  rror;       /* S
24920 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6f 72 20 53  QLITE_NOMEM or S
24930 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 2a 2f 0a  QLITE_TOOBIG */.
24940 20 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c 61    u8   printfFla
24950 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  gs;    /* SQLITE
24960 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62 65  _PRINTF flags be
24970 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e  low */.};.#defin
24980 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
24990 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f  INTERNAL 0x01  /
249a0 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f  * Internal-use-o
249b0 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61  nly converters a
249c0 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
249d0 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
249e0 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f  SQLFUNC  0x02  /
249f0 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61  * SQL function a
24a00 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72  rguments to VXPr
24a10 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20  intf */.#define 
24a20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41  SQLITE_PRINTF_MA
24a30 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20  LLOCED 0x04  /* 
24a40 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69 73  True if xText is
24a50 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
24a60 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d   */..#define isM
24a70 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58  alloced(X)  (((X
24a80 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26  )->printfFlags &
24a90 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
24aa0 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f  ALLOCED)!=0).../
24ab0 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
24ac0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
24ad0 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
24ae0 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
24af0 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
24b00 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
24b10 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
24b20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
24b30 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
24b40 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
24b50 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
24b60 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
24b70 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
24b80 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ized */.  char *
24b90 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a  *pzErrMsg;    /*
24ba0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   Error message s
24bb0 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
24bc0 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
24bd0 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
24be0 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
24bf0 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
24c00 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69   ATTACHed */.  i
24c10 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
24c20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
24c30 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
24c40 0a 20 20 75 33 32 20 6d 49 6e 69 74 46 6c 61 67  .  u32 mInitFlag
24c50 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20  s;     /* Flags 
24c60 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 65 72 72 6f  controlling erro
24c70 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20  r messages */.  
24c80 75 33 32 20 6e 49 6e 69 74 52 6f 77 3b 20 20 20  u32 nInitRow;   
24c90 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
24ca0 20 72 6f 77 73 20 70 72 6f 63 65 73 73 65 64 20   rows processed 
24cb0 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a  */.} InitData;..
24cc0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
24cd0 6c 75 65 73 20 66 6f 72 20 6d 49 6e 69 74 46 6c  lues for mInitFl
24ce0 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ags.*/.#define I
24cf0 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72 54 61 62  NITFLAG_AlterTab
24d00 6c 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  le   0x0001  /* 
24d10 54 68 69 73 20 69 73 20 61 20 72 65 70 61 72 73  This is a repars
24d20 65 20 61 66 74 65 72 20 41 4c 54 45 52 20 54 41  e after ALTER TA
24d30 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 74  BLE */../*.** St
24d40 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69  ructure containi
24d50 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67  ng global config
24d60 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72  uration data for
24d70 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
24d80 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ary..**.** This 
24d90 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63  structure also c
24da0 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61  ontains some sta
24db0 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  te information..
24dc0 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65  */.struct Sqlite
24dd0 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20  3Config {.  int 
24de0 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20  bMemstat;       
24df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24e00 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
24e10 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f  memory status */
24e20 0a 20 20 75 38 20 62 43 6f 72 65 4d 75 74 65 78  .  u8 bCoreMutex
24e30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24e40 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
24e50 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65  enable core mute
24e60 78 69 6e 67 20 2a 2f 0a 20 20 75 38 20 62 46 75  xing */.  u8 bFu
24e70 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  llMutex;        
24e80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
24e90 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75  rue to enable fu
24ea0 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  ll mutexing */. 
24eb0 20 75 38 20 62 4f 70 65 6e 55 72 69 3b 20 20 20   u8 bOpenUri;   
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ed0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e     /* True to in
24ee0 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65  terpret filename
24ef0 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 75  s as URIs */.  u
24f00 38 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20  8 bUseCis;      
24f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67   /* Use covering
24f30 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c   indices for ful
24f40 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 75 38 20  l-scans */.  u8 
24f50 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20  bSmallMalloc;   
24f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24f70 2a 20 41 76 6f 69 64 20 6c 61 72 67 65 20 6d 65  * Avoid large me
24f80 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
24f90 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
24fa0 20 62 45 78 74 72 61 53 63 68 65 6d 61 43 68 65   bExtraSchemaChe
24fb0 63 6b 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  cks;            
24fc0 2f 2a 20 56 65 72 69 66 79 20 74 79 70 65 2c 6e  /* Verify type,n
24fd0 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 20 69 6e 20  ame,tbl_name in 
24fe0 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
24ff0 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20  mxStrlen;       
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25010 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20   Maximum string 
25020 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20  length */.  int 
25030 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20  neverCorrupt;   
25040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25050 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c 77   Database is alw
25060 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  ays well-formed 
25070 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61  */.  int szLooka
25080 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
25090 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
250a0 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
250b0 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74  er size */.  int
250c0 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20   nLookaside;    
250d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
250e0 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
250f0 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74  ide buffer count
25100 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53   */.  int nStmtS
25110 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  pill;           
25120 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d          /* Stmt-
25130 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f  journal spill-to
25140 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c 64 20  -disk threshold 
25150 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  */.  sqlite3_mem
25160 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20  _methods m;     
25170 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65         /* Low-le
25180 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  vel memory alloc
25190 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20  ation interface 
251a0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
251b0 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78  ex_methods mutex
251c0 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65  ;      /* Low-le
251d0 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66  vel mutex interf
251e0 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
251f0 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32  _pcache_methods2
25200 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f   pcache2;  /* Lo
25210 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63  w-level page-cac
25220 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  he interface */.
25230 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20    void *pHeap;  
25240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25250 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72      /* Heap stor
25260 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  age space */.  i
25270 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20  nt nHeap;       
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25290 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61   /* Size of pHea
252a0 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  p[] */.  int mnR
252b0 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20  eq, mxReq;      
252c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
252d0 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72  n and max heap r
252e0 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f  equests sizes */
252f0 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
25300 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
25310 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73       /* mmap() s
25320 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69  pace per open fi
25330 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  le */.  sqlite3_
25340 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20  int64 mxMmap;   
25350 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
25360 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73  imum value for s
25370 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20  zMmap */.  void 
25380 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  *pPage;         
25390 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
253a0 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  Page cache memor
253b0 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67  y */.  int szPag
253c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
253d0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
253e0 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e   of each page in
253f0 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
25400 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20  t nPage;        
25410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25420 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
25430 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  es in pPage[] */
25440 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53  .  int mxParserS
25450 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  tack;           
25460 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20       /* maximum 
25470 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72  depth of the par
25480 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69  ser stack */.  i
25490 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e  nt sharedCacheEn
254a0 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
254b0 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72   /* true if shar
254c0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e  ed-cache mode en
254d0 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73  abled */.  u32 s
254e0 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20  zPma;           
254f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25500 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50  Maximum Sorter P
25510 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20  MA size */.  /* 
25520 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
25530 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
25540 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
25550 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
25560 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
25570 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
25580 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
25590 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
255a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255b0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
255c0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
255d0 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
255e0 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
255f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25600 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
25610 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
25620 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
25630 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
25640 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25650 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
25660 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
25670 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
25680 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
25690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256a0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
256b0 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
256c0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
256d0 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
256e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
256f0 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
25700 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
25710 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74  /.  int nRefInit
25720 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
25730 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
25740 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69  of users of pIni
25750 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69  tMutex */.  sqli
25760 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
25770 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
25780 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
25790 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
257a0 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
257b0 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
257c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
257d0 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
257e0 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
257f0 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
25800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25810 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
25820 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23  t to xLog() */.#
25830 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
25840 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69  BLE_SQLLOG.  voi
25850 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64  d(*xSqllog)(void
25860 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
25870 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   char*, int);.  
25880 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67  void *pSqllogArg
25890 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
258a0 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
258b0 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f  RAGE.  /* The fo
258c0 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b  llowing callback
258d0 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69   (if not NULL) i
258e0 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65  s invoked on eve
258f0 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20  ry VDBE branch. 
25900 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20   ** operation.  
25910 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  Set the callback
25920 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45   using SQLITE_TE
25930 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45  STCTRL_VDBE_COVE
25940 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69  RAGE..  */.  voi
25950 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29  d (*xVdbeBranch)
25960 28 76 6f 69 64 2a 2c 75 6e 73 69 67 6e 65 64 20  (void*,unsigned 
25970 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69  iSrcLine,u8 eThi
25980 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43  s,u8 eMx);  /* C
25990 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
259a0 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72  d *pVdbeBranchAr
259b0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
259c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259d0 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
259e0 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  gument */.#endif
259f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
25a00 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a  NABLE_DESERIALIZ
25a10 45 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  E.  sqlite3_int6
25a20 34 20 6d 78 4d 65 6d 64 62 53 69 7a 65 3b 20 20  4 mxMemdbSize;  
25a30 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
25a40 20 6d 61 78 20 6d 65 6d 64 62 20 73 69 7a 65 20   max memdb size 
25a50 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
25a60 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
25a70 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78 54 65 73  BLE.  int (*xTes
25a80 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b  tCallback)(int);
25a90 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b          /* Invok
25aa0 65 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75  ed by sqlite3Fau
25ab0 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69  ltSim() */.#endi
25ac0 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69  f.  int bLocalti
25ad0 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20  meFault;        
25ae0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
25af0 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28   fail localtime(
25b00 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74  ) calls */.  int
25b10 20 62 49 6e 74 65 72 6e 61 6c 46 75 6e 63 74 69   bInternalFuncti
25b20 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ons;           /
25b30 2a 20 49 6e 74 65 72 6e 61 6c 20 53 51 4c 20 66  * Internal SQL f
25b40 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 76 69 73  unctions are vis
25b50 69 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4f  ible */.  int iO
25b60 6e 63 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c  nceResetThreshol
25b70 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  d;          /* W
25b80 68 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f  hen to reset OP_
25b90 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f  Once counters */
25ba0 0a 20 20 75 33 32 20 73 7a 53 6f 72 74 65 72 52  .  u32 szSorterR
25bb0 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ef;             
25bc0 20 20 20 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65       /* Min size
25bd0 20 69 6e 20 62 79 74 65 73 20 74 6f 20 75 73 65   in bytes to use
25be0 20 73 6f 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a   sorter-refs */.
25bf0 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 69    unsigned int i
25c00 50 72 6e 67 53 65 65 64 3b 20 20 20 20 20 20 20  PrngSeed;       
25c10 20 20 20 20 2f 2a 20 41 6c 74 65 72 6e 61 74 69      /* Alternati
25c20 76 65 20 66 69 78 65 64 20 73 65 65 64 20 66 6f  ve fixed seed fo
25c30 72 20 74 68 65 20 50 52 4e 47 20 2a 2f 0a 7d 3b  r the PRNG */.};
25c40 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ../*.** This mac
25c50 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
25c60 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74  e of assert() st
25c70 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69  atements to indi
25c80 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65  cate that.** the
25c90 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20   assert is only 
25ca0 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d  valid on a well-
25cb0 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e  formed database.
25cc0 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a    Instead of:.**
25cd0 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
25ce0 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77  X );.**.** One w
25cf0 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rites:.**.**    
25d00 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f   assert( X || CO
25d10 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a  RRUPT_DB );.**.*
25d20 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  * CORRUPT_DB is 
25d30 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d  true during norm
25d40 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43  al operation.  C
25d50 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e  ORRUPT_DB does n
25d60 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74  ot indicate.** t
25d70 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65  hat the database
25d80 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63   is definitely c
25d90 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61  orrupt, only tha
25da0 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f  t it might be co
25db0 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f  rrupt..** For mo
25dc0 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43  st test cases, C
25dd0 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74  ORRUPT_DB is set
25de0 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20   to false using 
25df0 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c  a special.** sql
25e00 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
25e10 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c  l().  This enabl
25e20 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74  es assert() stat
25e30 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a  ements to prove.
25e40 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61  ** things that a
25e50 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66  re always true f
25e60 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64  or well-formed d
25e70 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65  atabases..*/.#de
25e80 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20  fine CORRUPT_DB 
25e90 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e   (sqlite3Config.
25ea0 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29  neverCorrupt==0)
25eb0 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20  ../*.** Context 
25ec0 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64  pointer passed d
25ed0 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20  own through the 
25ee0 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74  tree-walk..*/.st
25ef0 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20  ruct Walker {.  
25f00 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
25f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
25f30 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f  ser context.  */
25f40 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
25f50 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
25f60 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
25f70 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
25f80 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
25f90 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
25fa0 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
25fb0 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
25fc0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
25fd0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c  */.  void (*xSel
25fe0 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61  ectCallback2)(Wa
25ff0 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f  lker*,Select*);/
26000 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63  * Second callbac
26010 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
26020 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70  .  int walkerDep
26030 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
26040 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26050 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65  Number of subque
26060 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f  ries */.  u8 eCo
26070 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
26080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26090 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70      /* A small p
260a0 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a  rocessing code *
260b0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
260c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
260e0 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
260f0 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
26100 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
26110 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26120 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
26130 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
26140 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20     int n;       
26150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26160 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26170 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20  A counter */.   
26180 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20   int iCur;      
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
261b0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
261c0 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53  .    SrcList *pS
261d0 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  rcList;         
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
261f0 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
26200 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
26210 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
26220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26230 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d  * Counting colum
26240 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  n references */.
26250 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48      struct CCurH
26260 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20  int *pCCurHint; 
26270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26280 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72   Used by codeCur
26290 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20  sorHint() */.   
262a0 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20   int *aiCol;    
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72             /* ar
262d0 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ray of column in
262e0 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72  dexes */.    str
262f0 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49  uct IdxCover *pI
26300 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20  dxCover;        
26310 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
26320 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61  for index covera
26330 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ge */.    struct
26340 20 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70   IdxExprTrans *p
26350 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20  IdxTrans;       
26360 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69      /* Convert i
26370 64 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c  dxed expr to col
26380 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c  umn */.    ExprL
26390 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
263a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263b0 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59       /* GROUP BY
263c0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 53   clause */.    S
263d0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
263e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263f0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56 49           /* HAVI
26400 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75  NG to WHERE clau
26410 73 65 20 63 74 78 20 2a 2f 0a 20 20 20 20 73 74  se ctx */.    st
26420 72 75 63 74 20 57 69 6e 64 6f 77 52 65 77 72 69  ruct WindowRewri
26430 74 65 20 2a 70 52 65 77 72 69 74 65 3b 20 20 20  te *pRewrite;   
26440 20 20 20 20 20 20 20 20 2f 2a 20 57 69 6e 64 6f          /* Windo
26450 77 20 72 65 77 72 69 74 65 20 63 6f 6e 74 65 78  w rewrite contex
26460 74 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  t */.    struct 
26470 57 68 65 72 65 43 6f 6e 73 74 20 2a 70 43 6f 6e  WhereConst *pCon
26480 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
26490 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75     /* WHERE clau
264a0 73 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  se constants */.
264b0 20 20 20 20 73 74 72 75 63 74 20 52 65 6e 61 6d      struct Renam
264c0 65 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b 20 20  eCtx *pRename;  
264d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
264e0 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 63   RENAME COLUMN c
264f0 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75 3b  ontext */.  } u;
26500 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
26510 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
26520 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
26530 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
26540 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
26550 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
26560 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
26570 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
26580 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
26590 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
265a0 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
265b0 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
265c0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
265d0 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
265e0 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
265f0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
26600 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  ExprWalkNoop(Wal
26610 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
26620 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  t sqlite3SelectW
26630 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
26640 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
26650 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b  qlite3SelectWalk
26660 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Fail(Walker*, Se
26670 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53  lect*);.#ifdef S
26680 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64  QLITE_DEBUG.void
26690 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
266a0 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72  lkAssert2(Walker
266b0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e  *, Select*);.#en
266c0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
266d0 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
266e0 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
266f0 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
26700 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
26710 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
26720 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
26730 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
26740 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
26750 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
26760 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
26770 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
26780 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
26790 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
267a0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
267b0 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
267c0 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
267d0 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
267e0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
267f0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
26800 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
26810 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
26820 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
26830 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
26840 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
26850 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
26860 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
26870 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
26880 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
26890 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
268a0 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
268b0 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
268c0 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
268d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268e0 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
268f0 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
26900 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
26910 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
26920 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
26930 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
26940 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
26950 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
26960 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
26970 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
26980 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
26990 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
269a0 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
269b0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
269c0 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
269d0 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
269e0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
269f0 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
26a00 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
26a10 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
26a20 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
26a30 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20  char *zCteErr;  
26a40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
26a50 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
26a60 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
26a70 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
26a80 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
26a90 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e  E_DEBUG./*.** An
26aa0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
26ab0 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74   TreeView object
26ac0 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69   is used for pri
26ad0 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nting the conten
26ae0 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72  t of.** data str
26af0 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74  uctures on sqlit
26b00 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20  e3DebugPrintf() 
26b10 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b  using a tree-lik
26b20 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63  e view..*/.struc
26b30 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69  t TreeView {.  i
26b40 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
26b50 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
26b60 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65  level of the tre
26b70 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20  e we are on */. 
26b80 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b   u8  bLine[100];
26b90 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77           /* Draw
26ba0 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c   vertical in col
26bb0 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69  umn i if bLine[i
26bc0 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a  ] is true */.};.
26bd0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
26be0 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _DEBUG */../*.**
26bf0 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   This object is 
26c00 75 73 65 64 20 69 6e 20 76 61 72 69 6f 75 73 20  used in various 
26c10 77 61 79 73 2c 20 6d 6f 73 74 20 28 62 75 74 20  ways, most (but 
26c20 6e 6f 74 20 61 6c 6c 29 20 72 65 6c 61 74 65 64  not all) related
26c30 20 74 6f 20 77 69 6e 64 6f 77 0a 2a 2a 20 66 75   to window.** fu
26c40 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 20  nctions..**.**  
26c50 20 28 31 29 20 41 20 73 69 6e 67 6c 65 20 69 6e   (1) A single in
26c60 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
26c70 74 72 75 63 74 75 72 65 20 69 73 20 61 74 74 61  tructure is atta
26c80 63 68 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20  ched to the.**  
26c90 20 20 20 20 20 74 68 65 20 45 78 70 72 2e 79 2e       the Expr.y.
26ca0 70 57 69 6e 20 66 69 65 6c 64 20 66 6f 72 20 65  pWin field for e
26cb0 61 63 68 20 77 69 6e 64 6f 77 20 66 75 6e 63 74  ach window funct
26cc0 69 6f 6e 20 69 6e 20 61 6e 20 65 78 70 72 65 73  ion in an expres
26cd0 73 69 6f 6e 20 74 72 65 65 2e 0a 2a 2a 20 20 20  sion tree..**   
26ce0 20 20 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20      This object 
26cf0 68 6f 6c 64 73 20 74 68 65 20 69 6e 66 6f 72 6d  holds the inform
26d00 61 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 65 64 20  ation contained 
26d10 69 6e 20 74 68 65 20 4f 56 45 52 20 63 6c 61 75  in the OVER clau
26d20 73 65 2c 0a 2a 2a 20 20 20 20 20 20 20 70 6c 75  se,.**       plu
26d30 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65  s additional fie
26d40 6c 64 73 20 75 73 65 64 20 64 75 72 69 6e 67 20  lds used during 
26d50 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 2e  code generation.
26d60 0a 2a 2a 0a 2a 2a 20 20 20 28 32 29 20 41 6c 6c  .**.**   (2) All
26d70 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
26d80 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 53 45  s in a single SE
26d90 4c 45 43 54 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  LECT form a link
26da0 65 64 2d 6c 69 73 74 0a 2a 2a 20 20 20 20 20 20  ed-list.**      
26db0 20 61 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c   attached to Sel
26dc0 65 63 74 2e 70 57 69 6e 2e 20 20 54 68 65 20 57  ect.pWin.  The W
26dd0 69 6e 64 6f 77 2e 70 46 75 6e 63 20 61 6e 64 20  indow.pFunc and 
26de0 57 69 6e 64 6f 77 2e 70 45 78 70 72 0a 2a 2a 20  Window.pExpr.** 
26df0 20 20 20 20 20 20 66 69 65 6c 64 73 20 70 6f 69        fields poi
26e00 6e 74 20 62 61 63 6b 20 74 6f 20 74 68 65 20 65  nt back to the e
26e10 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
26e20 73 20 74 68 65 20 77 69 6e 64 6f 77 20 66 75 6e  s the window fun
26e30 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28  ction..**.**   (
26e40 33 29 20 54 68 65 20 74 65 72 6d 73 20 6f 66 20  3) The terms of 
26e50 74 68 65 20 57 49 4e 44 4f 57 20 63 6c 61 75 73  the WINDOW claus
26e60 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 72  e of a SELECT ar
26e70 65 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 74  e instances of t
26e80 68 69 73 0a 2a 2a 20 20 20 20 20 20 20 6f 62 6a  his.**       obj
26e90 65 63 74 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20  ect on a linked 
26ea0 6c 69 73 74 20 61 74 74 61 63 68 65 64 20 74 6f  list attached to
26eb0 20 53 65 6c 65 63 74 2e 70 57 69 6e 44 65 66 6e   Select.pWinDefn
26ec0 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 34 29 20 46 6f  ..**.**   (4) Fo
26ed0 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  r an aggregate f
26ee0 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 46  unction with a F
26ef0 49 4c 54 45 52 20 63 6c 61 75 73 65 2c 20 61 6e  ILTER clause, an
26f00 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 20 20 20   instance.**    
26f10 20 20 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63     of this objec
26f20 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 45  t is stored in E
26f30 78 70 72 2e 79 2e 70 57 69 6e 20 77 69 74 68 20  xpr.y.pWin with 
26f40 65 46 72 6d 54 79 70 65 20 73 65 74 20 74 6f 0a  eFrmType set to.
26f50 2a 2a 20 20 20 20 20 20 20 54 4b 5f 46 49 4c 54  **       TK_FILT
26f60 45 52 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ER. In this case
26f70 20 74 68 65 20 6f 6e 6c 79 20 66 69 65 6c 64 20   the only field 
26f80 75 73 65 64 20 69 73 20 57 69 6e 64 6f 77 2e 70  used is Window.p
26f90 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  Filter..**.** Th
26fa0 65 20 75 73 65 73 20 28 31 29 20 61 6e 64 20 28  e uses (1) and (
26fb0 32 29 20 61 72 65 20 72 65 61 6c 6c 79 20 74 68  2) are really th
26fc0 65 20 73 61 6d 65 20 57 69 6e 64 6f 77 20 6f 62  e same Window ob
26fd0 6a 65 63 74 20 74 68 61 74 20 6a 75 73 74 20 68  ject that just h
26fe0 61 70 70 65 6e 73 0a 2a 2a 20 74 6f 20 62 65 20  appens.** to be 
26ff0 61 63 63 65 73 73 69 62 6c 65 20 69 6e 20 74 77  accessible in tw
27000 6f 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  o different ways
27010 2e 20 20 55 73 65 20 63 61 73 65 20 28 33 29 20  .  Use case (3) 
27020 61 72 65 20 73 65 70 61 72 61 74 65 20 6f 62 6a  are separate obj
27030 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ects..*/.struct 
27040 57 69 6e 64 6f 77 20 7b 0a 20 20 63 68 61 72 20  Window {.  char 
27050 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
27060 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 77 69     /* Name of wi
27070 6e 64 6f 77 20 28 6d 61 79 20 62 65 20 4e 55 4c  ndow (may be NUL
27080 4c 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42  L) */.  char *zB
27090 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ase;            
270a0 2f 2a 20 4e 61 6d 65 20 6f 66 20 62 61 73 65 20  /* Name of base 
270b0 77 69 6e 64 6f 77 20 66 6f 72 20 63 68 61 69 6e  window for chain
270c0 69 6e 67 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c  ing (may be NULL
270d0 29 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  ) */.  ExprList 
270e0 2a 70 50 61 72 74 69 74 69 6f 6e 3b 20 20 20 2f  *pPartition;   /
270f0 2a 20 50 41 52 54 49 54 49 4f 4e 20 42 59 20 63  * PARTITION BY c
27100 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
27110 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
27120 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 63     /* ORDER BY c
27130 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20 65 46  lause */.  u8 eF
27140 72 6d 54 79 70 65 3b 20 20 20 20 20 20 20 20 20  rmType;         
27150 20 20 20 2f 2a 20 54 4b 5f 52 41 4e 47 45 2c 20     /* TK_RANGE, 
27160 54 4b 5f 47 52 4f 55 50 53 2c 20 54 4b 5f 52 4f  TK_GROUPS, TK_RO
27170 57 53 2c 20 6f 72 20 30 20 2a 2f 0a 20 20 75 38  WS, or 0 */.  u8
27180 20 65 53 74 61 72 74 3b 20 20 20 20 20 20 20 20   eStart;        
27190 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44        /* UNBOUND
271a0 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45  ED, CURRENT, PRE
271b0 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57  CEDING or FOLLOW
271c0 49 4e 47 20 2a 2f 0a 20 20 75 38 20 65 45 6e 64  ING */.  u8 eEnd
271d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
271e0 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43   /* UNBOUNDED, C
271f0 55 52 52 45 4e 54 2c 20 50 52 45 43 45 44 49 4e  URRENT, PRECEDIN
27200 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a  G or FOLLOWING *
27210 2f 0a 20 20 75 38 20 62 49 6d 70 6c 69 63 69 74  /.  u8 bImplicit
27220 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 54  Frame;      /* T
27230 72 75 65 20 69 66 20 66 72 61 6d 65 20 77 61 73  rue if frame was
27240 20 69 6d 70 6c 69 63 69 74 6c 79 20 73 70 65 63   implicitly spec
27250 69 66 69 65 64 20 2a 2f 0a 20 20 75 38 20 65 45  ified */.  u8 eE
27260 78 63 6c 75 64 65 3b 20 20 20 20 20 20 20 20 20  xclude;         
27270 20 20 20 2f 2a 20 54 4b 5f 4e 4f 2c 20 54 4b 5f     /* TK_NO, TK_
27280 43 55 52 52 45 4e 54 2c 20 54 4b 5f 54 49 45 53  CURRENT, TK_TIES
27290 2c 20 54 4b 5f 47 52 4f 55 50 2c 20 6f 72 20 30  , TK_GROUP, or 0
272a0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 53 74 61   */.  Expr *pSta
272b0 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
272c0 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20   Expression for 
272d0 22 3c 65 78 70 72 3e 20 50 52 45 43 45 44 49 4e  "<expr> PRECEDIN
272e0 47 22 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 45  G" */.  Expr *pE
272f0 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
27300 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f  /* Expression fo
27310 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c 4c 4f 57  r "<expr> FOLLOW
27320 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e 64 6f 77  ING" */.  Window
27330 20 2a 2a 70 70 54 68 69 73 3b 20 20 20 20 20 20   **ppThis;      
27340 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
27350 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 20 53  this object in S
27360 65 6c 65 63 74 2e 70 57 69 6e 20 6c 69 73 74 20  elect.pWin list 
27370 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70 4e 65  */.  Window *pNe
27380 78 74 57 69 6e 3b 20 20 20 20 20 20 20 2f 2a 20  xtWin;       /* 
27390 4e 65 78 74 20 77 69 6e 64 6f 77 20 66 75 6e 63  Next window func
273a0 74 69 6f 6e 20 62 65 6c 6f 6e 67 69 6e 67 20 74  tion belonging t
273b0 6f 20 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f  o this SELECT */
273c0 0a 20 20 45 78 70 72 20 2a 70 46 69 6c 74 65 72  .  Expr *pFilter
273d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
273e0 65 20 46 49 4c 54 45 52 20 65 78 70 72 65 73 73  e FILTER express
273f0 69 6f 6e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  ion */.  FuncDef
27400 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
27410 20 2f 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e   /* The function
27420 20 2a 2f 0a 20 20 69 6e 74 20 69 45 70 68 43 73   */.  int iEphCs
27430 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
27440 20 50 61 72 74 69 74 69 6f 6e 20 62 75 66 66 65   Partition buffe
27450 72 20 6f 72 20 50 65 65 72 20 62 75 66 66 65 72  r or Peer buffer
27460 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41 63 63   */.  int regAcc
27470 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  um;           /*
27480 20 41 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   Accumulator */.
27490 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
274a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74            /* Int
274b0 65 72 69 6d 20 72 65 73 75 6c 74 20 2a 2f 0a 20  erim result */. 
274c0 20 69 6e 74 20 63 73 72 41 70 70 3b 20 20 20 20   int csrApp;    
274d0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63           /* Func
274e0 74 69 6f 6e 20 63 75 72 73 6f 72 20 28 75 73 65  tion cursor (use
274f0 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f  d by min/max) */
27500 0a 20 20 69 6e 74 20 72 65 67 41 70 70 3b 20 20  .  int regApp;  
27510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
27520 6e 63 74 69 6f 6e 20 72 65 67 69 73 74 65 72 20  nction register 
27530 28 61 6c 73 6f 20 75 73 65 64 20 62 79 20 6d 69  (also used by mi
27540 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20  n/max) */.  int 
27550 72 65 67 50 61 72 74 3b 20 20 20 20 20 20 20 20  regPart;        
27560 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
27570 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 50 41  registers for PA
27580 52 54 49 54 49 4f 4e 20 42 59 20 76 61 6c 75 65  RTITION BY value
27590 73 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 77  s */.  Expr *pOw
275a0 6e 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ner;           /
275b0 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 6f 62 6a  * Expression obj
275c0 65 63 74 20 74 68 69 73 20 77 69 6e 64 6f 77 20  ect this window 
275d0 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 2a  is attached to *
275e0 2f 0a 20 20 69 6e 74 20 6e 42 75 66 66 65 72 43  /.  int nBufferC
275f0 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
27600 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
27610 20 69 6e 20 62 75 66 66 65 72 20 74 61 62 6c 65   in buffer table
27620 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72 67 43 6f   */.  int iArgCo
27630 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  l;            /*
27640 20 4f 66 66 73 65 74 20 6f 66 20 66 69 72 73 74   Offset of first
27650 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 74 68   argument for th
27660 69 73 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  is function */. 
27670 20 69 6e 74 20 72 65 67 4f 6e 65 3b 20 20 20 20   int regOne;    
27680 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
27690 73 74 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ster containing 
276a0 63 6f 6e 73 74 61 6e 74 20 76 61 6c 75 65 20 31  constant value 1
276b0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 53 74 61   */.  int regSta
276c0 72 74 52 6f 77 69 64 3b 0a 20 20 69 6e 74 20 72  rtRowid;.  int r
276d0 65 67 45 6e 64 52 6f 77 69 64 3b 0a 20 20 75 38  egEndRowid;.  u8
276e0 20 62 45 78 70 72 41 72 67 73 3b 20 20 20 20 20   bExprArgs;     
276f0 20 20 20 20 20 20 2f 2a 20 44 65 66 65 72 20 65        /* Defer e
27700 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 77 69 6e  valuation of win
27710 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  dow function arg
27720 75 6d 65 6e 74 73 0a 20 20 20 20 20 20 20 20 20  uments.         
27730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27740 20 2a 2a 20 64 75 65 20 74 6f 20 74 68 65 20 53   ** due to the S
27750 51 4c 49 54 45 5f 53 55 42 54 59 50 45 20 66 6c  QLITE_SUBTYPE fl
27760 61 67 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65  ag */.};..#ifnde
27770 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
27780 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64 20 73 71  NDOWFUNC.void sq
27790 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74  lite3WindowDelet
277a0 65 28 73 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64  e(sqlite3*, Wind
277b0 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ow*);.void sqlit
277c0 65 33 57 69 6e 64 6f 77 55 6e 6c 69 6e 6b 46 72  e3WindowUnlinkFr
277d0 6f 6d 53 65 6c 65 63 74 28 57 69 6e 64 6f 77 2a  omSelect(Window*
277e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
277f0 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74 65 28  indowListDelete(
27800 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
27810 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20  dow *p);.Window 
27820 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 6c  *sqlite3WindowAl
27830 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  loc(Parse*, int,
27840 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69 6e 74   int, Expr*, int
27850 20 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 76   , Expr*, u8);.v
27860 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
27870 77 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  wAttach(Parse*, 
27880 45 78 70 72 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  Expr*, Window*);
27890 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
278a0 64 6f 77 4c 69 6e 6b 28 53 65 6c 65 63 74 20 2a  dowLink(Select *
278b0 70 53 65 6c 2c 20 57 69 6e 64 6f 77 20 2a 70 57  pSel, Window *pW
278c0 69 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  in);.int sqlite3
278d0 57 69 6e 64 6f 77 43 6f 6d 70 61 72 65 28 50 61  WindowCompare(Pa
278e0 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57  rse*, Window*, W
278f0 69 6e 64 6f 77 2a 2c 20 69 6e 74 29 3b 0a 76 6f  indow*, int);.vo
27900 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
27910 43 6f 64 65 49 6e 69 74 28 50 61 72 73 65 2a 2c  CodeInit(Parse*,
27920 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20   Window*);.void 
27930 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64  sqlite3WindowCod
27940 65 53 74 65 70 28 50 61 72 73 65 2a 2c 20 53 65  eStep(Parse*, Se
27950 6c 65 63 74 2a 2c 20 57 68 65 72 65 49 6e 66 6f  lect*, WhereInfo
27960 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
27970 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 52  t sqlite3WindowR
27980 65 77 72 69 74 65 28 50 61 72 73 65 2a 2c 20 53  ewrite(Parse*, S
27990 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
279a0 69 74 65 33 45 78 70 61 6e 64 53 75 62 71 75 65  ite3ExpandSubque
279b0 72 79 28 50 61 72 73 65 2a 2c 20 73 74 72 75 63  ry(Parse*, struc
279c0 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 2a 29  t SrcList_item*)
279d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
279e0 6e 64 6f 77 55 70 64 61 74 65 28 50 61 72 73 65  ndowUpdate(Parse
279f0 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64  *, Window*, Wind
27a00 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a  ow*, FuncDef*);.
27a10 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57  Window *sqlite3W
27a20 69 6e 64 6f 77 44 75 70 28 73 71 6c 69 74 65 33  indowDup(sqlite3
27a30 20 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f 77 6e   *db, Expr *pOwn
27a40 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a  er, Window *p);.
27a50 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57  Window *sqlite3W
27a60 69 6e 64 6f 77 4c 69 73 74 44 75 70 28 73 71 6c  indowListDup(sql
27a70 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77  ite3 *db, Window
27a80 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   *p);.void sqlit
27a90 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e  e3WindowFunction
27aa0 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
27ab0 6c 69 74 65 33 57 69 6e 64 6f 77 43 68 61 69 6e  lite3WindowChain
27ac0 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a  (Parse*, Window*
27ad0 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 57 69 6e 64  , Window*);.Wind
27ae0 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
27af0 77 41 73 73 65 6d 62 6c 65 28 50 61 72 73 65 2a  wAssemble(Parse*
27b00 2c 20 57 69 6e 64 6f 77 2a 2c 20 45 78 70 72 4c  , Window*, ExprL
27b10 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
27b20 20 54 6f 6b 65 6e 2a 29 3b 0a 23 65 6c 73 65 0a   Token*);.#else.
27b30 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27b40 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61 2c 62  WindowDelete(a,b
27b50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27b60 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e  e3WindowFunction
27b70 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  s().# define sql
27b80 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68  ite3WindowAttach
27b90 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66 0a 0a  (a,b,c).#endif..
27ba0 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
27bb0 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
27bc0 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
27bd0 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
27be0 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
27bf0 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
27c00 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
27c10 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
27c20 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
27c30 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
27c40 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
27c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c60 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
27c70 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
27c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c90 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
27ca0 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
27cb0 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
27cc0 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
27cd0 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
27ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
27d10 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
27d20 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
27d30 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
27d40 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
27d50 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
27d60 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
27d70 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
27d80 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
27d90 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
27da0 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
27db0 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
27dc0 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
27dd0 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
27de0 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
27df0 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
27e00 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
27e10 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
27e20 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
27e30 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
27e40 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
27e50 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f 72 74  nt sqlite3Report
27e60 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72 2c 20  Error(int iErr, 
27e70 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73  int lineno, cons
27e80 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29 3b 0a  t char *zType);.
27e90 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
27ea0 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
27eb0 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
27ec0 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
27ed0 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
27ee0 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
27ef0 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
27f00 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
27f10 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
27f20 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
27f30 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
27f40 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
27f50 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
27f60 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
27f70 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
27f80 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
27f90 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53  LINE__).#ifdef S
27fa0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e  QLITE_DEBUG.  in
27fb0 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  t sqlite3NomemEr
27fc0 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  ror(int);.  int 
27fd0 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
27fe0 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69  mError(int);.  i
27ff0 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
28000 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50  tPgnoError(int,P
28010 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53  gno);.# define S
28020 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
28030 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
28040 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64  or(__LINE__).# d
28050 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45  efine SQLITE_IOE
28060 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71  RR_NOMEM_BKPT sq
28070 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45  lite3IoerrnomemE
28080 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
28090 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43   define SQLITE_C
280a0 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73  ORRUPT_PGNO(P) s
280b0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
280c0 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c  oError(__LINE__,
280d0 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  (P)).#else.# def
280e0 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
280f0 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d  _BKPT SQLITE_NOM
28100 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
28110 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
28120 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  KPT SQLITE_IOERR
28130 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20  _NOMEM.# define 
28140 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50  SQLITE_CORRUPT_P
28150 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f  GNO(P) sqlite3Co
28160 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
28170 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E__).#endif../*.
28180 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34  ** FTS3 and FTS4
28190 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69   both require vi
281a0 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70  rtual table supp
281b0 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ort.*/.#if defin
281c0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
281d0 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75  IRTUALTABLE).# u
281e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
281f0 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20  LE_FTS3.# undef 
28200 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
28210 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S4.#endif../*.**
28220 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
28230 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
28240 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
28250 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
28260 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
28270 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
28280 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
28290 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c  sion we also cal
282a0 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
282b0 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
282c0 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
282d0 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54   alias for SQLIT
282e0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
282f0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
28300 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
28310 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
28320 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
28330 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
28340 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a  E_ENABLE_FTS3 1.
28350 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
28360 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
28370 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
28380 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
28390 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
283a0 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
283b0 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
283c0 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
283d0 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
283e0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
283f0 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
28400 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
28410 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
28420 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
28430 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
28440 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
28450 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
28460 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
28470 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
28480 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
28490 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
284a0 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
284b0 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
284c0 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
284d0 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
284e0 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
284f0 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
28500 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
28510 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
28520 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
28530 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
28540 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
28550 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
28560 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
28570 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
28580 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
28590 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
285a0 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
285b0 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
285c0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
285d0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
285e0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
285f0 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
28600 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
28610 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
28620 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
28630 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
28640 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
28650 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
28660 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
28670 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28680 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
28690 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
286a0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
286b0 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
286c0 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
286d0 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
286e0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
286f0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
28700 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28710 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
28720 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
28730 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
28740 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e  ar)(x)]).# defin
28750 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
28760 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
28770 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
28780 20 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29   char)(x)]&0x80)
28790 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
287a0 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
287b0 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
287c0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
287d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
287e0 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
287f0 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
28800 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
28810 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
28820 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
28830 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
28840 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28850 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
28860 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
28870 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
28880 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
28890 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
288a0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
288b0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
288c0 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
288d0 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
288e0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
288f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
28900 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
28910 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
28920 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
28930 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
28940 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28  )   ((x)=='"'||(
28950 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27  x)=='\''||(x)=='
28960 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65  ['||(x)=='`').#e
28970 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
28980 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f  IsIdChar(u8);../
28990 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75  *.** Internal fu
289a0 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65  nction prototype
289b0 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s.*/.int sqlite3
289c0 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68  StrICmp(const ch
289d0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
289e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  ;.int sqlite3Str
289f0 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72  len30(const char
28a00 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  *);.#define sqli
28a10 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28 43 29  te3Strlen30NN(C)
28a20 20 28 73 74 72 6c 65 6e 28 43 29 26 30 78 33 66   (strlen(C)&0x3f
28a30 66 66 66 66 66 66 29 0a 63 68 61 72 20 2a 73 71  ffffff).char *sq
28a40 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28  lite3ColumnType(
28a50 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a  Column*,char*);.
28a60 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
28a70 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  trNICmp sqlite3_
28a80 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71  strnicmp..int sq
28a90 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28  lite3MallocInit(
28aa0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
28ab0 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69  te3MallocEnd(voi
28ac0 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  d);.void *sqlite
28ad0 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f  3Malloc(u64);.vo
28ae0 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
28af0 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64  cZero(u64);.void
28b00 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
28b10 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20  cZero(sqlite3*, 
28b20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
28b30 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73  te3DbMallocRaw(s
28b40 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
28b50 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
28b60 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65  llocRawNN(sqlite
28b70 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  3*, u64);.char *
28b80 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
28b90 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28ba0 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
28bb0 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
28bc0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
28bd0 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  r*, u64);.char *
28be0 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75 70  sqlite3DbSpanDup
28bf0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
28c00 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
28c10 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
28c20 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
28c30 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
28c40 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
28c50 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
28c60 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
28c70 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
28c80 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
28c90 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
28ca0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
28cb0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
28cc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
28cd0 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20  reeNN(sqlite3*, 
28ce0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
28cf0 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
28d00 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
28d10 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
28d20 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
28d30 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
28d40 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
28d50 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
28d60 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
28d70 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
28d80 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e  ault(void);.#ifn
28d90 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
28da0 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
28db0 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
28dc0 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
28dd0 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
28de0 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d));.#endif.int 
28df0 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
28e00 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
28e10 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
28e20 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
28e30 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
28e40 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
28e50 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
28e60 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
28e70 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
28e80 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
28e90 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
28ea0 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
28eb0 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
28ec0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
28ed0 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
28ee0 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
28ef0 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
28f00 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
28f10 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
28f20 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
28f30 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
28f40 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
28f50 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
28f60 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
28f70 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
28f80 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
28f90 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
28fa0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
28fb0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
28fc0 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
28fd0 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
28fe0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
28ff0 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  (D,P).#else.# de
29000 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
29010 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
29020 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
29030 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
29040 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
29050 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
29060 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
29070 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
29080 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
29090 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
290a0 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
290b0 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74  endif../* Do not
290c0 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53   allow both MEMS
290d0 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20  YS5 and MEMSYS3 
290e0 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f  to be defined to
290f0 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79  gether.  If they
29100 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65  .** are, disable
29110 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64   MEMSYS3.*/.#ifd
29120 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
29130 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
29140 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
29150 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
29160 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
29170 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #undef SQLITE_EN
29180 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e  ABLE_MEMSYS3.#en
29190 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
291a0 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
291b0 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
291c0 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
291d0 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
291e0 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
291f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29200 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
29210 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
29220 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
29230 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
29240 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
29250 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
29260 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
29270 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
29280 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
29290 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
292a0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
292b0 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
292c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
292d0 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
292e0 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
292f0 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
29300 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  _OMIT) && !defin
29310 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
29320 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c  NOOP).  void sql
29330 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
29340 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23  r(void);.#else.#
29350 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
29360 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23  emoryBarrier().#
29370 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69  endif..sqlite3_i
29380 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74  nt64 sqlite3Stat
29390 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
293a0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
293b0 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  Up(int, int);.vo
293c0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
293d0 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  Down(int, int);.
293e0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
293f0 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c  usHighwater(int,
29400 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
29410 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28  e3LookasideUsed(
29420 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a  sqlite3*,int*);.
29430 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75  ./* Access to mu
29440 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71  texes used by sq
29450 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a  lite3_status() *
29460 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  /.sqlite3_mutex 
29470 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d  *sqlite3Pcache1M
29480 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69  utex(void);.sqli
29490 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
294a0 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f  e3MallocMutex(vo
294b0 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  id);..#if define
294c0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
294d0 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43 48  MULTITHREADED_CH
294e0 45 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e 65  ECKS) && !define
294f0 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  d(SQLITE_MUTEX_O
29500 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  MIT).void sqlite
29510 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74  3MutexWarnOnCont
29520 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d  ention(sqlite3_m
29530 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  utex*);.#else.# 
29540 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 75  define sqlite3Mu
29550 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74  texWarnOnContent
29560 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  ion(x).#endif..#
29570 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
29580 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
29590 54 0a 23 20 64 65 66 69 6e 65 20 45 58 50 37 35  T.# define EXP75
295a0 34 20 28 28 28 75 36 34 29 30 78 37 66 66 29 3c  4 (((u64)0x7ff)<
295b0 3c 35 32 29 0a 23 20 64 65 66 69 6e 65 20 4d 41  <52).# define MA
295c0 4e 37 35 34 20 28 28 28 28 75 36 34 29 31 29 3c  N754 ((((u64)1)<
295d0 3c 35 32 29 2d 31 29 0a 23 20 64 65 66 69 6e 65  <52)-1).# define
295e0 20 49 73 4e 61 4e 28 58 29 20 28 28 28 58 29 26   IsNaN(X) (((X)&
295f0 45 58 50 37 35 34 29 3d 3d 45 58 50 37 35 34 20  EXP754)==EXP754 
29600 26 26 20 28 28 58 29 26 4d 41 4e 37 35 34 29 21  && ((X)&MAN754)!
29610 3d 30 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  =0).  int sqlite
29620 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a  3IsNaN(double);.
29630 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49  #else.# define I
29640 73 4e 61 4e 28 58 29 20 20 20 20 20 20 20 20 20  sNaN(X)         
29650 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
29660 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
29670 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
29680 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
29690 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
296a0 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
296b0 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a  tion about SQL.*
296c0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75  * functions argu
296d0 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74  ments that are t
296e0 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  he parameters to
296f0 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
29700 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
29710 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
29720 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20  s {.  int nArg; 
29730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29740 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  * Total number o
29750 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
29760 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20   int nUsed;     
29770 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
29780 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
29790 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
297a0 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
297b0 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68  **apArg;   /* Th
297c0 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65  e argument value
297d0 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73  s */.};..char *s
297e0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71  qlite3MPrintf(sq
297f0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
29800 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
29810 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28  sqlite3VMPrintf(
29820 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
29830 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
29840 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
29850 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
29860 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45  ined(SQLITE_HAVE
29870 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69  _OS_TRACE).  voi
29880 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  d sqlite3DebugPr
29890 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  intf(const char*
298a0 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23  , ...);.#endif.#
298b0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
298c0 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a  E_TEST).  void *
298d0 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54  sqlite3TestTextT
298e0 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  oPtr(const char*
298f0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
29900 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
29910 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  BUG).  void sqli
29920 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28  te3TreeViewExpr(
29930 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
29940 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76   Expr*, u8);.  v
29950 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
29960 69 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28  iewBareExprList(
29970 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
29980 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
29990 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
299a0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
299b0 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65  ExprList(TreeVie
299c0 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69  w*, const ExprLi
299d0 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  st*, u8, const c
299e0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
299f0 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 72 63  lite3TreeViewSrc
29a00 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20  List(TreeView*, 
29a10 63 6f 6e 73 74 20 53 72 63 4c 69 73 74 2a 29 3b  const SrcList*);
29a20 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
29a30 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72  reeViewSelect(Tr
29a40 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53  eeView*, const S
29a50 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76  elect*, u8);.  v
29a60 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
29a70 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77  iewWith(TreeView
29a80 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20  *, const With*, 
29a90 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
29aa0 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46  ITE_OMIT_WINDOWF
29ab0 55 4e 43 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UNC.  void sqlit
29ac0 65 33 54 72 65 65 56 69 65 77 57 69 6e 64 6f 77  e3TreeViewWindow
29ad0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
29ae0 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a  t Window*, u8);.
29af0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
29b00 65 65 56 69 65 77 57 69 6e 46 75 6e 63 28 54 72  eeViewWinFunc(Tr
29b10 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57  eeView*, const W
29b20 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 23 65 6e  indow*, u8);.#en
29b30 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69  dif.#endif...voi
29b40 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69  d sqlite3SetStri
29b50 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69  ng(char **, sqli
29b60 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
29b70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29b80 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c  ErrorMsg(Parse*,
29b90 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
29ba0 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  .);.int sqlite3E
29bb0 72 72 6f 72 54 6f 50 61 72 73 65 72 28 73 71 6c  rrorToParser(sql
29bc0 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
29bd0 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
29be0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
29bf0 69 74 65 33 44 65 71 75 6f 74 65 45 78 70 72 28  ite3DequoteExpr(
29c00 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
29c10 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f  ite3TokenInit(To
29c20 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74  ken*,char*);.int
29c30 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43   sqlite3KeywordC
29c40 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ode(const unsign
29c50 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  ed char*, int);.
29c60 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61  int sqlite3RunPa
29c70 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rser(Parse*, con
29c80 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a  st char*, char *
29c90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29ca0 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72  FinishCoding(Par
29cb0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
29cc0 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73  3GetTempReg(Pars
29cd0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
29ce0 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28  3ReleaseTempReg(
29cf0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Parse*,int);.int
29d00 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
29d10 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  ange(Parse*,int)
29d20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
29d30 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50  leaseTempRange(P
29d40 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
29d50 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61  void sqlite3Clea
29d60 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61  rTempRegCache(Pa
29d70 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  rse*);.#ifdef SQ
29d80 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
29d90 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52  qlite3NoTempsInR
29da0 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
29db0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70  int);.#endif.Exp
29dc0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c  r *sqlite3ExprAl
29dd0 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
29de0 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e  ,const Token*,in
29df0 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
29e00 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69  3Expr(sqlite3*,i
29e10 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
29e20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
29e30 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28  rAttachSubtrees(
29e40 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45  sqlite3*,Expr*,E
29e50 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
29e60 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28  r *sqlite3PExpr(
29e70 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Parse*, int, Exp
29e80 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
29e90 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64   sqlite3PExprAdd
29ea0 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  Select(Parse*, E
29eb0 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xpr*, Select*);.
29ec0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
29ed0 72 41 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72  rAnd(Parse*,Expr
29ee0 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
29ef0 2a 73 71 6c 69 74 65 33 45 78 70 72 53 69 6d 70  *sqlite3ExprSimp
29f00 6c 69 66 69 65 64 41 6e 64 4f 72 28 45 78 70 72  lifiedAndOr(Expr
29f10 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
29f20 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61  3ExprFunction(Pa
29f30 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  rse*,ExprList*, 
29f40 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
29f50 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73  id sqlite3ExprAs
29f60 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61  signVarNumber(Pa
29f70 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32  rse*, Expr*, u32
29f80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29f90 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65  xprDelete(sqlite
29fa0 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  3*, Expr*);.void
29fb0 20 73 71 6c 69 74 65 33 45 78 70 72 55 6e 6d 61   sqlite3ExprUnma
29fc0 70 41 6e 64 44 65 6c 65 74 65 28 50 61 72 73 65  pAndDelete(Parse
29fd0 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
29fe0 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
29ff0 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
2a000 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
2a010 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
2a020 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
2a030 65 6e 64 56 65 63 74 6f 72 28 50 61 72 73 65 2a  endVector(Parse*
2a040 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73  ,ExprList*,IdLis
2a050 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  t*,Expr*);.void 
2a060 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
2a070 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72  etSortOrder(Expr
2a080 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  List*,int,int);.
2a090 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a0a0 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73  ListSetName(Pars
2a0b0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b  e*,ExprList*,Tok
2a0c0 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
2a0d0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
2a0e0 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70  tSpan(Parse*,Exp
2a0f0 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  rList*,const cha
2a100 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2a110 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a120 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
2a130 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
2a140 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70  ;.u32 sqlite3Exp
2a150 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74  rListFlags(const
2a160 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
2a170 20 73 71 6c 69 74 65 33 49 6e 64 65 78 48 61 73   sqlite3IndexHas
2a180 44 75 70 6c 69 63 61 74 65 52 6f 6f 74 50 61 67  DuplicateRootPag
2a190 65 28 49 6e 64 65 78 2a 29 3b 0a 69 6e 74 20 73  e(Index*);.int s
2a1a0 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74  qlite3Init(sqlit
2a1b0 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e  e3*, char**);.in
2a1c0 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  t sqlite3InitCal
2a1d0 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74  lback(void*, int
2a1e0 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a  , char**, char**
2a1f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2a200 69 74 4f 6e 65 28 73 71 6c 69 74 65 33 2a 2c 20  itOne(sqlite3*, 
2a210 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 75 33 32  int, char**, u32
2a220 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2a230 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b  ragma(Parse*,Tok
2a240 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
2a250 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  *,int);.#ifndef 
2a260 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2a270 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20  UALTABLE.Module 
2a280 2a 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74  *sqlite3PragmaVt
2a290 61 62 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  abRegister(sqlit
2a2a0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a  e3*,const char *
2a2b0 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76  zName);.#endif.v
2a2c0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
2a2d0 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
2a2e0 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29  ection(sqlite3*)
2a2f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2a300 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c  setOneSchema(sql
2a310 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2a320 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65   sqlite3Collapse
2a330 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71  DatabaseArray(sq
2a340 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2a350 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72  lite3CommitInter
2a360 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74  nalChanges(sqlit
2a370 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
2a380 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61  e3DeleteColumnNa
2a390 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62  mes(sqlite3*,Tab
2a3a0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
2a3b0 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72  3ColumnsFromExpr
2a3c0 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72  List(Parse*,Expr
2a3d0 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d  List*,i16*,Colum
2a3e0 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n**);.void sqlit
2a3f0 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d  e3SelectAddColum
2a400 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f  nTypeAndCollatio
2a410 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  n(Parse*,Table*,
2a420 53 65 6c 65 63 74 2a 2c 63 68 61 72 29 3b 0a 54  Select*,char);.T
2a430 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73  able *sqlite3Res
2a440 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50  ultSetOfSelect(P
2a450 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 2c 63 68  arse*,Select*,ch
2a460 61 72 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ar);.void sqlite
2a470 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65  3OpenMasterTable
2a480 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a  (Parse *, int);.
2a490 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72  Index *sqlite3Pr
2a4a0 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61  imaryKeyIndex(Ta
2a4b0 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74  ble*);.i16 sqlit
2a4c0 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28  e3ColumnOfIndex(
2a4d0 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f  Index*, i16);.vo
2a4e0 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54  id sqlite3StartT
2a4f0 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
2a500 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
2a510 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20  t,int,int);.#if 
2a520 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
2a530 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76  DDEN_COLUMNS.  v
2a540 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
2a550 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e  nPropertiesFromN
2a560 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75  ame(Table*, Colu
2a570 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  mn*);.#else.# de
2a580 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75  fine sqlite3Colu
2a590 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d  mnPropertiesFrom
2a5a0 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d  Name(T,C) /* no-
2a5b0 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69  op */.#endif.voi
2a5c0 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
2a5d0 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  mn(Parse*,Token*
2a5e0 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
2a5f0 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c  qlite3AddNotNull
2a600 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
2a610 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72  oid sqlite3AddPr
2a620 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c  imaryKey(Parse*,
2a630 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2a640 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2a650 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b   sqlite3AddCheck
2a660 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
2a670 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2a680 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
2a690 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
2a6a0 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  pr*,const char*,
2a6b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2a6c0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
2a6d0 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c  lateType(Parse*,
2a6e0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2a6f0 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50  qlite3EndTable(P
2a700 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
2a710 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b  en*,u8,Select*);
2a720 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
2a730 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  eUri(const char*
2a740 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73  ,const char*,uns
2a750 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20  igned int*,.    
2a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a770 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68  sqlite3_vfs**,ch
2a780 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 23  ar**,char **);.#
2a790 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53  ifdef SQLITE_HAS
2a7a0 5f 43 4f 44 45 43 0a 20 20 69 6e 74 20 73 71 6c  _CODEC.  int sql
2a7b0 69 74 65 33 43 6f 64 65 63 51 75 65 72 79 50 61  ite3CodecQueryPa
2a7c0 72 61 6d 65 74 65 72 73 28 73 71 6c 69 74 65 33  rameters(sqlite3
2a7d0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
2a7e0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
2a7f0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2a800 65 33 43 6f 64 65 63 51 75 65 72 79 50 61 72 61  e3CodecQueryPara
2a810 6d 65 74 65 72 73 28 41 2c 42 2c 43 29 20 30 0a  meters(A,B,C) 0.
2a820 23 65 6e 64 69 66 0a 42 74 72 65 65 20 2a 73 71  #endif.Btree *sq
2a830 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
2a840 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
2a850 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65  t char*);..#ifde
2a860 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2a870 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  BLE.# define sql
2a880 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20  ite3FaultSim(X) 
2a890 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a  SQLITE_OK.#else.
2a8a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75    int sqlite3Fau
2a8b0 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64  ltSim(int);.#end
2a8c0 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69  if..Bitvec *sqli
2a8d0 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28  te3BitvecCreate(
2a8e0 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
2a8f0 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76  3BitvecTest(Bitv
2a900 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
2a910 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
2a920 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c  NotNull(Bitvec*,
2a930 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
2a940 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
2a950 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
2a960 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
2a970 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
2a980 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
2a990 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
2a9a0 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
2a9b0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
2a9c0 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66  ze(Bitvec*);.#if
2a9d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
2a9e0 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74  STABLE.int sqlit
2a9f0 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
2aa00 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23  est(int,int*);.#
2aa10 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73  endif..RowSet *s
2aa20 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
2aa30 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
2aa40 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 44 65   sqlite3RowSetDe
2aa50 6c 65 74 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  lete(void*);.voi
2aa60 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43  d sqlite3RowSetC
2aa70 6c 65 61 72 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  lear(void*);.voi
2aa80 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49  d sqlite3RowSetI
2aa90 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69  nsert(RowSet*, i
2aaa0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2aab0 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65  RowSetTest(RowSe
2aac0 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20  t*, int iBatch, 
2aad0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
2aae0 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53  3RowSetNext(RowS
2aaf0 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69  et*, i64*);..voi
2ab00 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56  d sqlite3CreateV
2ab10 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  iew(Parse*,Token
2ab20 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
2ab30 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
2ab40 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66  *,int,int);..#if
2ab50 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2ab60 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21  _OMIT_VIEW) || !
2ab70 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2ab80 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2ab90 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  ).  int sqlite3V
2aba0 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
2abb0 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  s(Parse*,Table*)
2abc0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2abd0 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
2abe0 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20  olumnNames(A,B) 
2abf0 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51  0.#endif..#if SQ
2ac00 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
2ac10 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  D>30.  int sqlit
2ac20 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
2ac30 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66  yDbMask);.#endif
2ac40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
2ac50 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
2ac60 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
2ac70 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2ac80 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61  CodeDropTable(Pa
2ac90 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2aca0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2acb0 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65  lite3DeleteTable
2acc0 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
2acd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ace0 46 72 65 65 49 6e 64 65 78 28 73 71 6c 69 74 65  FreeIndex(sqlite
2acf0 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66  3*, Index*);.#if
2ad00 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ad10 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
2ad20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
2ad30 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
2ad40 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
2ad50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
2ad60 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50  toincrementEnd(P
2ad70 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23  arse *pParse);.#
2ad80 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2ad90 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
2ada0 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66  ntBegin(X).# def
2adb0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
2adc0 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23  ncrementEnd(X).#
2add0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2ade0 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c  e3Insert(Parse*,
2adf0 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63   SrcList*, Selec
2ae00 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74  t*, IdList*, int
2ae10 2c 20 55 70 73 65 72 74 2a 29 3b 0a 76 6f 69 64  , Upsert*);.void
2ae20 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c   *sqlite3ArrayAl
2ae30 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  locate(sqlite3*,
2ae40 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69  void*,int,int*,i
2ae50 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  nt*);.IdList *sq
2ae60 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e  lite3IdListAppen
2ae70 64 28 50 61 72 73 65 2a 2c 20 49 64 4c 69 73 74  d(Parse*, IdList
2ae80 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
2ae90 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64  sqlite3IdListInd
2aea0 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74  ex(IdList*,const
2aeb0 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74   char*);.SrcList
2aec0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
2aed0 45 6e 6c 61 72 67 65 28 50 61 72 73 65 2a 2c 20  Enlarge(Parse*, 
2aee0 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
2aef0 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
2af00 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
2af10 6e 64 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  nd(Parse*, SrcLi
2af20 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
2af30 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
2af40 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
2af50 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
2af60 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
2af70 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
2af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2afa0 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
2afb0 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
2afc0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
2afd0 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
2afe0 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
2aff0 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
2b000 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
2b010 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61 72  ListFuncArgs(Par
2b020 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
2b030 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2b040 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c  qlite3IndexedByL
2b050 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73  ookup(Parse *, s
2b060 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
2b070 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  em *);.void sqli
2b080 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
2b090 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a  oinType(SrcList*
2b0a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b0b0 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73  rcListAssignCurs
2b0c0 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ors(Parse*, SrcL
2b0d0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
2b0e0 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28  te3IdListDelete(
2b0f0 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
2b100 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b110 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71  SrcListDelete(sq
2b120 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
2b130 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
2b140 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62  3AllocateIndexOb
2b150 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31  ject(sqlite3*,i1
2b160 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76  6,int,char**);.v
2b170 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
2b180 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
2b190 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
2b1a0 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
2b1b0 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
2b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1d0 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c       Expr*, int,
2b1e0 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
2b1f0 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78  sqlite3DropIndex
2b200 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2b210 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2b220 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65  ite3Select(Parse
2b230 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
2b240 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74  ctDest*);.Select
2b250 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e   *sqlite3SelectN
2b260 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  ew(Parse*,ExprLi
2b270 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  st*,SrcList*,Exp
2b280 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20  r*,ExprList*,.  
2b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2a0 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70         Expr*,Exp
2b2b0 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a  rList*,u32,Expr*
2b2c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b2d0 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69  electDelete(sqli
2b2e0 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  te3*, Select*);.
2b2f0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72  Table *sqlite3Sr
2b300 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73  cListLookup(Pars
2b310 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  e*, SrcList*);.i
2b320 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64  nt sqlite3IsRead
2b330 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62  Only(Parse*, Tab
2b340 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  le*, int);.void 
2b350 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
2b360 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75  (Parse*, int iCu
2b370 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c  r, int iDb, Tabl
2b380 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65  e*, int);.#if de
2b390 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2b3a0 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
2b3b0 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66  E_LIMIT) && !def
2b3c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2b3d0 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20  _SUBQUERY).Expr 
2b3e0 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65  *sqlite3LimitWhe
2b3f0 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  re(Parse*,SrcLis
2b400 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
2b410 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b  t*,Expr*,char*);
2b420 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2b430 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
2b440 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2b450 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74   Expr*, ExprList
2b460 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2b470 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61  sqlite3Update(Pa
2b480 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2b490 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
2b4a0 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  int,ExprList*,Ex
2b4b0 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pr*,.           
2b4c0 20 20 20 20 20 20 20 20 55 70 73 65 72 74 2a 29          Upsert*)
2b4d0 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
2b4e0 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
2b4f0 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
2b500 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
2b510 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
2b520 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
2b530 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
2b540 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  o*);.LogEst sqli
2b550 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
2b560 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
2b570 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2b580 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
2b590 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2b5a0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
2b5b0 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
2b5c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2b5d0 65 72 65 4f 72 64 65 72 42 79 4c 69 6d 69 74 4f  ereOrderByLimitO
2b5e0 70 74 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ptLabel(WhereInf
2b5f0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2b600 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68  WhereIsSorted(Wh
2b610 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2b620 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69  qlite3WhereConti
2b630 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  nueLabel(WhereIn
2b640 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2b650 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c  3WhereBreakLabel
2b660 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2b670 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b  t sqlite3WhereOk
2b680 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66  OnePass(WhereInf
2b690 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69  o*, int*);.#defi
2b6a0 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20  ne ONEPASS_OFF  
2b6b0 20 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20      0        /* 
2b6c0 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e  Use of ONEPASS n
2b6d0 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64  ot allowed */.#d
2b6e0 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49  efine ONEPASS_SI
2b6f0 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20 20 20  NGLE   1        
2b700 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64  /* ONEPASS valid
2b710 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f   for a single ro
2b720 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66  w update */.#def
2b730 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54  ine ONEPASS_MULT
2b740 49 20 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a  I    2        /*
2b750 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69   ONEPASS is vali
2b760 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72  d for multiple r
2b770 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ows */.void sqli
2b780 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49  te3ExprCodeLoadI
2b790 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65  ndexColumn(Parse
2b7a0 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
2b7b0 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
2b7c0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
2b7d0 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20  tColumn(Parse*, 
2b7e0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2b7f0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
2b800 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2b810 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  GetColumnOfTable
2b820 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
2b830 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2b840 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2b850 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c  CodeMove(Parse*,
2b860 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2b870 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2b880 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78  rCode(Parse*, Ex
2b890 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
2b8a0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43  sqlite3ExprCodeC
2b8b0 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  opy(Parse*, Expr
2b8c0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2b8d0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63  lite3ExprCodeFac
2b8e0 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  torable(Parse*, 
2b8f0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2b900 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2b910 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45  AtInit(Parse*, E
2b920 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2b930 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
2b940 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  emp(Parse*, Expr
2b950 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
2b960 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72  lite3ExprCodeTar
2b970 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  get(Parse*, Expr
2b980 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2b990 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64  lite3ExprCodeAnd
2b9a0 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78  Cache(Parse*, Ex
2b9b0 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
2b9c0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78  qlite3ExprCodeEx
2b9d0 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
2b9e0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
2b9f0 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65  nt, u8);.#define
2ba00 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50   SQLITE_ECEL_DUP
2ba10 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44        0x01  /* D
2ba20 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77  eep, not shallow
2ba30 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69   copies */.#defi
2ba40 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46  ne SQLITE_ECEL_F
2ba50 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a  ACTOR   0x02  /*
2ba60 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   Factor out cons
2ba70 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64  tant terms */.#d
2ba80 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
2ba90 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20  L_REF      0x04 
2baa0 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74   /* Use ExprList
2bab0 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c  .u.x.iOrderByCol
2bac0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
2bad0 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20  TE_ECEL_OMITREF 
2bae0 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69   0x08  /* Omit i
2baf0 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69  f ExprList.u.x.i
2bb00 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f  OrderByCol */.vo
2bb10 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
2bb20 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70  True(Parse*, Exp
2bb30 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
2bb40 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
2bb50 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45  fFalse(Parse*, E
2bb60 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
2bb70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2bb80 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72 73  rIfFalseDup(Pars
2bb90 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2bba0 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  int);.Table *sql
2bbb0 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71  ite3FindTable(sq
2bbc0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2bbd0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
2bbe0 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45  ;.#define LOCATE
2bbf0 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a 23 64  _VIEW    0x01.#d
2bc00 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45  efine LOCATE_NOE
2bc10 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20  RR   0x02.Table 
2bc20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
2bc30 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66  ble(Parse*,u32 f
2bc40 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a  lags,const char*
2bc50 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2bc60 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
2bc70 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61  cateTableItem(Pa
2bc80 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73  rse*,u32 flags,s
2bc90 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
2bca0 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
2bcb0 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
2bcc0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
2bcd0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2bce0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
2bcf0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
2bd00 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
2bd10 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
2bd20 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
2bd30 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
2bd40 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
2bd50 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2bd60 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
2bd70 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  rse*,Token*,Expr
2bd80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2bd90 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c  unVacuum(char**,
2bda0 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20   sqlite3*, int, 
2bdb0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
2bdc0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61  .char *sqlite3Na
2bdd0 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69  meFromToken(sqli
2bde0 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
2bdf0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2be00 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45 78 70  mpare(Parse*,Exp
2be10 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
2be20 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2be30 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78 70 72  CompareSkip(Expr
2be40 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2be50 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c  int sqlite3ExprL
2be60 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c  istCompare(ExprL
2be70 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
2be80 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2be90 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70  e3ExprImpliesExp
2bea0 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20  r(Parse*,Expr*, 
2beb0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2bec0 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
2bed0 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28 45 78  iesNonNullRow(Ex
2bee0 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  pr*,int);.void s
2bef0 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
2bf00 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
2bf10 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
2bf20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2bf30 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
2bf40 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
2bf50 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
2bf60 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72 65 64  lite3ExprCovered
2bf70 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69  ByIndex(Expr*, i
2bf80 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a  nt iCur, Index *
2bf90 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pIdx);.int sqlit
2bfa0 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68  e3FunctionUsesTh
2bfb0 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63  isSrc(Expr*, Src
2bfc0 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71  List*);.Vdbe *sq
2bfd0 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72  lite3GetVdbe(Par
2bfe0 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  se*);.#ifndef SQ
2bff0 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
2c000 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
2c010 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b  SaveState(void);
2c020 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
2c030 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f  gRestoreState(vo
2c040 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  id);.#endif.void
2c050 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
2c060 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  All(sqlite3*,int
2c070 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2c080 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
2c090 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
2c0a0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
2c0b0 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28  rifyNamedSchema(
2c0c0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2c0d0 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73  ar *zDb);.void s
2c0e0 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73  qlite3BeginTrans
2c0f0 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  action(Parse*, i
2c100 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2c110 33 45 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28  3EndTransaction(
2c120 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
2c130 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  d sqlite3Savepoi
2c140 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
2c150 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2c160 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
2c170 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b  ints(sqlite3 *);
2c180 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61  .void sqlite3Lea
2c190 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a  veMutexAndCloseZ
2c1a0 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b  ombie(sqlite3*);
2c1b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2c1c0 49 64 54 6f 54 72 75 65 46 61 6c 73 65 28 45 78  IdToTrueFalse(Ex
2c1d0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2c1e0 33 45 78 70 72 54 72 75 74 68 56 61 6c 75 65 28  3ExprTruthValue(
2c1f0 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e  const Expr*);.in
2c200 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
2c210 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
2c220 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2c230 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
2c240 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
2c250 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
2c260 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
2c270 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  r*, u8);.int sql
2c280 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
2c290 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72 73  ntOrGroupBy(Pars
2c2a0 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c  e*, Expr*, ExprL
2c2b0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2c2c0 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e  e3ExprIsTableCon
2c2d0 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29  stant(Expr*,int)
2c2e0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2c2f0 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49  ENABLE_CURSOR_HI
2c300 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  NTS.int sqlite3E
2c310 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71 75  xprContainsSubqu
2c320 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64  ery(Expr*);.#end
2c330 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  if.int sqlite3Ex
2c340 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72  prIsInteger(Expr
2c350 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
2c360 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75  lite3ExprCanBeNu
2c370 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ll(const Expr*);
2c380 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2c390 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43  NeedsNoAffinityC
2c3a0 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72  hange(const Expr
2c3b0 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71  *, char);.int sq
2c3c0 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e  lite3IsRowid(con
2c3d0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2c3e0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
2c3f0 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61  owDelete(.    Pa
2c400 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67  rse*,Table*,Trig
2c410 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ger*,int,int,int
2c420 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e  ,i16,u8,u8,u8,in
2c430 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2c440 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78  GenerateRowIndex
2c450 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54  Delete(Parse*, T
2c460 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
2c470 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74   int*, int);.int
2c480 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
2c490 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c  IndexKey(Parse*,
2c4a0 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
2c4b0 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64  t, int, int*,Ind
2c4c0 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ex*,int);.void s
2c4d0 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72  qlite3ResolvePar
2c4e0 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a  tIdxLabel(Parse*
2c4f0 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
2c500 65 33 45 78 70 72 52 65 66 65 72 65 6e 63 65 73  e3ExprReferences
2c510 55 70 64 61 74 65 64 43 6f 6c 75 6d 6e 28 45 78  UpdatedColumn(Ex
2c520 70 72 2a 2c 69 6e 74 2a 2c 69 6e 74 29 3b 0a 76  pr*,int*,int);.v
2c530 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
2c540 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
2c550 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
2c560 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  *,int*,int,int,i
2c570 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20  nt,int,.        
2c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c               u8,
2c5a0 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  u8,int,int*,int*
2c5b0 2c 55 70 73 65 72 74 2a 29 3b 0a 23 69 66 64 65  ,Upsert*);.#ifde
2c5c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2c5d0 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64  NULL_TRIM.  void
2c5e0 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52   sqlite3SetMakeR
2c5f0 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c 54 61  ecordP5(Vdbe*,Ta
2c600 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
2c610 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 74  efine sqlite3Set
2c620 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41 2c 42  MakeRecordP5(A,B
2c630 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
2c640 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73  lite3CompleteIns
2c650 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  ertion(Parse*,Ta
2c660 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ble*,int,int,int
2c670 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
2c680 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
2c690 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63  penTableAndIndic
2c6a0 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  es(Parse*, Table
2c6b0 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c  *, int, u8, int,
2c6c0 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u8*, int*, int*
2c6d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
2c6e0 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
2c6f0 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
2c700 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c710 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
2c720 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
2c730 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
2c740 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c750 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
2c760 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
2c770 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b   char*, i8, u8);
2c780 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69  .void sqlite3Uni
2c790 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  queConstraint(Pa
2c7a0 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78  rse*, int, Index
2c7b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c7c0 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28  RowidConstraint(
2c7d0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62  Parse*, int, Tab
2c7e0 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  le*);.Expr *sqli
2c7f0 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74  te3ExprDup(sqlit
2c800 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  e3*,Expr*,int);.
2c810 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
2c820 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c  3ExprListDup(sql
2c830 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  ite3*,ExprList*,
2c840 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
2c850 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70  qlite3SrcListDup
2c860 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73  (sqlite3*,SrcLis
2c870 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20  t*,int);.IdList 
2c880 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75  *sqlite3IdListDu
2c890 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73  p(sqlite3*,IdLis
2c8a0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
2c8b0 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71  ite3SelectDup(sq
2c8c0 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69  lite3*,Select*,i
2c8d0 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71  nt);.FuncDef *sq
2c8e0 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 53 65 61  lite3FunctionSea
2c8f0 72 63 68 28 69 6e 74 2c 63 6f 6e 73 74 20 63 68  rch(int,const ch
2c900 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2c910 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69 6e 46  e3InsertBuiltinF
2c920 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e  uncs(FuncDef*,in
2c930 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  t);.FuncDef *sql
2c940 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
2c950 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
2c960 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29  char*,int,u8,u8)
2c970 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2c980 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
2c990 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
2c9a0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
2c9b0 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69  erDateTimeFuncti
2c9c0 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
2c9d0 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 50  sqlite3RegisterP
2c9e0 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c  erConnectionBuil
2c9f0 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  tinFunctions(sql
2ca00 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2ca10 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
2ca20 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2ca30 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
2ca40 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74  ckSickOrOk(sqlit
2ca50 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
2ca60 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50  e3ChangeCookie(P
2ca70 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69  arse*, int);..#i
2ca80 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2ca90 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20  E_OMIT_VIEW) && 
2caa0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2cab0 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f  OMIT_TRIGGER).vo
2cac0 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69  id sqlite3Materi
2cad0 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a  alizeView(Parse*
2cae0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
2caf0 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a   ExprList*,Expr*
2cb00 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ,int);.#endif..#
2cb10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2cb20 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69  IT_TRIGGER.  voi
2cb30 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
2cb40 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f  igger(Parse*, To
2cb50 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
2cb60 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c  int,IdList*,SrcL
2cb70 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
2cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb90 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29   Expr*,int, int)
2cba0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2cbb0 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61  FinishTrigger(Pa
2cbc0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65  rse*, TriggerSte
2cbd0 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76  p*, Token*);.  v
2cbe0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
2cbf0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53  rigger(Parse*, S
2cc00 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20  rcList*, int);. 
2cc10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
2cc20 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73  pTriggerPtr(Pars
2cc30 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  e*, Trigger*);. 
2cc40 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
2cc50 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50  3TriggersExist(P
2cc60 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20  arse *, Table*, 
2cc70 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
2cc80 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54  int *pMask);.  T
2cc90 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
2cca0 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65  riggerList(Parse
2ccb0 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20   *, Table *);.  
2ccc0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
2ccd0 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65  RowTrigger(Parse
2cce0 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e  *, Trigger *, in
2ccf0 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
2cd00 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20  t, Table *,.    
2cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74          int, int
2cd30 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2cd40 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
2cd50 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65  ggerDirect(Parse
2cd60 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54   *, Trigger *, T
2cd70 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
2cd80 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2cd90 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72  qliteViewTrigger
2cda0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
2cdb0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78  , Expr*, int, Ex
2cdc0 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64  prList*);.  void
2cdd0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
2cde0 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65  iggerStep(sqlite
2cdf0 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  3*, TriggerStep*
2ce00 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
2ce10 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2ce20 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74  SelectStep(sqlit
2ce30 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a 20 20 20  e3*,Select*,.   
2ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce60 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2ce70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2ce80 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
2ce90 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
2cea0 72 74 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f  rtStep(Parse*,To
2ceb0 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20  ken*, IdList*,. 
2cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cee0 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75         Select*,u
2cef0 38 2c 55 70 73 65 72 74 2a 2c 0a 20 20 20 20 20  8,Upsert*,.     
2cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63     const char*,c
2cf30 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54  onst char*);.  T
2cf40 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
2cf50 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
2cf60 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65  Step(Parse*,Toke
2cf70 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  n*,ExprList*, Ex
2cf80 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20 20 20 20  pr*, u8,.       
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfb0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
2cfc0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69  st char*);.  Tri
2cfd0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
2cfe0 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74  3TriggerDeleteSt
2cff0 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ep(Parse*,Token*
2d000 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20 20 20 20  , Expr*,.       
2d010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d030 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
2d040 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
2d050 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
2d060 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
2d070 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f   Trigger*);.  vo
2d080 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
2d090 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
2d0a0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
2d0b0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33  nst char*);.  u3
2d0c0 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  2 sqlite3Trigger
2d0d0 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54  Colmask(Parse*,T
2d0e0 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74  rigger*,ExprList
2d0f0 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a  *,int,int,Table*
2d100 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  ,int);.# define 
2d110 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
2d120 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
2d130 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70  oplevel ? (p)->p
2d140 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a  Toplevel : (p)).
2d150 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d160 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  IsToplevel(p) ((
2d170 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30  p)->pToplevel==0
2d180 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
2d190 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73   sqlite3Triggers
2d1a0 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29  Exist(B,C,D,E,F)
2d1b0 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
2d1c0 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
2d1d0 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
2d1e0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
2d1f0 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69  rPtr(A,B).# defi
2d200 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  ne sqlite3Unlink
2d210 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
2d220 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65  (A,B,C).# define
2d230 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
2d240 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45  rigger(A,B,C,D,E
2d250 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69  ,F,G,H,I).# defi
2d260 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
2d270 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41  wTriggerDirect(A
2d280 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65  ,B,C,D,E,F).# de
2d290 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
2d2a0 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a  gerList(X, Y) 0.
2d2b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d2c0 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
2d2d0 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   p.# define sqli
2d2e0 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29  te3IsToplevel(p)
2d2f0 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
2d300 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
2d310 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29  k(A,B,C,D,E,F,G)
2d320 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73   0.#endif..int s
2d330 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50  qlite3JoinType(P
2d340 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2d350 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
2d360 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
2d370 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  teForeignKey(Par
2d380 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
2d390 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74  Token*, ExprList
2d3a0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2d3b0 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67  lite3DeferForeig
2d3c0 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74  nKey(Parse*, int
2d3d0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2d3e0 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
2d3f0 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  TION.  void sqli
2d400 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73  te3AuthRead(Pars
2d410 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a  e*,Expr*,Schema*
2d420 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e  ,SrcList*);.  in
2d430 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  t sqlite3AuthChe
2d440 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63  ck(Parse*,int, c
2d450 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2d460 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2d470 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
2d480 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
2d490 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74  Push(Parse*, Aut
2d4a0 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74  hContext*, const
2d4b0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
2d4c0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
2d4d0 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78  xtPop(AuthContex
2d4e0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
2d4f0 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61  e3AuthReadCol(Pa
2d500 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
2d510 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2d520 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20  , int);.#else.# 
2d530 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2d540 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a  thRead(a,b,c,d).
2d550 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d560 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c  AuthCheck(a,b,c,
2d570 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f  d,e)    SQLITE_O
2d580 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  K.# define sqlit
2d590 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
2d5a0 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e  h(a,b,c).# defin
2d5b0 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
2d5c0 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f  textPop(a)  ((vo
2d5d0 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76  id)(a)).#endif.v
2d5e0 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63  oid sqlite3Attac
2d5f0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  h(Parse*, Expr*,
2d600 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
2d610 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61  void sqlite3Deta
2d620 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
2d630 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
2d640 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c  ixInit(DbFixer*,
2d650 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f   Parse*, int, co
2d660 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2d670 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2d680 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28  lite3FixSrcList(
2d690 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73  DbFixer*, SrcLis
2d6a0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2d6b0 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65  FixSelect(DbFixe
2d6c0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
2d6d0 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
2d6e0 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a  (DbFixer*, Expr*
2d6f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2d700 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65  xExprList(DbFixe
2d710 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
2d720 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72  int sqlite3FixTr
2d730 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65  iggerStep(DbFixe
2d740 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  r*, TriggerStep*
2d750 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2d760 61 6c 53 61 6d 65 41 73 49 6e 74 28 64 6f 75 62  alSameAsInt(doub
2d770 6c 65 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  le,sqlite3_int64
2d780 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2d790 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  oF(const char *z
2d7a0 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20  , double*, int, 
2d7b0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
2d7c0 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63  GetInt32(const c
2d7d0 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  har *, int*);.in
2d7e0 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f  t sqlite3Atoi(co
2d7f0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66 6e  nst char*);.#ifn
2d800 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d810 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65  UTF16.int sqlite
2d820 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f  3Utf16ByteLen(co
2d830 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c  nst void *pData,
2d840 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23 65 6e   int nChar);.#en
2d850 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  dif.int sqlite3U
2d860 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74  tf8CharLen(const
2d870 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e   char *pData, in
2d880 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71  t nByte);.u32 sq
2d890 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f  lite3Utf8Read(co
2d8a0 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73  nst u8**);.LogEs
2d8b0 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28  t sqlite3LogEst(
2d8c0 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  u64);.LogEst sql
2d8d0 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f  ite3LogEstAdd(Lo
2d8e0 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69  gEst,LogEst);.#i
2d8f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d900 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c  T_VIRTUALTABLE.L
2d910 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
2d920 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f  EstFromDouble(do
2d930 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69  uble);.#endif.#i
2d940 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2d950 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
2d960 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20  NSTATUS) || \.  
2d970 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
2d980 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 29 20 7c  _ENABLE_STAT4) |
2d990 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  | \.    defined(
2d9a0 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45  SQLITE_EXPLAIN_E
2d9b0 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75  STIMATED_ROWS).u
2d9c0 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  64 sqlite3LogEst
2d9d0 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23  ToInt(LogEst);.#
2d9e0 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c  endif.VList *sql
2d9f0 69 74 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c  ite3VListAdd(sql
2da00 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e  ite3*,VList*,con
2da10 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74  st char*,int,int
2da20 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
2da30 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f  qlite3VListNumTo
2da40 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29  Name(VList*,int)
2da50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69  ;.int sqlite3VLi
2da60 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73  stNameToNum(VLis
2da70 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  t*,const char*,i
2da80 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74  nt);../*.** Rout
2da90 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64  ines to read and
2daa0 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d   write variable-
2dab0 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e  length integers.
2dac0 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a    These used to.
2dad0 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f  ** be defined lo
2dae0 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77  cally, but now w
2daf0 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74  e use the varint
2db00 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65   routines in the
2db10 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e   util.c.** file.
2db20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  .*/.int sqlite3P
2db30 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65  utVarint(unsigne
2db40 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75  d char*, u64);.u
2db50 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
2db60 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  nt(const unsigne
2db70 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29  d char *, u64 *)
2db80 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
2db90 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e  arint32(const un
2dba0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
2dbb0 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  32 *);.int sqlit
2dbc0 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20  e3VarintLen(u64 
2dbd0 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  v);../*.** The c
2dbe0 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f  ommon case is fo
2dbf0 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65  r a varint to be
2dc00 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20   a single byte. 
2dc10 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a   They following.
2dc20 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65  ** macros handle
2dc30 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   the common case
2dc40 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65   without a proce
2dc50 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74  dure call, but t
2dc60 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20  hen call.** the 
2dc70 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61  procedure for la
2dc80 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f  rger varints..*/
2dc90 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
2dca0 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
2dcb0 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78  u8)((*(A)<(u8)0x
2dcc0 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28  80)?((B)=(u32)*(
2dcd0 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74  A)),1:sqlite3Get
2dce0 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33  Varint32((A),(u3
2dcf0 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69  2 *)&(B))).#defi
2dd00 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41  ne putVarint32(A
2dd10 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28  ,B)  \.  (u8)(((
2dd20 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38  u32)(B)<(u32)0x8
2dd30 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e  0)?(*(A)=(unsign
2dd40 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c  ed char)(B)),1:\
2dd50 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  .  sqlite3PutVar
2dd60 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64  int((A),(B))).#d
2dd70 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20  efine getVarint 
2dd80 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72     sqlite3GetVar
2dd90 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56  int.#define putV
2dda0 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
2ddb0 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73  PutVarint...cons
2ddc0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49  t char *sqlite3I
2ddd0 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28  ndexAffinityStr(
2dde0 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
2ddf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
2de00 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62  ableAffinity(Vdb
2de10 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
2de20 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f  ;.char sqlite3Co
2de30 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78  mpareAffinity(Ex
2de40 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
2de50 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  aff2);.int sqlit
2de60 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f  e3IndexAffinityO
2de70 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  k(Expr *pExpr, c
2de80 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79  har idx_affinity
2de90 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54  );.char sqlite3T
2dea0 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  ableColumnAffini
2deb0 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  ty(Table*,int);.
2dec0 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
2ded0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
2dee0 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
2def0 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
2df00 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
2df10 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2df20 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63  3DecOrHexToI64(c
2df30 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
2df40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2df50 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69  rrorWithMsg(sqli
2df60 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2df70 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
2df80 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73  d sqlite3Error(s
2df90 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
2dfa0 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d  id sqlite3System
2dfb0 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69  Error(sqlite3*,i
2dfc0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
2dfd0 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69  e3HexToBlob(sqli
2dfe0 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
2dff0 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20   *z, int n);.u8 
2e000 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28  sqlite3HexToInt(
2e010 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69  int h);.int sqli
2e020 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50  te3TwoPartName(P
2e030 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  arse *, Token *,
2e040 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
2e050 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  **);..#if define
2e060 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52  d(SQLITE_NEED_ER
2e070 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68  R_NAME).const ch
2e080 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
2e090 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
2e0a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2e0b0 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a  NABLE_DESERIALIZ
2e0c0 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d  E.int sqlite3Mem
2e0d0 64 62 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65  dbInit(void);.#e
2e0e0 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72  ndif..const char
2e0f0 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28   *sqlite3ErrStr(
2e100 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2e110 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73  3ReadSchema(Pars
2e120 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c  e *pParse);.Coll
2e130 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Seq *sqlite3Find
2e140 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a  CollSeq(sqlite3*
2e150 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63  ,u8 enc, const c
2e160 68 61 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  har*,int);.int s
2e170 71 6c 69 74 65 33 49 73 42 69 6e 61 72 79 28 63  qlite3IsBinary(c
2e180 6f 6e 73 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a  onst CollSeq*);.
2e190 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2e1a0 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61  LocateCollSeq(Pa
2e1b0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e  rse *pParse, con
2e1c0 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a  st char*zName);.
2e1d0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2e1e0 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73  ExprCollSeq(Pars
2e1f0 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2e200 2a 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71  *pExpr);.CollSeq
2e210 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4e 4e 43   *sqlite3ExprNNC
2e220 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
2e230 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70  arse, Expr *pExp
2e240 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  r);.int sqlite3E
2e250 78 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28  xprCollSeqMatch(
2e260 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70  Parse*,Expr*,Exp
2e270 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
2e280 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
2e290 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61  Token(Parse *pPa
2e2a0 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  rse, Expr*, cons
2e2b0 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  t Token*, int);.
2e2c0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2e2d0 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e  rAddCollateStrin
2e2e0 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  g(Parse*,Expr*,c
2e2f0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70  onst char*);.Exp
2e300 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b  r *sqlite3ExprSk
2e310 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29  ipCollate(Expr*)
2e320 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2e330 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 41 6e  xprSkipCollateAn
2e340 64 4c 69 6b 65 6c 79 28 45 78 70 72 2a 29 3b 0a  dLikely(Expr*);.
2e350 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2e360 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2e370 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74   CollSeq *);.int
2e380 20 73 71 6c 69 74 65 33 57 72 69 74 61 62 6c 65   sqlite3Writable
2e390 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 29  Schema(sqlite3*)
2e3a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
2e3b0 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72  ckObjectName(Par
2e3c0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
2e3d0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
2e3e0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2e3f0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
2e400 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
2e410 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2e420 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
2e430 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
2e440 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
2e450 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2e460 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
2e470 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
2e480 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
2e490 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2e4a0 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
2e4b0 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
2e4c0 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
2e4d0 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
2e4e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2e4f0 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
2e500 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
2e510 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
2e520 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a  st char *z,u8);.
2e530 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
2e540 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
2e550 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
2e560 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
2e570 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
2e580 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
2e590 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
2e5a0 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
2e5b0 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
2e5c0 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20   void *,u8,.    
2e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5e0 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
2e5f0 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
2e600 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
2e610 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76  lite3_value*);.v
2e620 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2e630 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
2e640 75 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  ue*);.#ifndef SQ
2e650 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
2e660 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 75  void sqlite3Resu
2e670 6c 74 49 6e 74 52 65 61 6c 28 73 71 6c 69 74 65  ltIntReal(sqlite
2e680 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 23 65 6e  3_context*);.#en
2e690 64 69 66 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  dif.sqlite3_valu
2e6a0 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
2e6b0 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23  ew(sqlite3 *);.#
2e6c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e6d0 49 54 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73  IT_UTF16.char *s
2e6e0 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
2e6f0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2e700 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
2e710 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2e720 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
2e730 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
2e740 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
2e750 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
2e760 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2e770 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
2e780 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
2e790 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
2e7a0 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
2e7b0 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
2e7c0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
2e7d0 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
2e7e0 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
2e7f0 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
2e800 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78  3StrBINARY[];.ex
2e810 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2e820 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2e830 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a  UpperToLower[];.
2e840 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2e850 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2e860 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78  e3CtypeMap[];.ex
2e870 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
2e880 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
2e890 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
2e8a0 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44  ig;.extern FuncD
2e8b0 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42 75  efHash sqlite3Bu
2e8c0 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a  iltinFunctions;.
2e8d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2e8e0 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
2e8f0 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
2e900 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
2e910 6e 64 69 66 0a 23 69 66 64 65 66 20 56 44 42 45  ndif.#ifdef VDBE
2e920 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20  _PROFILE.extern 
2e930 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 73  sqlite3_uint64 s
2e940 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e  qlite3NProfileCn
2e950 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  t;.#endif.void s
2e960 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
2e970 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ved(sqlite3*, in
2e980 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
2e990 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65  id sqlite3Reinde
2e9a0 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  x(Parse*, Token*
2e9b0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2e9c0 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63  sqlite3AlterFunc
2e9d0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2e9e0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65  d sqlite3AlterRe
2e9f0 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a  nameTable(Parse*
2ea00 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2ea10 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2ea20 33 41 6c 74 65 72 52 65 6e 61 6d 65 43 6f 6c 75  3AlterRenameColu
2ea30 6d 6e 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  mn(Parse*, SrcLi
2ea40 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
2ea50 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2ea60 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
2ea70 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
2ea80 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71   int *);.void sq
2ea90 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
2eaa0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2eab0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
2eac0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
2ead0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
2eae0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
2eaf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
2eb00 65 52 68 73 4f 66 49 4e 28 50 61 72 73 65 2a 2c  eRhsOfIN(Parse*,
2eb10 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2eb20 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
2eb30 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  select(Parse*, E
2eb40 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2eb50 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61  te3SelectPrep(Pa
2eb60 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
2eb70 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
2eb80 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2eb90 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72  WrongNumTermsErr
2eba0 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  or(Parse *pParse
2ebb0 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e  , Select *p);.in
2ebc0 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70  t sqlite3MatchSp
2ebd0 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61  anName(const cha
2ebe0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
2ebf0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2ec00 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
2ec10 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
2ec20 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  prNames(NameCont
2ec30 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ext*, Expr*);.in
2ec40 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2ec50 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61  ExprListNames(Na
2ec60 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
2ec70 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
2ec80 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63  ite3ResolveSelec
2ec90 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53  tNames(Parse*, S
2eca0 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
2ecb0 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
2ecc0 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66  e3ResolveSelfRef
2ecd0 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61  erence(Parse*,Ta
2ece0 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45  ble*,int,Expr*,E
2ecf0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2ed00 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64  qlite3ResolveOrd
2ed10 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a  erGroupBy(Parse*
2ed20 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c  , Select*, ExprL
2ed30 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
2ed40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ed50 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64  ColumnDefault(Vd
2ed60 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  be *, Table *, i
2ed70 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2ed80 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73  qlite3AlterFinis
2ed90 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  hAddColumn(Parse
2eda0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
2edb0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42  id sqlite3AlterB
2edc0 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61  eginAddColumn(Pa
2edd0 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
2ede0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
2edf0 52 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70 28 50  RenameTokenMap(P
2ee00 61 72 73 65 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f  arse*, void*, To
2ee10 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2ee20 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 52 65  te3RenameTokenRe
2ee30 6d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f 69 64  map(Parse*, void
2ee40 20 2a 70 54 6f 2c 20 76 6f 69 64 20 2a 70 46 72   *pTo, void *pFr
2ee50 6f 6d 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  om);.void sqlite
2ee60 33 52 65 6e 61 6d 65 45 78 70 72 55 6e 6d 61 70  3RenameExprUnmap
2ee70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
2ee80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e  .void sqlite3Ren
2ee90 61 6d 65 45 78 70 72 6c 69 73 74 55 6e 6d 61 70  ameExprlistUnmap
2eea0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2eeb0 74 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  t*);.CollSeq *sq
2eec0 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
2eed0 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
2eee0 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
2eef0 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
2ef00 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
2ef10 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f 6c 75 6d  nst char*, Colum
2ef20 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2ef30 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
2ef40 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2ef50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
2ef60 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
2ef70 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20 73 71 6c  usyHandler*, sql
2ef80 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74  ite3_file*);.int
2ef90 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
2efa0 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
2efb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
2efc0 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
2efd0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2efe0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
2eff0 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
2f000 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
2f010 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
2f020 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
2f030 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
2f040 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
2f050 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
2f060 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2f070 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
2f080 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
2f090 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2f0a0 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
2f0b0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
2f0c0 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
2f0d0 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
2f0e0 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
2f0f0 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
2f100 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
2f110 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
2f120 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
2f130 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
2f140 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
2f150 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2f160 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
2f170 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
2f180 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
2f190 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
2f1a0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
2f1b0 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
2f1c0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2f1d0 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
2f1e0 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
2f1f0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2f200 74 65 33 4b 65 79 49 6e 66 6f 46 72 6f 6d 45 78  te3KeyInfoFromEx
2f210 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
2f220 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
2f230 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2f240 48 61 73 45 78 70 6c 69 63 69 74 4e 75 6c 6c 73  HasExplicitNulls
2f250 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2f260 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  t*);..#ifdef SQL
2f270 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
2f280 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72  lite3KeyInfoIsWr
2f290 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a  iteable(KeyInfo*
2f2a0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2f2b0 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
2f2c0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
2f2d0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
2f2e0 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69  t, void *,.  voi
2f2f0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2f300 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2f310 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
2f320 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2f330 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2f340 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2f350 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c   .  void (*)(sql
2f360 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
2f370 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2f380 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
2f390 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2f3a0 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2f3b0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2f3c0 20 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74   .  FuncDestruct
2f3d0 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
2f3e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
2f3f0 6f 6f 70 44 65 73 74 72 75 63 74 6f 72 28 76 6f  oopDestructor(vo
2f400 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
2f410 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74  e3OomFault(sqlit
2f420 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
2f430 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74  e3OomClear(sqlit
2f440 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
2f450 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33  3ApiExit(sqlite3
2f460 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   *db, int);.int 
2f470 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
2f480 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29  atabase(Parse *)
2f490 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ;..void sqlite3S
2f4a0 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41  trAccumInit(StrA
2f4b0 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ccum*, sqlite3*,
2f4c0 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   char*, int, int
2f4d0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
2f4e0 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
2f4f0 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
2f500 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73  sqlite3SelectDes
2f510 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74  tInit(SelectDest
2f520 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72  *,int,int);.Expr
2f530 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43   *sqlite3CreateC
2f540 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65  olumnExpr(sqlite
2f550 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  3 *, SrcList *, 
2f560 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64  int, int);..void
2f570 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65   sqlite3BackupRe
2f580 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61  start(sqlite3_ba
2f590 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ckup *);.void sq
2f5a0 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74  lite3BackupUpdat
2f5b0 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  e(sqlite3_backup
2f5c0 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20   *, Pgno, const 
2f5d0 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  u8 *);..#ifndef 
2f5e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
2f5f0 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65 33  UERY.int sqlite3
2f600 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72 73  ExprCheckIN(Pars
2f610 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73  e*, Expr*);.#els
2f620 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2f630 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78 2c  e3ExprCheckIN(x,
2f640 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e  y) SQLITE_OK.#en
2f650 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2f660 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
2f670 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2f680 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20  ProbeSetValue(. 
2f690 20 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a     Parse*,Index*
2f6a0 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  ,UnpackedRecord*
2f6b0 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c  *,Expr*,int,int,
2f6c0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
2f6d0 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d  e3Stat4ValueFrom
2f6e0 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70  Expr(Parse*, Exp
2f6f0 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  r*, u8, sqlite3_
2f700 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73  value**);.void s
2f710 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
2f720 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63  Free(UnpackedRec
2f730 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ord*);.int sqlit
2f740 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71  e3Stat4Column(sq
2f750 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f  lite3*, const vo
2f760 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73  id*, int, int, s
2f770 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
2f780 0a 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64  .char sqlite3Ind
2f790 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  exColumnAffinity
2f7a0 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
2f7b0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
2f7c0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
2f7d0 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
2f7e0 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
2f7f0 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
2f800 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
2f810 4e 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  N.  void *sqlite
2f820 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69  3ParserAlloc(voi
2f830 64 2a 28 2a 29 28 75 36 34 29 2c 20 50 61 72 73  d*(*)(u64), Pars
2f840 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
2f850 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f  te3ParserFree(vo
2f860 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  id*, void(*)(voi
2f870 64 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  d*));.#endif.voi
2f880 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
2f890 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
2f8a0 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  n);.int sqlite3P
2f8b0 61 72 73 65 72 46 61 6c 6c 62 61 63 6b 28 69 6e  arserFallback(in
2f8c0 74 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41  t);.#ifdef YYTRA
2f8d0 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a  CKMAXSTACKDEPTH.
2f8e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72    int sqlite3Par
2f8f0 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69  serStackPeak(voi
2f900 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  d*);.#endif..voi
2f910 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61  d sqlite3AutoLoa
2f920 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  dExtensions(sqli
2f930 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  te3*);.#ifndef S
2f940 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
2f950 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64  EXTENSION.  void
2f960 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2f970 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
2f980 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2f990 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  e sqlite3CloseEx
2f9a0 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64  tensions(X).#end
2f9b0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2f9c0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
2f9d0 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACHE.  void sqli
2f9e0 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72  te3TableLock(Par
2f9f0 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  se *, int, int, 
2fa00 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  u8, const char *
2fa10 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2fa20 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  ne sqlite3TableL
2fa30 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23  ock(v,w,x,y,z).#
2fa40 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2fa50 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20  LITE_TEST.  int 
2fa60 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75  sqlite3Utf8To8(u
2fa70 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a  nsigned char*);.
2fa80 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2fa90 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2faa0 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
2fab0 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  e sqlite3VtabCle
2fac0 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20  ar(Y).#  define 
2fad0 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
2fae0 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  X,Y) SQLITE_OK.#
2faf0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2fb00 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a  VtabRollback(X).
2fb10 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2fb20 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23  3VtabCommit(X).#
2fb30 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2fb40 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30  VtabInSync(db) 0
2fb50 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2fb60 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20  e3VtabLock(X).# 
2fb70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2fb80 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
2fb90 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2fba0 61 62 4d 6f 64 75 6c 65 55 6e 72 65 66 28 44 2c  abModuleUnref(D,
2fbb0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2fbc0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2fbd0 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  st(X).#  define 
2fbe0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
2fbf0 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51  oint(X, Y, Z) SQ
2fc00 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2fc10 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62  e sqlite3GetVTab
2fc20 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c  le(X,Y)  ((VTabl
2fc30 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76  e*)0).#else.   v
2fc40 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
2fc50 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
2fc60 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f  , Table*);.   vo
2fc70 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69  id sqlite3VtabDi
2fc80 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33  sconnect(sqlite3
2fc90 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b   *db, Table *p);
2fca0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2fcb0 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20  tabSync(sqlite3 
2fcc0 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20  *db, Vdbe*);.   
2fcd0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
2fce0 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
2fcf0 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
2fd00 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
2fd10 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2fd20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2fd30 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
2fd40 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2fd50 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
2fd60 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
2fd70 69 74 65 33 56 74 61 62 4d 6f 64 75 6c 65 55 6e  ite3VtabModuleUn
2fd80 72 65 66 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64  ref(sqlite3*,Mod
2fd90 75 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  ule*);.   void s
2fda0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2fdb0 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  List(sqlite3*);.
2fdc0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2fdd0 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69  abSavepoint(sqli
2fde0 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  te3 *, int, int)
2fdf0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2fe00 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
2fe10 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33  g(Vdbe*, sqlite3
2fe20 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62  _vtab*);.   VTab
2fe30 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
2fe40 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
2fe50 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c  able*);.   Modul
2fe60 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72  e *sqlite3VtabCr
2fe70 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20  eateModule(.    
2fe80 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20   sqlite3*,.     
2fe90 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
2fea0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2feb0 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f  module*,.     vo
2fec0 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a  id*,.     void(*
2fed0 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23  )(void*).   );.#
2fee0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2fef0 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28  VtabInSync(db) (
2ff00 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20  (db)->nVTrans>0 
2ff10 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73  && (db)->aVTrans
2ff20 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ==0).#endif.int 
2ff30 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79  sqlite3VtabEpony
2ff40 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61  mousTableInit(Pa
2ff50 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  rse*,Module*);.v
2ff60 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45  oid sqlite3VtabE
2ff70 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65  ponymousTableCle
2ff80 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75  ar(sqlite3*,Modu
2ff90 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2ffa0 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62  e3VtabMakeWritab
2ffb0 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  le(Parse*,Table*
2ffc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2ffd0 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61  tabBeginParse(Pa
2ffe0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2fff0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ken*, Token*, in
30000 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
30010 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
30020 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
30030 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
30040 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
30050 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
30060 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
30070 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
30080 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
30090 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
300a0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
300b0 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
300c0 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
300d0 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
300e0 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
300f0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
30100 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
30110 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
30120 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
30130 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
30140 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
30150 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
30160 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
30170 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
30180 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
30190 20 45 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33   Expr*);.sqlite3
301a0 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
301b0 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71  mtCurrentTime(sq
301c0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
301d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
301e0 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
301f0 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
30200 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
30210 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
30220 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
30230 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
30240 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
30250 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61  e3ParserReset(Pa
30260 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  rse*);.#ifdef SQ
30270 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d  LITE_ENABLE_NORM
30280 41 4c 49 5a 45 0a 63 68 61 72 20 2a 73 71 6c 69  ALIZE.char *sqli
30290 74 65 33 4e 6f 72 6d 61 6c 69 7a 65 28 56 64 62  te3Normalize(Vdb
302a0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  e*, const char*)
302b0 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
302c0 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64  ite3Reprepare(Vd
302d0 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  be*);.void sqlit
302e0 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c  e3ExprListCheckL
302f0 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78  ength(Parse*, Ex
30300 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
30310 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  har*);.CollSeq *
30320 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d  sqlite3BinaryCom
30330 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  pareCollSeq(Pars
30340 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70  e *, Expr *, Exp
30350 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
30360 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f  3TempInMemory(co
30370 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  nst sqlite3*);.c
30380 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
30390 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
303a0 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  e(int);.#ifndef 
303b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
303c0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65    int sqlite3Che
303d0 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a  ckpoint(sqlite3*
303e0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
303f0 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73  , int*);.  int s
30400 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
30410 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74  Hook(void*,sqlit
30420 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
30430 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  int);.#endif.#if
30440 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30450 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c  _CTE.  With *sql
30460 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73  ite3WithAdd(Pars
30470 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c  e*,With*,Token*,
30480 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
30490 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
304a0 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c  e3WithDelete(sql
304b0 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20  ite3*,With*);.  
304c0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
304d0 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74  Push(Parse*, Wit
304e0 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23  h*, u8);.#else.#
304f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
30500 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64  thPush(x,y,z).#d
30510 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
30520 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e  hDelete(x,y).#en
30530 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
30540 54 45 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20  TE_OMIT_UPSERT. 
30550 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33   Upsert *sqlite3
30560 55 70 73 65 72 74 4e 65 77 28 73 71 6c 69 74 65  UpsertNew(sqlite
30570 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  3*,ExprList*,Exp
30580 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
30590 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
305a0 74 65 33 55 70 73 65 72 74 44 65 6c 65 74 65 28  te3UpsertDelete(
305b0 73 71 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a  sqlite3*,Upsert*
305c0 29 3b 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c  );.  Upsert *sql
305d0 69 74 65 33 55 70 73 65 72 74 44 75 70 28 73 71  ite3UpsertDup(sq
305e0 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b  lite3*,Upsert*);
305f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 70  .  int sqlite3Up
30600 73 65 72 74 41 6e 61 6c 79 7a 65 54 61 72 67 65  sertAnalyzeTarge
30610 74 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  t(Parse*,SrcList
30620 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f  *,Upsert*);.  vo
30630 69 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  id sqlite3Upsert
30640 44 6f 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  DoUpdate(Parse*,
30650 55 70 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49  Upsert*,Table*,I
30660 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73  ndex*,int);.#els
30670 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  e.#define sqlite
30680 33 55 70 73 65 72 74 4e 65 77 28 76 2c 77 2c 78  3UpsertNew(v,w,x
30690 2c 79 2c 7a 29 20 28 28 55 70 73 65 72 74 2a 29  ,y,z) ((Upsert*)
306a0 30 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  0).#define sqlit
306b0 65 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 78  e3UpsertDelete(x
306c0 2c 79 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,y).#define sqli
306d0 74 65 33 55 70 73 65 72 74 44 75 70 28 78 2c 79  te3UpsertDup(x,y
306e0 29 20 20 20 20 20 20 20 28 28 55 70 73 65 72 74  )       ((Upsert
306f0 2a 29 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  *)0).#endif.../*
30700 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f   Declarations fo
30710 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66  r functions in f
30720 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68  key.c. All of th
30730 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64  ese are replaced
30740 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63   by.** no-op mac
30750 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45  ros if OMIT_FORE
30760 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e  IGN_KEY is defin
30770 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
30780 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b   no foreign.** k
30790 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  ey functionality
307a0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49   is available. I
307b0 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69  f OMIT_TRIGGER i
307c0 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a  s defined but.**
307d0 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
307e0 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73  Y is not, only s
307f0 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ome of the funct
30800 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64  ions are no-oped
30810 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73  . In.** this cas
30820 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  e foreign keys a
30830 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e  re parsed, but n
30840 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e  o other function
30850 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76  ality is.** prov
30860 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e  ided (enforcemen
30870 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69  t of FK constrai
30880 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65  nts requires the
30890 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79   triggers sub-sy
308a0 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  stem)..*/.#if !d
308b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
308c0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
308d0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
308e0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
308f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
30900 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54  kCheck(Parse*, T
30910 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
30920 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76   int*, int);.  v
30930 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  oid sqlite3FkDro
30940 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
30950 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a  rcList *, Table*
30960 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
30970 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65  3FkActions(Parse
30980 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c  *, Table*, ExprL
30990 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c  ist*, int, int*,
309a0 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
309b0 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50  ite3FkRequired(P
309c0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
309d0 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32  nt*, int);.  u32
309e0 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
309f0 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
30a00 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74  );.  FKey *sqlit
30a10 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54  e3FkReferences(T
30a20 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  able *);.#else. 
30a30 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30a40 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c  FkActions(a,b,c,
30a50 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
30a60 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
30a70 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
30a80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
30a90 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29  DropTable(a,b,c)
30aa0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
30ab0 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29  e3FkOldmask(a,b)
30ac0 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65           0.  #de
30ad0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
30ae0 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20  quired(a,b,c,d) 
30af0 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73     0.  #define s
30b00 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63  qlite3FkReferenc
30b10 65 73 28 61 29 20 20 20 20 20 20 20 20 30 0a 23  es(a)        0.#
30b20 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
30b30 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
30b40 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c  N_KEY.  void sql
30b50 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c  ite3FkDelete(sql
30b60 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  ite3 *, Table*);
30b70 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
30b80 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73  LocateIndex(Pars
30b90 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c  e*,Table*,FKey*,
30ba0 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a  Index**,int**);.
30bb0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
30bc0 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
30bd0 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73  a,b).  #define s
30be0 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
30bf0 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23  dex(a,b,c,d,e).#
30c00 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76  endif.../*.** Av
30c10 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e  ailable fault in
30c20 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64  jectors.  Should
30c30 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67   be numbered beg
30c40 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a  inning with 0..*
30c50 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
30c60 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d  _FAULTINJECTOR_M
30c70 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66  ALLOC     0.#def
30c80 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
30c90 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20  INJECTOR_COUNT  
30ca0 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
30cb0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
30cc0 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e  e code in fault.
30cd0 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74  c used for ident
30ce0 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a  ifying "benign".
30cf0 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  ** malloc failur
30d00 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  es. This is only
30d10 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49   present if SQLI
30d20 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a  TE_UNTESTABLE.**
30d30 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
30d40 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
30d50 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20  TE_UNTESTABLE.  
30d60 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
30d70 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  nBenignMalloc(vo
30d80 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  id);.  void sqli
30d90 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
30da0 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  oc(void);.#else.
30db0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
30dc0 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
30dd0 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73  oc().  #define s
30de0 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
30df0 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a  alloc().#endif..
30e00 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /*.** Allowed re
30e10 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
30e20 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
30e30 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  dex().*/.#define
30e40 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20   IN_INDEX_ROWID 
30e50 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65         1   /* Se
30e60 61 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f  arch the rowid o
30e70 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23  f the table */.#
30e80 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
30e90 45 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20  EPH          2  
30ea0 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70   /* Search an ep
30eb0 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a  hemeral b-tree *
30ec0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
30ed0 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20  EX_INDEX_ASC    
30ee0 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  3   /* Existing 
30ef0 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20  index ASCENDING 
30f00 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
30f10 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20  DEX_INDEX_DESC  
30f20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67   4   /* Existing
30f30 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e   index DESCENDIN
30f40 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  G */.#define IN_
30f50 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20  INDEX_NOOP      
30f60 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62     5   /* No tab
30f70 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73  le available. Us
30f80 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f  e comparisons */
30f90 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66  ./*.** Allowed f
30fa0 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64  lags for the 3rd
30fb0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71   parameter to sq
30fc0 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
30fd0 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ()..*/.#define I
30fe0 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20  N_INDEX_NOOP_OK 
30ff0 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f      0x0001  /* O
31000 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49  K to return IN_I
31010 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65  NDEX_NOOP */.#de
31020 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45  fine IN_INDEX_ME
31030 4d 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32  MBERSHIP  0x0002
31040 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72    /* IN operator
31050 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72   used for member
31060 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65  ship test */.#de
31070 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f  fine IN_INDEX_LO
31080 4f 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34  OP        0x0004
31090 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72    /* IN operator
310a0 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20   used as a loop 
310b0 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  */.int sqlite3Fi
310c0 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20  ndInIndex(Parse 
310d0 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20  *, Expr *, u32, 
310e0 69 6e 74 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a  int*, int*, int*
310f0 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  );..int sqlite3J
31100 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
31110 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
31120 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
31130 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
31140 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  );.int sqlite3Jo
31150 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
31160 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65  3_vfs *);.#if de
31170 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
31180 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
31190 29 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28  ) \. || defined(
311a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
311b0 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
311c0 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ).  int sqlite3J
311d0 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c  ournalCreate(sql
311e0 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65  ite3_file *);.#e
311f0 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
31200 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f  3JournalIsInMemo
31210 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ry(sqlite3_file 
31220 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *p);.void sqlite
31230 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  3MemJournalOpen(
31240 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
31250 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ..void sqlite3Ex
31260 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c  prSetHeightAndFl
31270 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72 73  ags(Parse *pPars
31280 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66  e, Expr *p);.#if
31290 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
312a0 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73  _DEPTH>0.  int s
312b0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
312c0 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
312d0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45  ;.  int sqlite3E
312e0 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50  xprCheckHeight(P
312f0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  arse*, int);.#el
31300 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
31310 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
31320 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66  ight(x) 0.  #def
31330 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
31340 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a  heckHeight(x,y).
31350 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69  #endif..u32 sqli
31360 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73  te3Get4byte(cons
31370 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  t u8*);.void sql
31380 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a  ite3Put4byte(u8*
31390 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20  , u32);..#ifdef 
313a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
313b0 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f  LOCK_NOTIFY.  vo
313c0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
313d0 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69  tionBlocked(sqli
313e0 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  te3 *, sqlite3 *
313f0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
31400 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
31410 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ked(sqlite3 *db)
31420 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
31430 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
31440 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23  (sqlite3 *db);.#
31450 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
31460 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
31470 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23  Blocked(x,y).  #
31480 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
31490 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
314a0 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  (x).  #define sq
314b0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
314c0 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a  losed(x).#endif.
314d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
314e0 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
314f0 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46  te3ParserTrace(F
31500 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23  ILE*, char *);.#
31510 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
31520 64 28 59 59 43 4f 56 45 52 41 47 45 29 0a 20 20  d(YYCOVERAGE).  
31530 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
31540 72 43 6f 76 65 72 61 67 65 28 46 49 4c 45 2a 29  rCoverage(FILE*)
31550 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
31560 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
31570 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
31580 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
31590 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
315a0 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
315b0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
315c0 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
315d0 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
315e0 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
315f0 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23  g messages..*/.#
31600 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
31610 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
31620 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
31630 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
31640 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
31650 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
31660 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
31670 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
31680 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54  SQLITE_API SQLIT
31690 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53  E_EXTERN void (S
316a0 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c  QLITE_CDECL *sql
316b0 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
316c0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
316d0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
316e0 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
316f0 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
31700 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
31710 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
31720 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
31730 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
31740 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
31750 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
31760 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
31770 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
31780 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
31790 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
317a0 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
317b0 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
317c0 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
317d0 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
317e0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
317f0 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
31800 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
31810 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
31820 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
31830 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
31840 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
31850 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
31860 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
31870 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
31880 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
31890 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
318a0 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
318b0 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
318c0 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
318d0 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
318e0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
318f0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
31900 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
31910 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
31920 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
31930 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
31940 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
31950 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
31960 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
31970 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
31980 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
31990 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
319a0 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
319b0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
319c0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
319d0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
319e0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
319f0 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
31a00 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
31a10 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
31a20 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
31a30 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
31a40 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
31a50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
31a60 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
31a70 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
31a80 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
31a90 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
31aa0 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
31ab0 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
31ac0 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
31ad0 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
31ae0 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
31af0 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
31b00 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
31b10 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
31b20 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
31b30 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
31b40 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
31b50 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
31b60 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
31b70 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
31b80 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
31b90 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
31ba0 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
31bb0 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
31bc0 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
31bd0 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
31be0 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
31bf0 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
31c00 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a  constraint..**.*
31c10 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
31c20 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
31c30 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
31c40 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
31c50 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
31c60 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
31c70 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
31c80 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
31c90 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
31ca0 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
31cb0 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
31cc0 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
31cd0 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
31ce0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
31cf0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
31d00 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
31d10 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
31d20 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
31d30 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
31d40 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
31d50 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
31d60 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
31d70 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
31d80 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
31d90 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
31da0 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
31db0 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
31dc0 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
31dd0 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
31de0 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
31df0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
31e00 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
31e10 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
31e20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
31e30 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
31e40 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
31e50 43 48 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a  CHE     0x04  /*
31e60 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
31e70 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  cations */../*.*
31e80 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65  * Threading inte
31e90 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c  rface.*/.#if SQL
31ea0 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
31eb0 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c  HREADS>0.int sql
31ec0 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65  ite3ThreadCreate
31ed0 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c  (SQLiteThread**,
31ee0 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c  void*(*)(void*),
31ef0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
31f00 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51  te3ThreadJoin(SQ
31f10 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69  LiteThread*, voi
31f20 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  d**);.#endif..#i
31f30 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
31f40 5f 45 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56  _ENABLE_DBPAGE_V
31f50 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
31f60 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
31f70 20 73 71 6c 69 74 65 33 44 62 70 61 67 65 52 65   sqlite3DbpageRe
31f80 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
31f90 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
31fa0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
31fb0 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
31fc0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
31fd0 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
31fe0 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
31ff0 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
32000 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
32010 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45  ExprVectorSize(E
32020 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
32030 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 56 65   sqlite3ExprIsVe
32040 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72  ctor(Expr *pExpr
32050 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
32060 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78  VectorFieldSubex
32070 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  pr(Expr*, int);.
32080 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
32090 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28  rForVectorField(
320a0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74  Parse*,Expr*,int
320b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
320c0 65 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61  ectorErrorMsg(Pa
320d0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23  rse*, Expr*);..#
320e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
320f0 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
32100 5f 44 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61  _DIAGS.const cha
32110 72 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69  r **sqlite3Compi
32120 6c 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70  leOptions(int *p
32130 6e 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  nOpt);.#endif..#
32140 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49  endif /* SQLITEI
32150 4e 54 5f 48 20 2a 2f 0a                          NT_H */.