/ Hex Artifact Content
Login

Artifact 8ab71fd52860282b1775452e5be50f1f97d478aa17e9c664a9876419e7aa1b1f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  ./*.** This is a
2ff0: 20 6d 61 67 69 63 20 73 74 72 69 6e 67 20 74 68   magic string th
3000: 61 74 20 61 70 70 65 61 72 73 20 61 74 20 74 68  at appears at th
3010: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 65  e beginning of e
3020: 76 65 72 79 0a 2a 2a 20 53 51 4c 69 74 65 20 64  very.** SQLite d
3030: 61 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72  atabase in order
3040: 20 74 6f 20 69 64 65 6e 74 69 66 79 20 74 68 65   to identify the
3050: 20 66 69 6c 65 20 61 73 20 61 20 72 65 61 6c 20   file as a real 
3060: 64 61 74 61 62 61 73 65 2e 0a 2a 2a 0a 2a 2a 20  database..**.** 
3070: 59 6f 75 20 63 61 6e 20 63 68 61 6e 67 65 20 74  You can change t
3080: 68 69 73 20 76 61 6c 75 65 20 61 74 20 63 6f 6d  his value at com
3090: 70 69 6c 65 2d 74 69 6d 65 20 62 79 20 73 70 65  pile-time by spe
30a0: 63 69 66 79 69 6e 67 20 61 0a 2a 2a 20 2d 44 53  cifying a.** -DS
30b0: 51 4c 49 54 45 5f 46 49 4c 45 5f 48 45 41 44 45  QLITE_FILE_HEADE
30c0: 52 3d 22 2e 2e 2e 22 20 6f 6e 20 74 68 65 20 63  R="..." on the c
30d0: 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 2d  ompiler command-
30e0: 6c 69 6e 65 2e 20 20 54 68 65 0a 2a 2a 20 68 65  line.  The.** he
30f0: 61 64 65 72 20 6d 75 73 74 20 62 65 20 65 78 61  ader must be exa
3100: 63 74 6c 79 20 31 36 20 62 79 74 65 73 20 69 6e  ctly 16 bytes in
3110: 63 6c 75 64 69 6e 67 20 74 68 65 20 7a 65 72 6f  cluding the zero
3120: 2d 74 65 72 6d 69 6e 61 74 6f 72 20 73 6f 0a 2a  -terminator so.*
3130: 2a 20 74 68 65 20 73 74 72 69 6e 67 20 69 74 73  * the string its
3140: 65 6c 66 20 73 68 6f 75 6c 64 20 62 65 20 31 35  elf should be 15
3150: 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
3160: 2e 20 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65  .  If you change
3170: 0a 2a 2a 20 74 68 65 20 68 65 61 64 65 72 2c 20  .** the header, 
3180: 74 68 65 6e 20 79 6f 75 72 20 63 75 73 74 6f 6d  then your custom
3190: 20 6c 69 62 72 61 72 79 20 77 69 6c 6c 20 6e 6f   library will no
31a0: 74 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61  t be able to rea
31b0: 64 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20  d .** databases 
31c0: 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
31d0: 20 73 74 61 6e 64 61 72 64 20 74 6f 6f 6c 73 20   standard tools 
31e0: 61 6e 64 20 74 68 65 20 73 74 61 6e 64 61 72 64  and the standard
31f0: 20 74 6f 6f 6c 73 0a 2a 2a 20 77 69 6c 6c 20 6e   tools.** will n
3200: 6f 74 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65  ot be able to re
3210: 61 64 20 64 61 74 61 62 61 73 65 73 20 63 72 65  ad databases cre
3220: 61 74 65 64 20 62 79 20 79 6f 75 72 20 63 75 73  ated by your cus
3230: 74 6f 6d 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a  tom library..*/.
3240: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 46  #ifndef SQLITE_F
3250: 49 4c 45 5f 48 45 41 44 45 52 20 2f 2a 20 31 32  ILE_HEADER /* 12
3260: 33 34 35 36 37 38 39 20 31 32 33 34 35 36 20 2a  3456789 123456 *
3270: 2f 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  /.#  define SQLI
3280: 54 45 5f 46 49 4c 45 5f 48 45 41 44 45 52 20 22  TE_FILE_HEADER "
3290: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22  SQLite format 3"
32a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
32b0: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
32c0: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
32d0: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
32e0: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
32f0: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
3300: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
3310: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
3320: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
3330: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3340: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
3350: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
3360: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
3370: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
3380: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
3390: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
33a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
33b0: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
33c0: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
33d0: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
33e0: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
33f0: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
3400: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
3410: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
3420: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
3430: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
3440: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
3450: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
3460: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
3470: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
3480: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
3490: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
34a0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
34b0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
34c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
34d0: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
34e0: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
34f0: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
3500: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
3510: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
3520: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
3530: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
3540: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
3550: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
3560: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
3570: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
3580: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
3590: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
35a0: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
35b0: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
35c0: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
35d0: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
35e0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
35f0: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
3600: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
3610: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
3620: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
3630: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
3640: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
3650: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
3660: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
3670: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
3680: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
3690: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
36a0: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
36b0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
36c0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
36d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
36e0: 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69  TE_DEBUG).# defi
36f0: 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64  ne NDEBUG 1.#end
3700: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e  if.#if defined(N
3710: 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65  DEBUG) && define
3720: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
3730: 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23  # undef NDEBUG.#
3740: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61  endif../*.** Ena
3750: 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ble SQLITE_ENABL
3760: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
3770: 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  TS if SQLITE_DEB
3780: 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e  UG is turned on.
3790: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
37a0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45  (SQLITE_ENABLE_E
37b0: 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29  XPLAIN_COMMENTS)
37c0: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
37d0: 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69  TE_DEBUG).# defi
37e0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
37f0: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
3800: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
3810: 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29  * The testcase()
3820: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
3830: 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67  o aid in coverag
3840: 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e  e testing.  When
3850: 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  .** doing covera
3860: 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20  ge testing, the 
3870: 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65  condition inside
3880: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
3890: 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d  .** testcase() m
38a0: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
38b0: 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66   both true and f
38c0: 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  alse in order to
38d0: 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61  .** get full bra
38e0: 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54  nch coverage.  T
38f0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
3900: 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a  cro is inserted.
3910: 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72  ** to help ensur
3920: 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20  e adequate test 
3930: 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63  coverage in plac
3940: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a  es where simple.
3950: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63  ** condition/dec
3960: 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69  ision coverage i
3970: 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46  s inadequate.  F
3980: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74  or example, test
3990: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65  case().** can be
39a0: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
39b0: 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75  re boundary valu
39c0: 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20  es are tested.  
39d0: 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74  For.** bitmask t
39e0: 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29  ests, testcase()
39f0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
3a00: 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62  make sure each b
3a10: 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69  it.** is signifi
3a20: 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74  cant and used at
3a30: 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e   least once.  On
3a40: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
3a50: 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74  ts.** where mult
3a60: 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f  iple cases go to
3a70: 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20   the same block 
3a80: 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73  of code, testcas
3a90: 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72  e().** can insur
3aa0: 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73  e that all cases
3ab0: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a   are evaluated..
3ac0: 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  **.*/.#ifdef SQL
3ad0: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3ae0: 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
3af0: 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23  Coverage(int);.#
3b00: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
3b10: 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71  (X)  if( X ){ sq
3b20: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f  lite3Coverage(__
3b30: 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65  LINE__); }.#else
3b40: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
3b50: 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  se(X).#endif../*
3b60: 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59  .** The TESTONLY
3b70: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
3b80: 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62  o enclose variab
3b90: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
3ba0: 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73  or.** other bits
3bb0: 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72   of code that ar
3bc0: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
3bd0: 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ort the argument
3be0: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74  s.** within test
3bf0: 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72  case() and asser
3c00: 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23  t() macros..*/.#
3c10: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
3c20: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
3c30: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3c40: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45  EST).# define TE
3c50: 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  STONLY(X)  X.#el
3c60: 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  se.# define TEST
3c70: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
3c80: 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20  /*.** Sometimes 
3c90: 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20  we need a small 
3ca0: 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73  amount of code s
3cb0: 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c  uch as a variabl
3cc0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
3cd0: 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72  .** to setup for
3ce0: 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28   a later assert(
3cf0: 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65  ) statement.  We
3d00: 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69   do not want thi
3d10: 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70  s code to.** app
3d20: 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28  ear when assert(
3d30: 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20  ) is disabled.  
3d40: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3d50: 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65  cro is therefore
3d60: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74  .** used to cont
3d70: 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63  ain that setup c
3d80: 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20  ode.  The "VVA" 
3d90: 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66  acronym stands f
3da0: 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74  or.** "Verificat
3db0: 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
3dc0: 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
3dd0: 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  on".  In other w
3de0: 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64  ords, the.** cod
3df0: 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c  e within VVA_ONL
3e00: 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75  Y() will only ru
3e10: 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63  n during verific
3e20: 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e  ation processes.
3e30: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  .*/.#ifndef NDEB
3e40: 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  UG.# define VVA_
3e50: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
3e60: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
3e70: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
3e80: 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61  .** The ALWAYS a
3e90: 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20  nd NEVER macros 
3ea0: 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e  surround boolean
3eb0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69   expressions whi
3ec0: 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64  ch.** are intend
3ed0: 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20  ed to always be 
3ee0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72  true or false, r
3ef0: 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75  espectively.  Su
3f00: 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  ch.** expression
3f10: 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74  s could be omitt
3f20: 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65  ed from the code
3f30: 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75   completely.  Bu
3f40: 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e  t they.** are in
3f50: 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77 20  cluded in a few 
3f60: 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74  cases in order t
3f70: 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65  o enhance the re
3f80: 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53  silience.** of S
3f90: 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63  QLite to unexpec
3fa0: 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74  ted behavior - t
3fb0: 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20  o make the code 
3fc0: 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a  "self-healing".*
3fd0: 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72  * or "ductile" r
3fe0: 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67  ather than being
3ff0: 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63   "brittle" and c
4000: 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20 66  rashing at the f
4010: 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20  irst.** hint of 
4020: 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69  unplanned behavi
4030: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68  or..**.** In oth
4040: 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53  er words, ALWAYS
4050: 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61   and NEVER are a
4060: 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69  dded for defensi
4070: 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57  ve code..**.** W
4080: 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  hen doing covera
4090: 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59  ge testing ALWAY
40a0: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
40b0: 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a  hard-coded to.**
40c0: 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c   be true and fal
40d0: 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 75  se so that the u
40e0: 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20  nreachable code 
40f0: 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69 6c  they specify wil
4100: 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e  l.** not be coun
4110: 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64 20  ted as untested 
4120: 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  code..*/.#if def
4130: 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45  ined(SQLITE_COVE
4140: 52 41 47 45 5f 54 45 53 54 29 20 7c 7c 20 64 65  RAGE_TEST) || de
4150: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
4160: 41 54 49 4f 4e 5f 54 45 53 54 29 0a 23 20 64 65  ATION_TEST).# de
4170: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
4180: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
4190: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
41a0: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
41b0: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
41c0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
41d0: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
41e0: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
41f0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
4200: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
4210: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
4220: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
4230: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
4240: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
4250: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
4260: 2a 2a 20 53 6f 6d 65 20 63 6f 6e 64 69 74 69 6f  ** Some conditio
4270: 6e 61 6c 73 20 61 72 65 20 6f 70 74 69 6d 69 7a  nals are optimiz
4280: 61 74 69 6f 6e 73 20 6f 6e 6c 79 2e 20 20 49 6e  ations only.  In
4290: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
42a0: 20 74 68 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f   the.** conditio
42b0: 6e 61 6c 73 20 61 72 65 20 72 65 70 6c 61 63 65  nals are replace
42c0: 64 20 77 69 74 68 20 61 20 63 6f 6e 73 74 61 6e  d with a constan
42d0: 74 20 31 20 28 74 72 75 65 29 20 6f 72 20 30 20  t 1 (true) or 0 
42e0: 28 66 61 6c 73 65 29 20 74 68 65 6e 0a 2a 2a 20  (false) then.** 
42f0: 74 68 65 20 63 6f 72 72 65 63 74 20 61 6e 73 77  the correct answ
4300: 65 72 20 69 73 20 73 74 69 6c 6c 20 6f 62 74 61  er is still obta
4310: 69 6e 65 64 2c 20 74 68 6f 75 67 68 20 70 65 72  ined, though per
4320: 68 61 70 73 20 6e 6f 74 20 61 73 20 71 75 69 63  haps not as quic
4330: 6b 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  kly..**.** The f
4340: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
4350: 6d 61 72 6b 20 74 68 65 73 65 20 6f 70 74 69 6d  mark these optim
4360: 69 7a 61 74 69 6f 6e 73 20 63 6f 6e 64 69 74 69  izations conditi
4370: 6f 6e 61 6c 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  onals..*/.#if de
4380: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
4390: 41 54 49 4f 4e 5f 54 45 53 54 29 0a 23 20 64 65  ATION_TEST).# de
43a0: 66 69 6e 65 20 4f 4b 5f 49 46 5f 41 4c 57 41 59  fine OK_IF_ALWAY
43b0: 53 5f 54 52 55 45 28 58 29 20 20 28 31 29 0a 23  S_TRUE(X)  (1).#
43c0: 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41 4c   define OK_IF_AL
43d0: 57 41 59 53 5f 46 41 4c 53 45 28 58 29 20 28 30  WAYS_FALSE(X) (0
43e0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
43f0: 20 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 54 52   OK_IF_ALWAYS_TR
4400: 55 45 28 58 29 20 20 28 58 29 0a 23 20 64 65 66  UE(X)  (X).# def
4410: 69 6e 65 20 4f 4b 5f 49 46 5f 41 4c 57 41 59 53  ine OK_IF_ALWAYS
4420: 5f 46 41 4c 53 45 28 58 29 20 28 58 29 0a 23 65  _FALSE(X) (X).#e
4430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65  ndif../*.** Some
4440: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
4450: 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62   are only possib
4460: 6c 65 20 69 66 20 53 51 4c 49 54 45 5f 54 45 53  le if SQLITE_TES
4470: 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  T_REALLOC_STRESS
4480: 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65 64 2e 20   is.** defined. 
4490: 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66 65   We need to defe
44a0: 6e 64 20 61 67 61 69 6e 73 74 20 74 68 6f 73 65  nd against those
44b0: 20 66 61 69 6c 75 72 65 73 20 77 68 65 6e 20 74   failures when t
44c0: 65 73 74 69 6e 67 20 77 69 74 68 0a 2a 2a 20 53  esting with.** S
44d0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
44e0: 4f 43 5f 53 54 52 45 53 53 2c 20 62 75 74 20 77  OC_STRESS, but w
44f0: 65 20 64 6f 6e 27 74 20 77 61 6e 74 20 74 68 65  e don't want the
4500: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 62 72 61   unreachable bra
4510: 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69 6e 67 20  nches.** during 
4520: 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64 2e 20  a normal build. 
4530: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
4540: 61 63 72 6f 20 63 61 6e 20 62 65 20 75 73 65 64  acro can be used
4550: 20 74 6f 20 64 69 73 61 62 6c 65 20 74 65 73 74   to disable test
4560: 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 61 6c  s.** that are al
4570: 77 61 79 73 20 66 61 6c 73 65 20 65 78 63 65 70  ways false excep
4580: 74 20 77 68 65 6e 20 53 51 4c 49 54 45 5f 54 45  t when SQLITE_TE
4590: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
45a0: 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 23 69 66  S is set..*/.#if
45b0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
45c0: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
45d0: 45 53 53 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e  ESS).# define ON
45e0: 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54  LY_IF_REALLOC_ST
45f0: 52 45 53 53 28 58 29 20 20 28 58 29 0a 23 65 6c  RESS(X)  (X).#el
4600: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
4610: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c  UG).# define ONL
4620: 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  Y_IF_REALLOC_STR
4630: 45 53 53 28 58 29 20 20 28 28 58 29 3f 28 61 73  ESS(X)  ((X)?(as
4640: 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65  sert(0),1):0).#e
4650: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c  lse.# define ONL
4660: 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  Y_IF_REALLOC_STR
4670: 45 53 53 28 58 29 20 20 28 30 29 0a 23 65 6e 64  ESS(X)  (0).#end
4680: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c 61 72  if../*.** Declar
4690: 61 74 69 6f 6e 73 20 75 73 65 64 20 66 6f 72 20  ations used for 
46a0: 74 72 61 63 69 6e 67 20 74 68 65 20 6f 70 65 72  tracing the oper
46b0: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 69 6e 74  ating system int
46c0: 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23 69 66 20  erfaces..*/.#if 
46d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 46  defined(SQLITE_F
46e0: 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c  ORCE_OS_TRACE) |
46f0: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
4700: 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20  _TEST) || \.    
4710: 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
4720: 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54 45  DEBUG) && SQLITE
4730: 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78 74 65 72  _OS_WIN).  exter
4740: 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 4f 53 54  n int sqlite3OST
4750: 72 61 63 65 3b 0a 23 20 64 65 66 69 6e 65 20 4f  race;.# define O
4760: 53 54 52 41 43 45 28 58 29 20 20 20 20 20 20 20  STRACE(X)       
4770: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 4f 53     if( sqlite3OS
4780: 54 72 61 63 65 20 29 20 73 71 6c 69 74 65 33 44  Trace ) sqlite3D
4790: 65 62 75 67 50 72 69 6e 74 66 20 58 0a 23 20 64  ebugPrintf X.# d
47a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 48 41 56  efine SQLITE_HAV
47b0: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6c 73 65  E_OS_TRACE.#else
47c0: 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43  .# define OSTRAC
47d0: 45 28 58 29 0a 23 20 75 6e 64 65 66 20 20 53 51  E(X).# undef  SQ
47e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
47f0: 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  CE.#endif../*.**
4800: 20 49 73 20 74 68 65 20 73 71 6c 69 74 65 33 45   Is the sqlite3E
4810: 72 72 4e 61 6d 65 28 29 20 66 75 6e 63 74 69 6f  rrName() functio
4820: 6e 20 6e 65 65 64 65 64 20 69 6e 20 74 68 65 20  n needed in the 
4830: 62 75 69 6c 64 3f 20 20 43 75 72 72 65 6e 74 6c  build?  Currentl
4840: 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e 65 65 64  y,.** it is need
4850: 65 64 20 62 79 20 22 6d 75 74 65 78 5f 77 33 32  ed by "mutex_w32
4860: 2e 63 22 20 28 77 68 65 6e 20 64 65 62 75 67 67  .c" (when debugg
4870: 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e 2e 63 22  ing), "os_win.c"
4880: 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54 52 41 43   (when.** OSTRAC
4890: 45 20 69 73 20 65 6e 61 62 6c 65 64 29 2c 20 61  E is enabled), a
48a0: 6e 64 20 62 79 20 73 65 76 65 72 61 6c 20 22 74  nd by several "t
48b0: 65 73 74 2a 2e 63 22 20 66 69 6c 65 73 20 28 77  est*.c" files (w
48c0: 68 69 63 68 20 61 72 65 0a 2a 2a 20 63 6f 6d 70  hich are.** comp
48d0: 69 6c 65 64 20 75 73 69 6e 67 20 53 51 4c 49 54  iled using SQLIT
48e0: 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23 69 66 20  E_TEST)..*/.#if 
48f0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
4900: 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c  AVE_OS_TRACE) ||
4910: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
4920: 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28  TEST) || \.    (
4930: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
4940: 45 42 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f  EBUG) && SQLITE_
4950: 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66 69 6e 65  OS_WIN).# define
4960: 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52   SQLITE_NEED_ERR
4970: 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23 20 75 6e  _NAME.#else.# un
4980: 64 65 66 20 20 53 51 4c 49 54 45 5f 4e 45 45 44  def  SQLITE_NEED
4990: 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e 64 69 66  _ERR_NAME.#endif
49a0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 45  ../*.** SQLITE_E
49b0: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
49c0: 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63 6f 6d 70  MMENTS is incomp
49d0: 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 49  atible with SQLI
49e0: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
49f0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4a00: 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 23 20  _OMIT_EXPLAIN.# 
4a10: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
4a20: 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d  BLE_EXPLAIN_COMM
4a30: 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ENTS.#endif../*.
4a40: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28  ** Return true (
4a50: 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65  non-zero) if the
4a60: 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74   input is an int
4a70: 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f  eger that is too
4a80: 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74   large.** to fit
4a90: 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68   in 32-bits.  Th
4aa0: 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
4ab0: 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f   inside of vario
4ac0: 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a  us testcase().**
4ad0: 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66   macros to verif
4ae0: 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74  y that we have t
4af0: 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72  ested SQLite for
4b00: 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70   large-file supp
4b10: 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ort..*/.#define 
4b20: 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28  IS_BIG_INT(X)  (
4b30: 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66  ((X)&~(i64)0xfff
4b40: 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a  fffff)!=0)../*.*
4b50: 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69  * The macro unli
4b60: 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74  kely() is a hint
4b70: 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20   that surrounds 
4b80: 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70  a boolean.** exp
4b90: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
4ba0: 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20  usually false.  
4bb0: 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73  Macro likely() s
4bc0: 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f  urrounds.** a bo
4bd0: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
4be0: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
4bf0: 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69   true.  These hi
4c00: 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e  nts could,.** in
4c10: 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64   theory, be used
4c20: 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   by the compiler
4c30: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74   to generate bet
4c40: 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a  ter code, but.**
4c50: 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20   currently they 
4c60: 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74  are just comment
4c70: 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64  s for human read
4c80: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
4c90: 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29  likely(X)    (X)
4ca0: 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c  .#define unlikel
4cb0: 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c  y(X)  (X)..#incl
4cc0: 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e  ude "hash.h".#in
4cd0: 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a  clude "parse.h".
4ce0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e  #include <stdio.
4cf0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h>.#include <std
4d00: 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  lib.h>.#include 
4d10: 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c  <string.h>.#incl
4d20: 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23  ude <assert.h>.#
4d30: 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e  include <stddef.
4d40: 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65 20 61 20  h>../*.** Use a 
4d50: 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c 61 63 65  macro to replace
4d60: 20 6d 65 6d 63 70 79 28 29 20 69 66 20 63 6f 6d   memcpy() if com
4d70: 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54  piled with SQLIT
4d80: 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 2e  E_INLINE_MEMCPY.
4d90: 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  .** This allows 
4da0: 62 65 74 74 65 72 20 6d 65 61 73 75 72 65 6d 65  better measureme
4db0: 6e 74 73 20 6f 66 20 77 68 65 72 65 20 6d 65 6d  nts of where mem
4dc0: 63 70 79 28 29 20 69 73 20 75 73 65 64 20 77 68  cpy() is used wh
4dd0: 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a 20 63 61  en running.** ca
4de0: 63 68 65 67 72 69 6e 64 2e 20 20 42 75 74 20 74  chegrind.  But t
4df0: 68 69 73 20 6d 61 63 72 6f 20 76 65 72 73 69 6f  his macro versio
4e00: 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29 20 69 73  n of memcpy() is
4e10: 20 76 65 72 79 20 73 6c 6f 77 20 73 6f 20 69 74   very slow so it
4e20: 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62  .** should not b
4e30: 65 20 75 73 65 64 20 69 6e 20 70 72 6f 64 75 63  e used in produc
4e40: 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 73 20 61  tion.  This is a
4e50: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6d 65 61   performance mea
4e60: 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68 61 63 6b  surement.** hack
4e70: 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66 64 65 66   only..*/.#ifdef
4e80: 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d   SQLITE_INLINE_M
4e90: 45 4d 43 50 59 0a 23 20 64 65 66 69 6e 65 20 6d  EMCPY.# define m
4ea0: 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20 7b 63 68  emcpy(D,S,N) {ch
4eb0: 61 72 2a 78 78 64 3d 28 63 68 61 72 2a 29 28 44  ar*xxd=(char*)(D
4ec0: 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a 78 78 73  );const char*xxs
4ed0: 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 28 53  =(const char*)(S
4ee0: 29 3b 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  );\.            
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
4f00: 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65 28 78 78  xxn=(N);while(xx
4f10: 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b 29 3d 2a  n-->0)*(xxd++)=*
4f20: 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e 64 69 66  (xxs++);}.#endif
4f30: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69  ../*.** If compi
4f40: 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65  ling for a proce
4f50: 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20  ssor that lacks 
4f60: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73  floating point s
4f70: 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74  upport,.** subst
4f80: 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f  itute integer fo
4f90: 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  r floating-point
4fa0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4fb0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
4fc0: 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64  POINT.# define d
4fd0: 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74  ouble sqlite_int
4fe0: 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61  64.# define floa
4ff0: 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  t sqlite_int64.#
5000: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
5010: 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69  LE_TYPE sqlite_i
5020: 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51  nt64.# ifndef SQ
5030: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20  LITE_BIG_DBL.#  
5040: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5050: 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65  IG_DBL (((sqlite
5060: 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a  3_int64)1)<<50).
5070: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
5080: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54   SQLITE_OMIT_DAT
5090: 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20  ETIME_FUNCS 1.# 
50a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d  define SQLITE_OM
50b0: 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64  IT_TRACE 1.# und
50c0: 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f  ef SQLITE_MIXED_
50d0: 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f  ENDIAN_64BIT_FLO
50e0: 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  AT.# undef SQLIT
50f0: 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e  E_HAVE_ISNAN.#en
5100: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
5110: 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66  TE_BIG_DBL.# def
5120: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  ine SQLITE_BIG_D
5130: 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66  BL (1e99).#endif
5140: 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d  ../*.** OMIT_TEM
5150: 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20  PDB is set to 1 
5160: 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  if SQLITE_OMIT_T
5170: 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64  EMPDB is defined
5180: 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77  , or 0.** afterw
5190: 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73  ard. Having this
51a0: 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73   macro allows us
51b0: 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20   to cause the C 
51c0: 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 6f  compiler.** to o
51d0: 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79  mit code used by
51e0: 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74   TEMP tables wit
51f0: 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64  hout messy #ifnd
5200: 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  ef statements..*
5210: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5220: 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66  OMIT_TEMPDB.#def
5230: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
5240: 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  1.#else.#define 
5250: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65  OMIT_TEMPDB 0.#e
5260: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
5270: 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75  "file format" nu
5280: 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67  mber is an integ
5290: 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65  er that is incre
52a0: 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a  mented whenever.
52b0: 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65  ** the VDBE-leve
52c0: 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68  l file format ch
52d0: 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c  anges.  The foll
52e0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66  owing macros def
52f0: 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64  ine the.** the d
5300: 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d  efault file form
5310: 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62  at for new datab
5320: 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78  ases and the max
5330: 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74  imum file format
5340: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62  .** that the lib
5350: 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a  rary can read..*
5360: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
5370: 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  _MAX_FILE_FORMAT
5380: 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   4.#ifndef SQLIT
5390: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
53a0: 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53  ORMAT.# define S
53b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
53c0: 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64  LE_FORMAT 4.#end
53d0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  if../*.** Determ
53e0: 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67  ine whether trig
53f0: 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69  gers are recursi
5400: 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ve by default.  
5410: 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63  This can be.** c
5420: 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69  hanged at run-ti
5430: 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d  me using a pragm
5440: 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  a..*/.#ifndef SQ
5450: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
5460: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a  URSIVE_TRIGGERS.
5470: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5480: 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56  DEFAULT_RECURSIV
5490: 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e  E_TRIGGERS 0.#en
54a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69  dif../*.** Provi
54b0: 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  de a default val
54c0: 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ue for SQLITE_TE
54d0: 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65  MP_STORE in case
54e0: 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69   it is not speci
54f0: 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63  fied.** on the c
5500: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23  ommand-line.*/.#
5510: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45  ifndef SQLITE_TE
5520: 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e  MP_STORE.# defin
5530: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
5540: 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ORE 1.#endif../*
5550: 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20  .** If no value 
5560: 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65  has been provide
5570: 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58  d for SQLITE_MAX
5580: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c  _WORKER_THREADS,
5590: 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45   or if.** SQLITE
55a0: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73  _TEMP_STORE is s
55b0: 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75  et to 3 (never u
55c0: 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c  se temporary fil
55d0: 65 73 29 2c 20 73 65 74 20 69 74 0a 2a 2a 20 74  es), set it.** t
55e0: 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53  o zero..*/.#if S
55f0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5600: 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48  ==3 || SQLITE_TH
5610: 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e  READSAFE==0.# un
5620: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
5630: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
5640: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
5650: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
5660: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
5670: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
5680: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
5690: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
56a0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38  WORKER_THREADS 8
56b0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
56c0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
56d0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
56e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56f0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
5700: 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69  EADS 0.#endif.#i
5710: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
5720: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
5730: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5740: 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65  R_THREADS.# unde
5750: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
5760: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
5770: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
5780: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53  WORKER_THREADS S
5790: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
57a0: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e  RKER_THREADS.#en
57b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
57c0: 65 66 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61  efault initial a
57d0: 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68  llocation for th
57e0: 65 20 70 61 67 65 63 61 63 68 65 20 77 68 65 6e  e pagecache when
57f0: 20 75 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a   using separate.
5800: 2a 2a 20 70 61 67 65 63 61 63 68 65 73 20 66 6f  ** pagecaches fo
5810: 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
5820: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70  connection.  A p
5830: 6f 73 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69  ositive number i
5840: 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  s the.** number 
5850: 6f 66 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67  of pages.  A neg
5860: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74  ative number N t
5870: 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e  ranslations mean
5880: 73 20 74 68 61 74 20 61 20 62 75 66 66 65 72 0a  s that a buffer.
5890: 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79  ** of -1024*N by
58a0: 74 65 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  tes is allocated
58b0: 20 61 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73   and used for as
58c0: 20 6d 61 6e 79 20 70 61 67 65 73 20 61 73 20 69   many pages as i
58d0: 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2a 0a  t will hold..**.
58e0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  ** The default v
58f0: 61 6c 75 65 20 6f 66 20 22 32 30 22 20 77 61 73  alue of "20" was
5900: 20 63 68 6f 6f 73 65 6e 20 74 6f 20 6d 69 6e 69   choosen to mini
5910: 6d 69 7a 65 20 74 68 65 20 72 75 6e 2d 74 69 6d  mize the run-tim
5920: 65 20 6f 66 20 74 68 65 0a 2a 2a 20 73 70 65 65  e of the.** spee
5930: 64 74 65 73 74 31 20 74 65 73 74 20 70 72 6f 67  dtest1 test prog
5940: 72 61 6d 20 77 69 74 68 20 6f 70 74 69 6f 6e 73  ram with options
5950: 3a 20 2d 2d 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72  : --shrink-memor
5960: 79 20 2d 2d 72 65 70 72 65 70 61 72 65 0a 2a 2f  y --reprepare.*/
5970: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5980: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
5990: 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53  NITSZ.# define S
59a0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43  QLITE_DEFAULT_PC
59b0: 41 43 48 45 5f 49 4e 49 54 53 5a 20 32 30 0a 23  ACHE_INITSZ 20.#
59c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
59d0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
59e0: 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  he SQLITE_CONFIG
59f0: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5a00: 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  option..*/.#ifnd
5a10: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
5a20: 54 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45  T_SORTERREF_SIZE
5a30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5a40: 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52 52  _DEFAULT_SORTERR
5a50: 45 46 5f 53 49 5a 45 20 30 78 37 66 66 66 66 66  EF_SIZE 0x7fffff
5a60: 66 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ff.#endif../*.**
5a70: 20 54 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   The compile-tim
5a80: 65 20 6f 70 74 69 6f 6e 73 20 53 51 4c 49 54 45  e options SQLITE
5a90: 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45 20  _MMAP_READWRITE 
5aa0: 61 6e 64 20 0a 2a 2a 20 53 51 4c 49 54 45 5f 45  and .** SQLITE_E
5ab0: 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
5ac0: 49 43 5f 57 52 49 54 45 20 61 72 65 20 6e 6f 74  IC_WRITE are not
5ad0: 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68   compatible with
5ae0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2a   one another..**
5af0: 20 59 6f 75 20 6d 75 73 74 20 63 68 6f 6f 73 65   You must choose
5b00: 20 6f 6e 65 20 6f 72 20 74 68 65 20 6f 74 68 65   one or the othe
5b10: 72 20 28 6f 72 20 6e 65 69 74 68 65 72 29 20 62  r (or neither) b
5b20: 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2f 0a  ut not both..*/.
5b30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
5b40: 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54  TE_MMAP_READWRIT
5b50: 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  E) && defined(SQ
5b60: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43  LITE_ENABLE_BATC
5b70: 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a  H_ATOMIC_WRITE).
5b80: 23 65 72 72 6f 72 20 43 61 6e 6e 6f 74 20 75 73  #error Cannot us
5b90: 65 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 4d 4d  e both SQLITE_MM
5ba0: 41 50 5f 52 45 41 44 57 52 49 54 45 20 61 6e 64  AP_READWRITE and
5bb0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42   SQLITE_ENABLE_B
5bc0: 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54  ATCH_ATOMIC_WRIT
5bd0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
5be0: 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66  GCC does not def
5bf0: 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66  ine the offsetof
5c00: 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c  () macro so we'l
5c10: 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a  l have to do it.
5c20: 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f  ** ourselves..*/
5c30: 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f  .#ifndef offseto
5c40: 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74  f.#define offset
5c50: 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45  of(STRUCTURE,FIE
5c60: 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72  LD) ((int)((char
5c70: 2a 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29  *)&((STRUCTURE*)
5c80: 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64  0)->FIELD)).#end
5c90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
5ca0: 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69   to compute mini
5cb0: 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20  mum and maximum 
5cc0: 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a  of two numbers..
5cd0: 2a 2f 0a 23 69 66 6e 64 65 66 20 4d 49 4e 0a 23  */.#ifndef MIN.#
5ce0: 20 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29   define MIN(A,B)
5cf0: 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42   ((A)<(B)?(A):(B
5d00: 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  )).#endif.#ifnde
5d10: 66 20 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 4d  f MAX.# define M
5d20: 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29  AX(A,B) ((A)>(B)
5d30: 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69 66  ?(A):(B)).#endif
5d40: 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f  ../*.** Swap two
5d50: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65   objects of type
5d60: 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e   TYPE..*/.#defin
5d70: 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29  e SWAP(TYPE,A,B)
5d80: 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b   {TYPE t=A; A=B;
5d90: 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68   B=t;}../*.** Ch
5da0: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
5db0: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
5dc0: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
5dd0: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
5de0: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
5df0: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
5e00: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
5e10: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
5e20: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
5e30: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5e40: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
5e50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
5e60: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
5e70: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
5e80: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
5e90: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
5ea0: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
5eb0: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
5ec0: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
5ed0: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
5ee0: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
5ef0: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
5f00: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
5f10: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
5f20: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
5f30: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
5f40: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
5f50: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
5f60: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
5f70: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
5f80: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
5f90: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5fa0: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
5fb0: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
5fc0: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
5fd0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
5fe0: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
5ff0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
6000: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
6010: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
6020: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
6030: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
6040: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
6050: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
6060: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
6070: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
6080: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
6090: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
60a0: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
60b0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
60c0: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
60d0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
60e0: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
60f0: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
6100: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
6110: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
6120: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
6130: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
6140: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
6150: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
6160: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
6170: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
6180: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
6190: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
61a0: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
61b0: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
61c0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
61d0: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
61e0: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
61f0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
6200: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
6210: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
6220: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
6230: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
6240: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
6250: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
6260: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
6270: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
6280: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
6290: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
62a0: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
62b0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
62c0: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
62d0: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
62e0: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
62f0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
6300: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
6310: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
6320: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
6330: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
6340: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
6350: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
6360: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
6370: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
6380: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
6390: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
63a0: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
63b0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
63c0: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
63d0: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
63e0: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
63f0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
6400: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
6410: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
6420: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
6430: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
6440: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
6450: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
6460: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
6470: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
6480: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
6490: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
64a0: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
64b0: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
64c0: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
64d0: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
64e0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
64f0: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
6500: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
6510: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
6520: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
6530: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
6540: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
6550: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
6560: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
6570: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
6580: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
6590: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
65a0: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
65b0: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
65c0: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
65d0: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
65e0: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
65f0: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
6600: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
6610: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
6620: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
6630: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
6640: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
6650: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
6660: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
6670: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
6680: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
6690: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
66a0: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
66b0: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
66c0: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
66d0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
66e0: 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74   Estimated quant
66f0: 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71  ities used for q
6700: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72  uery planning ar
6710: 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62  e stored as 16-b
6720: 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73  it.** logarithms
6730: 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20  .  For quantity 
6740: 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  X, the value sto
6750: 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58  red is 10*log2(X
6760: 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65  ).  This.** give
6770: 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e  s a possible ran
6780: 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20  ge of values of 
6790: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e  approximately 1.
67a0: 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e  0e986 to 1e-986.
67b0: 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f  .** But the allo
67c0: 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22  wed values are "
67d0: 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76  grainy".  Not ev
67e0: 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70  ery value is rep
67f0: 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46  resentable..** F
6800: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e  or example, quan
6810: 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37  tities 16 and 17
6820: 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73   are both repres
6830: 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73  ented by a LogEs
6840: 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77  t.** of 40.  How
6850: 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45  ever, since LogE
6860: 73 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72  st quantities ar
6870: 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20  e suppose to be 
6880: 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f  estimates,.** no
6890: 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20  t exact values, 
68a0: 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e  this imprecision
68b0: 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65   is not a proble
68c0: 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74  m..**.** "LogEst
68d0: 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22  " is short for "
68e0: 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69  Logarithmic Esti
68f0: 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61  mate"..**.** Exa
6900: 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31  mples:.**      1
6910: 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20   -> 0           
6920: 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20     20 -> 43     
6930: 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33       10000 -> 13
6940: 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31  2.**      2 -> 1
6950: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35  0             25
6960: 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20   -> 46          
6970: 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20  25000 -> 146.** 
6980: 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20       3 -> 16    
6990: 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36          100 -> 6
69a0: 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30  6        1000000
69b0: 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20   -> 199.**      
69c0: 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20  4 -> 20         
69d0: 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20    1000 -> 99    
69e0: 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32      1048576 -> 2
69f0: 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20  00.**     10 -> 
6a00: 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32  33           102
6a10: 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34  4 -> 100    4294
6a20: 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a  967296 -> 320.**
6a30: 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63  .** The LogEst c
6a40: 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74  an be negative t
6a50: 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74  o indicate fract
6a60: 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a  ional values..**
6a70: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
6a80: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
6a90: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
6aa0: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
6ab0: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
6ac0: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
6ad0: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65  ogEst;../*.** Se
6ae0: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52  t the SQLITE_PTR
6af0: 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68  SIZE macro to th
6b00: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
6b10: 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a  s in a pointer.*
6b20: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
6b30: 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65  _PTRSIZE.# if de
6b40: 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50  fined(__SIZEOF_P
6b50: 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65  OINTER__).#   de
6b60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
6b70: 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49  IZE __SIZEOF_POI
6b80: 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65  NTER__.# elif de
6b90: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
6ba0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
6bb0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
6bc0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6bd0: 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65   \.       define
6be0: 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64  d(_M_ARM)   || d
6bf0: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20  efined(__arm__) 
6c00: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6c10: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6c20: 20 20 20 20 20 28 64 65 66 69 6e 65 64 28 5f 5f       (defined(__
6c30: 54 4f 53 5f 41 49 58 5f 5f 29 20 26 26 20 21 64  TOS_AIX__) && !d
6c40: 65 66 69 6e 65 64 28 5f 5f 36 34 42 49 54 5f 5f  efined(__64BIT__
6c50: 29 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  )).#   define SQ
6c60: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34 0a 23  LITE_PTRSIZE 4.#
6c70: 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65   else.#   define
6c80: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
6c90: 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  8.# endif.#endif
6ca0: 0a 0a 2f 2a 20 54 68 65 20 75 70 74 72 20 74 79  ../* The uptr ty
6cb0: 70 65 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  pe is an unsigne
6cc0: 64 20 69 6e 74 65 67 65 72 20 6c 61 72 67 65 20  d integer large 
6cd0: 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 61  enough to hold a
6ce0: 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 20   pointer.*/.#if 
6cf0: 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44  defined(HAVE_STD
6d00: 49 4e 54 5f 48 29 0a 20 20 74 79 70 65 64 65 66  INT_H).  typedef
6d10: 20 75 69 6e 74 70 74 72 5f 74 20 75 70 74 72 3b   uintptr_t uptr;
6d20: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 50 54  .#elif SQLITE_PT
6d30: 52 53 49 5a 45 3d 3d 34 0a 20 20 74 79 70 65 64  RSIZE==4.  typed
6d40: 65 66 20 75 33 32 20 75 70 74 72 3b 0a 23 65 6c  ef u32 uptr;.#el
6d50: 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
6d60: 20 75 70 74 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f   uptr;.#endif../
6d70: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
6d80: 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 6d 61  WITHIN(P,S,E) ma
6d90: 63 72 6f 20 63 68 65 63 6b 73 20 74 6f 20 73 65  cro checks to se
6da0: 65 20 69 66 20 70 6f 69 6e 74 65 72 20 50 20 70  e if pointer P p
6db0: 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65  oints to.** some
6dc0: 74 68 69 6e 67 20 62 65 74 77 65 65 6e 20 53 20  thing between S 
6dd0: 28 69 6e 63 6c 75 73 69 76 65 29 20 61 6e 64 20  (inclusive) and 
6de0: 45 20 28 65 78 63 6c 75 73 69 76 65 29 2e 0a 2a  E (exclusive)..*
6df0: 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  *.** In other wo
6e00: 72 64 73 2c 20 53 20 69 73 20 61 20 62 75 66 66  rds, S is a buff
6e10: 65 72 20 61 6e 64 20 45 20 69 73 20 61 20 70 6f  er and E is a po
6e20: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
6e30: 73 74 20 62 79 74 65 20 61 66 74 65 72 0a 2a 2a  st byte after.**
6e40: 20 74 68 65 20 65 6e 64 20 6f 66 20 62 75 66 66   the end of buff
6e50: 65 72 20 53 2e 20 20 54 68 69 73 20 6d 61 63 72  er S.  This macr
6e60: 6f 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  o returns true i
6e70: 66 20 50 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f  f P points to so
6e80: 6d 65 74 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61  mething.** conta
6e90: 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
6ea0: 62 75 66 66 65 72 20 53 2e 0a 2a 2f 0a 23 64 65  buffer S..*/.#de
6eb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 49 54 48  fine SQLITE_WITH
6ec0: 49 4e 28 50 2c 53 2c 45 29 20 28 28 28 75 70 74  IN(P,S,E) (((upt
6ed0: 72 29 28 50 29 3e 3d 28 75 70 74 72 29 28 53 29  r)(P)>=(uptr)(S)
6ee0: 29 26 26 28 28 75 70 74 72 29 28 50 29 3c 28 75  )&&((uptr)(P)<(u
6ef0: 70 74 72 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a  ptr)(E))).../*.*
6f00: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
6f10: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68  rmine whether th
6f20: 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67  e machine is big
6f30: 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61   or little endia
6f40: 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68 65  n,.** and whethe
6f50: 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64 65  r or not that de
6f60: 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72  termination is r
6f70: 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69  un-time or compi
6f80: 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46  le-time..**.** F
6f90: 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61  or best performa
6fa0: 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74 20  nce, an attempt 
6fb0: 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73 73  is made to guess
6fc0: 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72 64   at the byte-ord
6fd0: 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72  er.** using C-pr
6fe0: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
6ff0: 73 2e 20 20 49 66 20 74 68 61 74 20 69 73 20 75  s.  If that is u
7000: 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20  nsuccessful, or 
7010: 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 42  if.** -DSQLITE_B
7020: 59 54 45 4f 52 44 45 52 3d 30 20 69 73 20 73 65  YTEORDER=0 is se
7030: 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64  t, then byte-ord
7040: 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  er is determined
7050: 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e  .** at run-time.
7060: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7070: 54 45 5f 42 59 54 45 4f 52 44 45 52 0a 23 20 69  TE_BYTEORDER.# i
7080: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
7090: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
70a0: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
70b0: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
70c0: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
70d0: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c  ned(__x86_64) ||
70e0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
70f0: 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  4__) || defined(
7100: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
7110: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
7120: 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69 6e  _AMD64) || defin
7130: 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c  ed(_M_ARM)     |
7140: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29  | defined(__x86)
7150: 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20     ||    \.     
7160: 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29  defined(__arm__)
7170: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
7180: 41 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e  ARM64).#   defin
7190: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
71a0: 45 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69  ER    1234.# eli
71b0: 66 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29  f defined(sparc)
71c0: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
71d0: 5f 70 70 63 5f 5f 29 0a 23 20 20 20 64 65 66 69  _ppc__).#   defi
71e0: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
71f0: 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 65 6c  DER    4321.# el
7200: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
7210: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 30  LITE_BYTEORDER 0
7220: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
7230: 23 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  #if SQLITE_BYTEO
7240: 52 44 45 52 3d 3d 34 33 32 31 0a 23 20 64 65 66  RDER==4321.# def
7250: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7260: 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69  DIAN    1.# defi
7270: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7280: 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e  ENDIAN 0.# defin
7290: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
72a0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
72b0: 31 36 42 45 0a 23 65 6c 69 66 20 53 51 4c 49 54  16BE.#elif SQLIT
72c0: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31 32 33  E_BYTEORDER==123
72d0: 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  4.# define SQLIT
72e0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
72f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7300: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
7310: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
7320: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
7330: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c 73  ITE_UTF16LE.#els
7340: 65 0a 23 20 69 66 64 65 66 20 53 51 4c 49 54 45  e.# ifdef SQLITE
7350: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
7360: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
7370: 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65  3one = 1;.# else
7380: 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  .  extern const 
7390: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
73a0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
73b0: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
73c0: 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28  N    (*(char *)(
73d0: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29  &sqlite3one)==0)
73e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
73f0: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a  _LITTLEENDIAN (*
7400: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7410: 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69  3one)==1).# defi
7420: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
7430: 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f 42  ATIVE  (SQLITE_B
7440: 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f  IGENDIAN?SQLITE_
7450: 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55  UTF16BE:SQLITE_U
7460: 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a  TF16LE).#endif..
7470: 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20  /*.** Constants 
7480: 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74 20  for the largest 
7490: 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73  and smallest pos
74a0: 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67  sible 64-bit sig
74b0: 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  ned integers..**
74c0: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72   These macros ar
74d0: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f  e designed to wo
74e0: 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20  rk correctly on 
74f0: 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20  both 32-bit and 
7500: 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c  64-bit.** compil
7510: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
7520: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28  LARGEST_INT64  (
7530: 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69 36  0xffffffff|(((i6
7540: 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
7550: 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c  2)).#define SMAL
7560: 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36  LEST_INT64 (((i6
7570: 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f  4)-1) - LARGEST_
7580: 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  INT64)../*.** Ro
7590: 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20  und up a number 
75a0: 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67  to the next larg
75b0: 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  er multiple of 8
75c0: 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a  .  This is used.
75d0: 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79  ** to force 8-by
75e0: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20  te alignment on 
75f0: 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74  64-bit architect
7600: 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ures..*/.#define
7610: 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28   ROUND8(x)     (
7620: 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a  ((x)+7)&~7)../*.
7630: 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f  ** Round down to
7640: 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c   the nearest mul
7650: 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64  tiple of 8.*/.#d
7660: 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38  efine ROUNDDOWN8
7670: 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a  (x) ((x)&~7)../*
7680: 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20  .** Assert that 
7690: 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73  the pointer X is
76a0: 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38   aligned to an 8
76b0: 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20  -byte boundary. 
76c0: 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69   This.** macro i
76d0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68  s used only with
76e0: 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76  in assert() to v
76f0: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63  erify that the c
7700: 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20  ode gets.** all 
7710: 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69  alignment restri
7720: 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a  ctions correct..
7730: 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66  **.** Except, if
7740: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
7750: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73  LIGNED_MALLOC is
7760: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74   defined, then t
7770: 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  he.** underlying
7780: 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d   malloc() implem
7790: 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72  entation might r
77a0: 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20  eturn us 4-byte 
77b0: 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74  aligned.** point
77c0: 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61  ers.  In that ca
77d0: 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20  se, only verify 
77e0: 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  4-byte alignment
77f0: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
7800: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
7810: 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e  D_MALLOC.# defin
7820: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
7830: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
7840: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
7850: 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c  r*)0)&3)==0).#el
7860: 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  se.# define EIGH
7870: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
7880: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
7890: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
78a0: 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f  7)==0).#endif../
78b0: 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41  *.** Disable MMA
78c0: 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77  P on platforms w
78d0: 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e  here it is known
78e0: 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a   to not work.*/.
78f0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70  #if defined(__Op
7900: 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69  enBSD__) || defi
7910: 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a  ned(__QNXNTO__).
7920: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
7930: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  AX_MMAP_SIZE.# d
7940: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
7950: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e  _MMAP_SIZE 0.#en
7960: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
7970: 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  lt maximum size 
7980: 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62  of memory used b
7990: 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20  y memory-mapped 
79a0: 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a  I/O in the VFS.*
79b0: 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45  /.#ifdef __APPLE
79c0: 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61  __.# include <Ta
79d0: 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73  rgetConditionals
79e0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  .h>.#endif.#ifnd
79f0: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
7a00: 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65 66  AP_SIZE.# if def
7a10: 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20  ined(__linux__) 
7a20: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
7a30: 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64  WIN32) \.  || (d
7a40: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
7a50: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d  ) && defined(__M
7a60: 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64  ACH__)) \.  || d
7a70: 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a  efined(__sun) \.
7a80: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46    || defined(__F
7a90: 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c  reeBSD__) \.  ||
7aa0: 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f   defined(__Drago
7ab0: 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65 66 69  nFly__).#   defi
7ac0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
7ad0: 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30  AP_SIZE 0x7fff00
7ae0: 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31  00  /* 214741811
7af0: 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20  2 */.# else.#   
7b00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
7b10: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
7b20: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
7b30: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
7b40: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72  MMAP_SIZE is zer
7b50: 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72  o on all platfor
7b60: 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66  ms.  Or, even if
7b70: 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66   a larger.** def
7b80: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
7b90: 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63  s specified at c
7ba0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b  ompile-time, mak
7bb0: 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64  e sure that it d
7bc0: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65  oes.** not excee
7bd0: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d  d the maximum mm
7be0: 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e  ap size..*/.#ifn
7bf0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
7c00: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
7c10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
7c20: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  AULT_MMAP_SIZE 0
7c30: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
7c40: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7c50: 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE>SQLITE_MAX_
7c60: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65  MMAP_SIZE.# unde
7c70: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
7c80: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
7c90: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
7ca0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c  LT_MMAP_SIZE SQL
7cb0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7cc0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
7cd0: 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49  Only one of SQLI
7ce0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20  TE_ENABLE_STAT3 
7cf0: 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
7d00: 5f 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65  _STAT4 can be de
7d10: 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69  fined..** Priori
7d20: 74 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53  ty is given to S
7d30: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7d40: 54 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61  T4.  If either a
7d50: 72 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f  re defined, also
7d60: 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .** define SQLIT
7d70: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7d80: 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65  R_STAT4.*/.#ifde
7d90: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7da0: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
7db0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7dc0: 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  3.# define SQLIT
7dd0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7de0: 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20  R_STAT4 1.#elif 
7df0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7e00: 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  AT3.# define SQL
7e10: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7e20: 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69  _OR_STAT4 1.#eli
7e30: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7e40: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
7e50: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
7e60: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7e70: 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AT4.#endif../*.*
7e80: 2a 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  * SELECTTRACE_EN
7e90: 41 42 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69  ABLED will be ei
7ea0: 74 68 65 72 20 31 20 6f 72 20 30 20 64 65 70 65  ther 1 or 0 depe
7eb0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
7ec0: 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53   or not.** the S
7ed0: 65 6c 65 63 74 20 71 75 65 72 79 20 67 65 6e 65  elect query gene
7ee0: 72 61 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f  rator tracing lo
7ef0: 67 69 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  gic is turned on
7f00: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
7f10: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
7f20: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
7f30: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
7f40: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
7f50: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
7f60: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
7f70: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
7f80: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7f90: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7fa0: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
7fb0: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
7fc0: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
7fd0: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
7fe0: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
7ff0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
8000: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
8010: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
8020: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
8030: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
8040: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
8050: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
8060: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
8070: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
8080: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
8090: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
80a0: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
80b0: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
80c0: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
80d0: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
80e0: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
80f0: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
8100: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8110: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
8120: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
8130: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
8140: 20 20 69 6e 74 20 28 2a 78 42 75 73 79 48 61 6e    int (*xBusyHan
8150: 64 6c 65 72 29 28 76 6f 69 64 20 2a 2c 69 6e 74  dler)(void *,int
8160: 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20  );  /* The busy 
8170: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
8180: 69 64 20 2a 70 42 75 73 79 41 72 67 3b 20 20 20  id *pBusyArg;   
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81a0: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
81b0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
81c0: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81e0: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
81f0: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
8200: 73 79 20 63 61 6c 6c 20 2a 2f 0a 20 20 75 38 20  sy call */.  u8 
8210: 62 45 78 74 72 61 46 69 6c 65 41 72 67 3b 20 20  bExtraFileArg;  
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8230: 2a 20 49 6e 63 6c 75 64 65 20 73 71 6c 69 74 65  * Include sqlite
8240: 33 5f 66 69 6c 65 20 61 73 20 63 61 6c 6c 62 61  3_file as callba
8250: 63 6b 20 61 72 67 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ck arg */.};../*
8260: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
8270: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
8280: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
8290: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
82a0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
82b0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
82c0: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
82d0: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
82e0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
82f0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
8300: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
8310: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
8320: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
8330: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
8340: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
8350: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
8360: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
8370: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
8380: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
8390: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
83a0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
83b0: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
83c0: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
83d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
83e0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
83f0: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
8400: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
8410: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
8420: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
8430: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
8440: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
8450: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
8460: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
8470: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
8480: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
8490: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
84a0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
84b0: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
84c0: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
84d0: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
84e0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
84f0: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
8500: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
8510: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
8520: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
8530: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
8540: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
8550: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
8560: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
8570: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
8580: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
8590: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a  nstead of the.**
85a0: 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74   one parameter t
85b0: 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20  hat destructors 
85c0: 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20  normally want.  
85d0: 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e  So we have to in
85e0: 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68 69 73 20  troduce.** this 
85f0: 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61 74  magic value that
8600: 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20   the code knows 
8610: 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72  to handle differ
8620: 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70  ently.  Any.** p
8630: 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b  ointer will work
8640: 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73   here as long as
8650: 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74 20   it is distinct 
8660: 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54  from SQLITE_STAT
8670: 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45  IC.** and SQLITE
8680: 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23  _TRANSIENT..*/.#
8690: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59  define SQLITE_DY
86a0: 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65  NAMIC   ((sqlite
86b0: 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70  3_destructor_typ
86c0: 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  e)sqlite3MallocS
86d0: 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  ize)../*.** When
86e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
86f0: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20   is defined, it 
8700: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 74  means that the t
8710: 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64  arget platform d
8720: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f  oes.** not suppo
8730: 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61 74  rt Writable Stat
8740: 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73 75  ic Data (WSD) su
8750: 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64  ch as global and
8760: 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65   static variable
8770: 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62  s..** All variab
8780: 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72 20  les must either 
8790: 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20  be on the stack 
87a0: 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  or dynamically a
87b0: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a  llocated from.**
87c0: 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e   the heap.  When
87d0: 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72   WSD is unsuppor
87e0: 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c  ted, the variabl
87f0: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73  e declarations s
8800: 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f  cattered.** thro
8810: 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74  ughout the SQLit
8820: 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f  e code must beco
8830: 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73  me constants ins
8840: 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54  tead.  The SQLIT
8850: 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69  E_WSD.** macro i
8860: 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73 20  s used for this 
8870: 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e  purpose.  And in
8880: 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e  stead of referen
8890: 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c  cing the variabl
88a0: 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77  e.** directly, w
88b0: 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61  e use its consta
88c0: 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c  nt as a key to l
88d0: 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69  ookup the run-ti
88e0: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  me allocated.** 
88f0: 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64  buffer that hold
8900: 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e  s real variable.
8910: 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69    The constant i
8920: 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69  s also the initi
8930: 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68  alizer.** for th
8940: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8950: 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a  ated buffer..**.
8960: 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20  ** In the usual 
8970: 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20 69  case where WSD i
8980: 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  s supported, the
8990: 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20   SQLITE_WSD and 
89a0: 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73  GLOBAL.** macros
89b0: 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61   become no-ops a
89c0: 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72  nd have zero per
89d0: 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e  formance impact.
89e0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
89f0: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65  E_OMIT_WSD.  #de
8a00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20  fine SQLITE_WSD 
8a10: 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20  const.  #define 
8a20: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74  GLOBAL(t,v) (*(t
8a30: 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69  *)sqlite3_wsd_fi
8a40: 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20  nd((void*)&(v), 
8a50: 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64  sizeof(v))).  #d
8a60: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f  efine sqlite3Glo
8a70: 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c  balConfig GLOBAL
8a80: 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  (struct Sqlite3C
8a90: 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f  onfig, sqlite3Co
8aa0: 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69  nfig).  int sqli
8ab0: 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74  te3_wsd_init(int
8ac0: 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f   N, int J);.  vo
8ad0: 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f  id *sqlite3_wsd_
8ae0: 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e  find(void *K, in
8af0: 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t L);.#else.  #d
8b00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
8b10: 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41  .  #define GLOBA
8b20: 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69  L(t,v) v.  #defi
8b30: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
8b40: 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
8b50: 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nfig.#endif../*.
8b60: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
8b70: 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64   macros are used
8b80: 20 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d   to suppress com
8b90: 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61  piler warnings a
8ba0: 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74  nd to.** make it
8bb0: 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20   clear to human 
8bc0: 72 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66  readers when a f
8bd0: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
8be0: 72 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c  r is deliberatel
8bf0: 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64  y.** left unused
8c00: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8c10: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
8c20: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
8c30: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
8c40: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
8c50: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
8c60: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
8c70: 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70  ample the.** imp
8c80: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
8c90: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
8ca0: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
8cb0: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
8cc0: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
8cd0: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
8ce0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
8cf0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
8d00: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
8d10: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
8d20: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
8d30: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
8d40: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
8d50: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
8d60: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
8d70: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
8d80: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
8d90: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
8da0: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
8db0: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
8dc0: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
8dd0: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
8de0: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
8df0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
8e00: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
8e10: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
8e20: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
8e30: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
8e40: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
8e50: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
8e60: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
8e70: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
8e80: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
8e90: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
8ea0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
8eb0: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
8ec0: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
8ed0: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
8ee0: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
8ef0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
8f00: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
8f10: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
8f20: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
8f30: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
8f40: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8f50: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
8f60: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
8f70: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
8f80: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
8f90: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8fa0: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
8fb0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8fc0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
8fd0: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
8fe0: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
8ff0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
9000: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9010: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
9020: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9030: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
9060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
9070: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
9080: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
9090: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
90a0: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
90b0: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
90c0: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
90d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b  ypedef struct FK
90e0: 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66  ey FKey;.typedef
90f0: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74   struct FuncDest
9100: 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72  ructor FuncDestr
9110: 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73  uctor;.typedef s
9120: 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75  truct FuncDef Fu
9130: 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73  ncDef;.typedef s
9140: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
9150: 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74  h FuncDefHash;.t
9160: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64  ypedef struct Id
9170: 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70  List IdList;.typ
9180: 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65  edef struct Inde
9190: 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66  x Index;.typedef
91a0: 20 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d   struct IndexSam
91b0: 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b  ple IndexSample;
91c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
91d0: 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73  KeyClass KeyClas
91e0: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
91f0: 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66  t KeyInfo KeyInf
9200: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9210: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b  t Lookaside Look
9220: 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73  aside;.typedef s
9230: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
9240: 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  lot LookasideSlo
9250: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9260: 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b  t Module Module;
9270: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9280: 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65  NameContext Name
9290: 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66  Context;.typedef
92a0: 20 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61   struct Parse Pa
92b0: 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  rse;.typedef str
92c0: 75 63 74 20 50 72 65 55 70 64 61 74 65 20 50 72  uct PreUpdate Pr
92d0: 65 55 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66  eUpdate;.typedef
92e0: 20 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72   struct PrintfAr
92f0: 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72  guments PrintfAr
9300: 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66  guments;.typedef
9310: 20 73 74 72 75 63 74 20 52 65 6e 61 6d 65 54 6f   struct RenameTo
9320: 6b 65 6e 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 3b  ken RenameToken;
9330: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9340: 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74  RowSet RowSet;.t
9350: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61  ypedef struct Sa
9360: 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e  vepoint Savepoin
9370: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9380: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
9390: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
93a0: 53 51 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c  SQLiteThread SQL
93b0: 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64  iteThread;.typed
93c0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
93d0: 44 65 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b  Dest SelectDest;
93e0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
93f0: 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b  SrcList SrcList;
9400: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9410: 73 71 6c 69 74 65 33 5f 73 74 72 20 53 74 72 41  sqlite3_str StrA
9420: 63 63 75 6d 3b 20 2f 2a 20 49 6e 74 65 72 6e 61  ccum; /* Interna
9430: 6c 20 61 6c 69 61 73 20 66 6f 72 20 73 71 6c 69  l alias for sqli
9440: 74 65 33 5f 73 74 72 20 2a 2f 0a 74 79 70 65 64  te3_str */.typed
9450: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20  ef struct Table 
9460: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
9470: 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20  truct TableLock 
9480: 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64  TableLock;.typed
9490: 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  ef struct Token 
94a0: 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73  Token;.typedef s
94b0: 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54  truct TreeView T
94c0: 72 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66  reeView;.typedef
94d0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
94e0: 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66  Trigger;.typedef
94f0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50   struct TriggerP
9500: 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74  rg TriggerPrg;.t
9510: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
9520: 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65  iggerStep Trigge
9530: 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73  rStep;.typedef s
9540: 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
9550: 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63  cord UnpackedRec
9560: 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ord;.typedef str
9570: 75 63 74 20 55 70 73 65 72 74 20 55 70 73 65 72  uct Upsert Upser
9580: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9590: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
95a0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
95b0: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
95c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
95d0: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
95e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
95f0: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
9600: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9610: 74 20 57 69 6e 64 6f 77 20 57 69 6e 64 6f 77 3b  t Window Window;
9620: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9630: 57 69 74 68 20 57 69 74 68 3b 0a 0a 0a 2f 2a 0a  With With;.../*.
9640: 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
9650: 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
9660: 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
9670: 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
9680: 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
9690: 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
96a0: 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
96b0: 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
96c0: 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
96d0: 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
96e0: 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
96f0: 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
9700: 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
9710: 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
9720: 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
9730: 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
9740: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
9750: 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20  _BITMASK_TYPE.  
9760: 74 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42  typedef SQLITE_B
9770: 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d  ITMASK_TYPE Bitm
9780: 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
9790: 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
97a0: 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
97b0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
97c0: 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
97d0: 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
97e0: 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
97f0: 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
9800: 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
9810: 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
9820: 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
9830: 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
9840: 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
9850: 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
9860: 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
9870: 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
9880: 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  int)1)<<(n)).#de
9890: 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20  fine ALLBITS    
98a0: 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a    ((Bitmask)-1).
98b0: 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65  ./* A VList obje
98c0: 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70  ct records a map
98d0: 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72  ping between par
98e0: 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65  ameters/variable
98f0: 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69  s/wildcards.** i
9900: 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  n the SQL statem
9910: 65 6e 74 20 28 73 75 63 68 20 61 73 20 24 61 62  ent (such as $ab
9920: 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a  c, @pqr, or :xyz
9930: 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  ) and the intege
9940: 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75  r.** variable nu
9950: 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  mber associated 
9960: 77 69 74 68 20 74 68 61 74 20 70 61 72 61 6d 65  with that parame
9970: 74 65 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f  ter.  See the fo
9980: 72 6d 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e  rmat description
9990: 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  .** on the sqlit
99a0: 65 33 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75  e3VListAdd() rou
99b0: 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e  tine for more in
99c0: 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c  formation.  A VL
99d0: 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a  ist is really.**
99e0: 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f   just an array o
99f0: 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74  f integers..*/.t
9a00: 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74  ypedef int VList
9a10: 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73  ;../*.** Defer s
9a20: 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61  ourcing vdbe.h a
9a30: 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c  nd btree.h until
9a40: 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22 20   after the "u8" 
9a50: 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64  and.** "BusyHand
9a60: 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e 20 76  ler" typedefs. v
9a70: 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69  dbe.h also requi
9a80: 72 65 73 20 61 20 66 65 77 20 6f 66 20 74 68 65  res a few of the
9a90: 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74   opaque.** point
9aa0: 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46  er types (i.e. F
9ab0: 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64 20  uncDef) defined 
9ac0: 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75  above..*/.#inclu
9ad0: 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e  de "btree.h".#in
9ae0: 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23  clude "vdbe.h".#
9af0: 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68  include "pager.h
9b00: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63  ".#include "pcac
9b10: 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  he.h".#include "
9b20: 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  os.h".#include "
9b30: 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65  mutex.h"../* The
9b40: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9b50: 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69  RABLE compile-ti
9b60: 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74  me option used t
9b70: 6f 20 73 65 74 20 74 68 65 20 64 65 66 61 75 6c  o set the defaul
9b80: 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73  t.** synchronous
9b90: 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52   setting to EXTR
9ba0: 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e  A.  It is no lon
9bb0: 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a  ger supported..*
9bc0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
9bd0: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20  EXTRA_DURABLE.# 
9be0: 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49  warning Use SQLI
9bf0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9c00: 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64  RONOUS=3 instead
9c10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41   of SQLITE_EXTRA
9c20: 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e  _DURABLE.# defin
9c30: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
9c40: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23  _SYNCHRONOUS 3.#
9c50: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
9c60: 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ault synchronous
9c70: 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e   levels..**.** N
9c80: 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20 68 69  ote that (for hi
9c90: 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29  storcal reasons)
9ca0: 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48   the PAGER_SYNCH
9cb0: 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20  RONOUS_* macros 
9cc0: 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74  differ.** from t
9cd0: 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  he SQLITE_DEFAUL
9ce0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61  T_SYNCHRONOUS va
9cf0: 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20  lue by 1..**.** 
9d00: 20 20 20 20 20 20 20 20 20 20 50 41 47 45 52 5f            PAGER_
9d10: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20  SYNCHRONOUS     
9d20: 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52    DEFAULT_SYNCHR
9d30: 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20  ONOUS.**   OFF  
9d40: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
9d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d60: 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c     0.**   NORMAL
9d70: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d90: 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20    1.**   FULL   
9da0: 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20         3        
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9dc0: 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20   2.**   EXTRA   
9dd0: 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20 20        4         
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9df0: 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41  3.**.** The "PRA
9e00: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22  GMA synchronous"
9e10: 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20   statement also 
9e20: 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61  uses the zero-ba
9e30: 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20  sed numbers..** 
9e40: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
9e50: 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e  the zero-based n
9e60: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
9e70: 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c  for all external
9e80: 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61   interfaces.** a
9e90: 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64  nd the one-based
9ea0: 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
9eb0: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a   internally..*/.
9ec0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
9ed0: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9ee0: 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  US.# define SQLI
9ef0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9f00: 52 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a  RONOUS 2.#endif.
9f10: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
9f20: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9f30: 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20  RONOUS.# define 
9f40: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9f50: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53  AL_SYNCHRONOUS S
9f60: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9f70: 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66  NCHRONOUS.#endif
9f80: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
9f90: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
9fa0: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
9fb0: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
9fc0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
9fd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9fe0: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
9ff0: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
a000: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
a010: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
a020: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
a030: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
a040: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
a050: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
a060: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
a070: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
a080: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
a090: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
a0a0: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
a0b0: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
a0c0: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
a0d0: 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20  har *zDbSName;  
a0e0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
a0f0: 68 69 73 20 64 61 74 61 62 61 73 65 2e 20 28 73  his database. (s
a100: 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20  chema name, not 
a110: 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42  filename) */.  B
a120: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
a130: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
a140: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
a150: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
a160: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
a170: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
a180: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
a190: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
a1a0: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62  o disk */.  u8 b
a1b0: 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20  SyncSet;        
a1c0: 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50 52 41   /* True if "PRA
a1d0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
a1e0: 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20  N" has been run 
a1f0: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
a200: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69  hema;     /* Poi
a210: 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65  nter to database
a220: 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c   schema (possibl
a230: 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a  y shared) */.};.
a240: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
a250: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
a260: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74  ing structure st
a270: 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20  ores a database 
a280: 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f  schema..**.** Mo
a290: 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  st Schema object
a2a0: 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  s are associated
a2b0: 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20   with a Btree.  
a2c0: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73  The exception is
a2d0: 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66  .** the Schema f
a2e0: 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  or the TEMP data
a2f0: 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44  baes (sqlite3.aD
a300: 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66  b[1]) which is f
a310: 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a  ree-standing..**
a320: 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   In shared cache
a330: 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20   mode, a single 
a340: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61  Schema object ca
a350: 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d  n be shared by m
a360: 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65  ultiple.** Btree
a370: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
a380: 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79  the same underly
a390: 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a  ing BtShared obj
a3a0: 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d  ect..**.** Schem
a3b0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75  a objects are au
a3c0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c  tomatically deal
a3d0: 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65  located when the
a3e0: 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74   last Btree that
a3f0: 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74  .** references t
a400: 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64  hem is destroyed
a410: 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68  .   The TEMP Sch
a420: 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20  ema is manually 
a430: 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  freed by.** sqli
a440: 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a  te3_close()..*.*
a450: 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20  * A thread must 
a460: 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  be holding a mut
a470: 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  ex on the corres
a480: 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e  ponding Btree in
a490: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63   order.** to acc
a4a0: 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65  ess Schema conte
a4b0: 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65  nt.  This implie
a4c0: 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61  s that the threa
a4d0: 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a  d must also be.*
a4e0: 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  * holding a mute
a4f0: 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  x on the sqlite3
a500: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
a510: 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68  ter that owns th
a520: 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20  e Btree..** For 
a530: 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f  a TEMP Schema, o
a540: 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  nly the connecti
a550: 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75  on mutex is requ
a560: 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ired..*/.struct 
a570: 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73  Schema {.  int s
a580: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20  chema_cookie;   
a590: 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65  /* Database sche
a5a0: 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
a5b0: 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  r for this file 
a5c0: 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61  */.  int iGenera
a5d0: 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e  tion;     /* Gen
a5e0: 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e  eration counter.
a5f0: 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69    Incremented wi
a600: 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a  th each change *
a610: 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68  /.  Hash tblHash
a620: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a630: 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62  tables indexed b
a640: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
a650: 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20   idxHash;       
a660: 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20   /* All (named) 
a670: 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20  indices indexed 
a680: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
a690: 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20  h trigHash;     
a6a0: 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72    /* All trigger
a6b0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
a6c0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79  e */.  Hash fkey
a6d0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
a6e0: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
a6f0: 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  by referenced ta
a700: 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61  ble name */.  Ta
a710: 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20  ble *pSeqTab;   
a720: 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65     /* The sqlite
a730: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
a740: 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52  used by AUTOINCR
a750: 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69  EMENT */.  u8 fi
a760: 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
a770: 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  /* Schema format
a780: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69   version for thi
a790: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65  s file */.  u8 e
a7a0: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
a7b0: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
a7c0: 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64  g used by this d
a7d0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36  atabase */.  u16
a7e0: 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20   schemaFlags;   
a7f0: 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63    /* Flags assoc
a800: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
a810: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
a820: 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20  cache_size;     
a830: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
a840: 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68  ges to use in th
a850: 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e cache */.};../
a860: 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
a870: 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
a880: 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
a890: 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
a8a0: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
a8b0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
a8c0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
a8d0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
a8e0: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
a8f0: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a900: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
a910: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
a920: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a930: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
a940: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
a950: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
a960: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
a970: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
a980: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
a990: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28  ->schemaFlags|=(
a9a0: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
a9b0: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
a9c0: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
a9d0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a9e0: 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
a9f0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
aa00: 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68   for the DB.pSch
aa10: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
aa20: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53  ..**.** The DB_S
aa30: 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67  chemaLoaded flag
aa40: 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68   is set after th
aa50: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
aa60: 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65  a has been.** re
aa70: 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c  ad into internal
aa80: 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a   hash tables..**
aa90: 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69  .** DB_UnresetVi
aaa0: 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f  ews means that o
aab0: 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73  ne or more views
aac0: 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d   have column nam
aad0: 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20  es that.** have 
aae0: 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e  been filled out.
aaf0: 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20    If the schema 
ab00: 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63  changes, these c
ab10: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68  olumn names migh
ab20: 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64  t.** changes and
ab30: 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c   so the view wil
ab40: 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73  l need to be res
ab50: 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  et..*/.#define D
ab60: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20  B_SchemaLoaded  
ab70: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65    0x0001  /* The
ab80: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
ab90: 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69   loaded */.#defi
aba0: 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ne DB_UnresetVie
abb0: 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  ws    0x0002  /*
abc0: 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65   Some views have
abd0: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
abe0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
abf0: 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20   DB_Empty       
ac00: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54      0x0004  /* T
ac10: 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79  he file is empty
ac20: 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73   (length 0 bytes
ac30: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ) */.#define DB_
ac40: 52 65 73 65 74 57 61 6e 74 65 64 20 20 20 20 20  ResetWanted     
ac50: 30 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65 74  0x0008  /* Reset
ac60: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
ac70: 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20   nSchemaLock==0 
ac80: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
ac90: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
aca0: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
acb0: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
acc0: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
acd0: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
ace0: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
acf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ad00: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
ad10: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
ad20: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
ad30: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
ad40: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
ad50: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
ad60: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
ad70: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
ad80: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
ad90: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
ada0: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
adb0: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
adc0: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
add0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
ade0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
adf0: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
ae00: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
ae10: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
ae20: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
ae30: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
ae40: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
ae50: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
ae60: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
ae70: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
ae80: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
ae90: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
aea0: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
aeb0: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
aec0: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
aed0: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
aee0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
aef0: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
af00: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
af10: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
af20: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
af30: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
af40: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
af50: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
af60: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
af70: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
af80: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
af90: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
afa0: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
afb0: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
afc0: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
afd0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
afe0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
aff0: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
b000: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
b010: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
b020: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
b030: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
b040: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
b050: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
b060: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
b070: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
b080: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
b090: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
b0a0: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
b0b0: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
b0c0: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
b0d0: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
b0e0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
b0f0: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
b100: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
b110: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
b120: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
b130: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
b140: 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73  ide {.  u32 bDis
b150: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
b160: 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20  /* Only operate 
b170: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68  the lookaside wh
b180: 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36  en zero */.  u16
b190: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
b1a0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
b1b0: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
b1c0: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ytes */.  u8 bMa
b1d0: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
b1e0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
b1f0: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
b200: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
b210: 28 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f  () */.  u32 nSlo
b220: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
b230: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f  /* Number of loo
b240: 6b 61 73 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c  kaside slots all
b250: 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75 33 32 20  ocated */.  u32 
b260: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
b270: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
b280: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
b290: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
b2a0: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
b2b0: 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a  lot *pInit;   /*
b2c0: 20 4c 69 73 74 20 6f 66 20 62 75 66 66 65 72 73   List of buffers
b2d0: 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
b2e0: 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  used */.  Lookas
b2f0: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
b300: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
b310: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
b320: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
b330: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
b340: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
b350: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
b360: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
b370: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
b380: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
b390: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
b3a0: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
b3b0: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
b3c0: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
b3d0: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
b3e0: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
b3f0: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
b400: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
b410: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
b420: 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c  h table for buil
b430: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65  t-in function de
b440: 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70  finitions.  (App
b450: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
b460: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73  .** functions us
b470: 65 20 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c  e a regular tabl
b480: 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73  e table from has
b490: 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68  h.h.).**.** Hash
b4a0: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
b4b0: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
b4c0: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
b4d0: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
b4e0: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
b4f0: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
b500: 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a  u.pHash chain..*
b510: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b520: 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33  _FUNC_HASH_SZ 23
b530: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48  .struct FuncDefH
b540: 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20  ash {.  FuncDef 
b550: 2a 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48  *a[SQLITE_FUNC_H
b560: 41 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f  ASH_SZ];       /
b570: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72  * Hash table for
b580: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b   functions */.};
b590: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
b5a0: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
b5b0: 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d  ION./*.** Inform
b5c0: 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68  ation held in th
b5d0: 65 20 22 73 71 6c 69 74 65 33 22 20 64 61 74 61  e "sqlite3" data
b5e0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
b5f0: 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a  object and used.
b600: 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65  ** to manage use
b610: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
b620: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
b630: 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uct sqlite3_user
b640: 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65  auth sqlite3_use
b650: 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71  rauth;.struct sq
b660: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b  lite3_userauth {
b670: 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b  .  u8 authLevel;
b680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b690: 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68   /* Current auth
b6a0: 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c  entication level
b6b0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50   */.  int nAuthP
b6c0: 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  W;              
b6d0: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
b6e0: 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79  he zAuthPW in by
b6f0: 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  tes */.  char *z
b700: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
b710: 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f         /* Passwo
b720: 72 64 20 75 73 65 64 20 74 6f 20 61 75 74 68 65  rd used to authe
b730: 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61  nticate */.  cha
b740: 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20  r *zAuthUser;   
b750: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
b760: 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20  er name used to 
b770: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
b780: 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
b790: 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65  alues for sqlite
b7a0: 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c  3_userauth.authL
b7b0: 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  evel */.#define 
b7c0: 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20  UAUTH_Unknown   
b7d0: 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65    0     /* Authe
b7e0: 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65  ntication not ye
b7f0: 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65  t checked */.#de
b800: 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20  fine UAUTH_Fail 
b810: 20 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20         1     /* 
b820: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
b830: 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64  ion failed */.#d
b840: 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72  efine UAUTH_User
b850: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a          2     /*
b860: 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61   Authenticated a
b870: 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20  s a normal user 
b880: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
b890: 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20  _Admin       3  
b8a0: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
b8b0: 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69  ted as an admini
b8c0: 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46  strator */../* F
b8d0: 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e  unctions used on
b8e0: 6c 79 20 62 79 20 75 73 65 72 20 61 75 74 68 6f  ly by user autho
b8f0: 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a  rization logic *
b900: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65  /.int sqlite3Use
b910: 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74  rAuthTable(const
b920: 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
b930: 69 74 65 33 55 73 65 72 41 75 74 68 43 68 65 63  ite3UserAuthChec
b940: 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c  kLogin(sqlite3*,
b950: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29  const char*,u8*)
b960: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73  ;.void sqlite3Us
b970: 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74  erAuthInit(sqlit
b980: 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
b990: 65 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69  e3CryptFunc(sqli
b9a0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
b9b0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
b9c0: 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  );..#endif /* SQ
b9d0: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
b9e0: 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a  TICATION */../*.
b9f0: 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20 74  ** typedef for t
ba00: 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  he authorization
ba10: 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69   callback functi
ba20: 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  on..*/.#ifdef SQ
ba30: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
ba40: 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64  TICATION.  typed
ba50: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
ba60: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
ba70: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
ba80: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
ba90: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
baa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bab0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
bac0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
bad0: 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
bae0: 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78   int (*sqlite3_x
baf0: 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  auth)(void*,int,
bb00: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
bb10: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
bb20: 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ar*,.           
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb40: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29      const char*)
bb50: 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
bb60: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  f SQLITE_OMIT_DE
bb70: 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68 69 73  PRECATED./* This
bb80: 20 69 73 20 61 6e 20 65 78 74 72 61 20 53 51 4c   is an extra SQL
bb90: 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72 6f 20  ITE_TRACE macro 
bba0: 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 22  that indicates "
bbb0: 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e 67 0a  legacy" tracing.
bbc0: 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20  ** in the style 
bbd0: 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65  of sqlite3_trace
bbe0: 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ().*/.#define SQ
bbf0: 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43  LITE_TRACE_LEGAC
bc00: 59 20 20 30 78 38 30 0a 23 65 6c 73 65 0a 23 64  Y  0x80.#else.#d
bc10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41  efine SQLITE_TRA
bc20: 43 45 5f 4c 45 47 41 43 59 20 20 30 0a 23 65 6e  CE_LEGACY  0.#en
bc30: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
bc40: 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f  IT_DEPRECATED */
bc50: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
bc60: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
bc70: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
bc80: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
bc90: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
bca0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
bcb0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
bcc0: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
bcd0: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
bce0: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
bcf0: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
bd00: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
bd10: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
bd20: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c  chines */.  Coll
bd30: 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20  Seq *pDfltColl; 
bd40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
bd50: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
bd60: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e  ng sequence (BIN
bd70: 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ARY) */.  sqlite
bd80: 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20  3_mutex *mutex; 
bd90: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
bda0: 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20  ction mutex */. 
bdb0: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bdd0: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
bde0: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be00: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
be10: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
be20: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33  y in use */.  u3
be30: 32 20 6d 44 62 46 6c 61 67 73 3b 20 20 20 20 20  2 mDbFlags;     
be40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66              /* f
be50: 6c 61 67 73 20 72 65 63 6f 72 64 69 6e 67 20 69  lags recording i
be60: 6e 74 65 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f  nternal state */
be70: 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20  .  u32 flags;   
be80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be90: 20 2f 2a 20 66 6c 61 67 73 20 73 65 74 74 61 62   /* flags settab
bea0: 6c 65 20 62 79 20 70 72 61 67 6d 61 73 2e 20 53  le by pragmas. S
beb0: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
bec0: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
bee0: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
bef0: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
bf00: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20  above) */.  i64 
bf10: 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
bf20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
bf30: 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73  ault mmap_size s
bf40: 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20  etting */.  u32 
bf50: 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20  nSchemaLock;    
bf60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
bf70: 6e 6f 74 20 72 65 73 65 74 20 74 68 65 20 73 63  not reset the sc
bf80: 68 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65  hema when non-ze
bf90: 72 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ro */.  unsigned
bfa0: 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20   int openFlags; 
bfb0: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70        /* Flags p
bfc0: 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33  assed to sqlite3
bfd0: 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a  _vfs.xOpen() */.
bfe0: 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20    int errCode;  
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c000: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
c010: 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54  rror code (SQLIT
c020: 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  E_*) */.  int er
c030: 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20  rMask;          
c040: 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73          /* & res
c050: 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20 74  ult codes with t
c060: 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75 72  his before retur
c070: 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53  ning */.  int iS
c080: 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20  ysErrno;        
c090: 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f          /* Errno
c0a0: 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74   value from last
c0b0: 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f   system error */
c0c0: 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67  .  u16 dbOptFlag
c0d0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
c0e0: 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61   /* Flags to ena
c0f0: 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69  ble/disable opti
c100: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  mizations */.  u
c110: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c130: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  Text encoding */
c140: 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74  .  u8 autoCommit
c150: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c160: 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d   /* The auto-com
c170: 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75  mit flag. */.  u
c180: 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20  8 temp_store;   
c190: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c1a0: 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72  1: file 2: memor
c1b0: 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a  y 0: default */.
c1c0: 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65    u8 mallocFaile
c1d0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
c1e0: 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61  /* True if we ha
c1f0: 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63  ve seen a malloc
c200: 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38   failure */.  u8
c210: 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20   bBenignMalloc; 
c220: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c230: 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f  o not require OO
c240: 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  Ms if true */.  
c250: 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  u8 dfltLockMode;
c260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c270: 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67   Default locking
c280: 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68  -mode for attach
c290: 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e  ed dbs */.  sign
c2a0: 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f  ed char nextAuto
c2b0: 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74  vac;      /* Aut
c2c0: 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74  ovac setting aft
c2d0: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30  er VACUUM if >=0
c2e0: 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73   */.  u8 suppres
c2f0: 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  sErr;           
c300: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73      /* Do not is
c310: 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  sue error messag
c320: 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  es if true */.  
c330: 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  u8 vtabOnConflic
c340: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
c350: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
c360: 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f   for s3_vtab_on_
c370: 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20  conflict() */.  
c380: 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  u8 isTransaction
c390: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a  Savepoint;    /*
c3a0: 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74   True if the out
c3b0: 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  ermost savepoint
c3c0: 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38   is a TS */.  u8
c3d0: 20 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20 20   mTrace;        
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a              /* z
c3f0: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49  ero or more SQLI
c400: 54 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a  TE_TRACE flags *
c410: 2f 0a 20 20 75 38 20 6e 6f 53 68 61 72 65 64 43  /.  u8 noSharedC
c420: 61 63 68 65 3b 20 20 20 20 20 20 20 20 20 20 20  ache;           
c430: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f 20    /* True if no 
c440: 73 68 61 72 65 64 2d 63 61 63 68 65 20 62 61 63  shared-cache bac
c450: 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53  kends */.  u8 nS
c460: 71 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20 20  qlExec;         
c470: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c480: 65 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50  er of pending OP
c490: 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65 73  _SqlExec opcodes
c4a0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61   */.  int nextPa
c4b0: 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20  gesize;         
c4c0: 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20      /* Pagesize 
c4d0: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
c4e0: 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  >0 */.  u32 magi
c4f0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
c500: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
c510: 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74  umber for detect
c520: 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20   library misuse 
c530: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65  */.  int nChange
c540: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c550: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
c560: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
c570: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
c580: 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  nt nTotalChange;
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c5a0: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
c5b0: 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  y sqlite3_total_
c5c0: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
c5d0: 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  nt aLimit[SQLITE
c5e0: 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20  _N_LIMIT];   /* 
c5f0: 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20  Limits */.  int 
c600: 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20  nMaxSorterMmap; 
c610: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
c620: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67  imum size of reg
c630: 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73  ions mapped by s
c640: 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63  orter */.  struc
c650: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
c660: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
c670: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
c680: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
c690: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
c6a0: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
c6b0: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
c6c0: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
c6d0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
c6e0: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
c6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c700: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
c710: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
c720: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
c730: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
c740: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
c750: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
c760: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
c770: 20 20 75 6e 73 69 67 6e 65 64 20 6f 72 70 68 61    unsigned orpha
c780: 6e 54 72 69 67 67 65 72 20 3a 20 31 3b 20 2f 2a  nTrigger : 1; /*
c790: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
c7a0: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
c7b0: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20   trigger */.    
c7c0: 75 6e 73 69 67 6e 65 64 20 69 6d 70 6f 73 74 65  unsigned imposte
c7d0: 72 54 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20 42  rTable : 1; /* B
c7e0: 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73  uilding an impos
c7f0: 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  ter table */.   
c800: 20 75 6e 73 69 67 6e 65 64 20 72 65 6f 70 65 6e   unsigned reopen
c810: 4d 65 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a 20  Memdb : 1;   /* 
c820: 41 54 54 41 43 48 20 69 73 20 72 65 61 6c 6c 79  ATTACH is really
c830: 20 61 20 72 65 6f 70 65 6e 20 75 73 69 6e 67 20   a reopen using 
c840: 4d 65 6d 44 42 20 2a 2f 0a 20 20 7d 20 69 6e 69  MemDB */.  } ini
c850: 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63  t;.  int nVdbeAc
c860: 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20  tive;           
c870: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c880: 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20  VDBEs currently 
c890: 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  running */.  int
c8a0: 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20   nVdbeRead;     
c8b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c8c0: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
c8d0: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f  DBEs that read o
c8e0: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  r write */.  int
c8f0: 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20   nVdbeWrite;    
c900: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c910: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
c920: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61  DBEs that read a
c930: 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  nd write */.  in
c940: 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20  t nVdbeExec;    
c950: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c960: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
c970: 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65  calls to VdbeExe
c980: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44  c() */.  int nVD
c990: 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20  estroy;         
c9a0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c9b0: 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44   of active OP_VD
c9c0: 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
c9d0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65  s */.  int nExte
c9e0: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
c9f0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
ca00: 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69  f loaded extensi
ca10: 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a  ons */.  void **
ca20: 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  aExtension;     
ca30: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
ca40: 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  of shared librar
ca50: 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69  y handles */.  i
ca60: 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32  nt (*xTrace)(u32
ca70: 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69  ,void*,void*,voi
ca80: 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63  d*);     /* Trac
ca90: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
caa0: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cac0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
cad0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
cae0: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
caf0: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
cb00: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
cb10: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
cb20: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
cb30: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
cb40: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb60: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
cb70: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
cb80: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
cb90: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
cba0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
cbb0: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
cbc0: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74  lback() */.  int
cbd0: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
cbe0: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
cbf0: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
cc00: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
cc10: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
cc20: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
cc30: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
cc40: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
cc50: 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ck() */.  void (
cc60: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
cc70: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
cc80: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
cc90: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
cca0: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
ccb0: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
ccc0: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
ccd0: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
cce0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
ccf0: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65  te_int64);.#ifde
cd00: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
cd10: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
cd20: 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74   void *pPreUpdat
cd30: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f  eArg;          /
cd40: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
cd50: 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61   to xPreUpdateCa
cd60: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
cd70: 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c   (*xPreUpdateCal
cd80: 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67  lback)(   /* Reg
cd90: 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71  istered using sq
cda0: 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f  lite3_preupdate_
cdb0: 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f  hook() */.    vo
cdc0: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
cdd0: 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61  ,char const*,cha
cde0: 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33  r const*,sqlite3
cdf0: 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69  _int64,sqlite3_i
ce00: 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55  nt64.  );.  PreU
ce10: 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74  pdate *pPreUpdat
ce20: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  e;        /* Con
ce30: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
ce40: 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62  pre-update callb
ce50: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ack */.#endif /*
ce60: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
ce70: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f  REUPDATE_HOOK */
ce80: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
ce90: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
cea0: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
ceb0: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
cec0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
ced0: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
cee0: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
cef0: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
cf00: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
cf10: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
cf20: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
cf30: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
cf40: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
cf50: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
cf60: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
cf70: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
cf80: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
cf90: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
cfa0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
cfb0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
cfc0: 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ge */.  union {.
cfd0: 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74      volatile int
cfe0: 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20   isInterrupted; 
cff0: 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74  /* True if sqlit
d000: 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73  e3_interrupt has
d010: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
d020: 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73      double notUs
d030: 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed1;            
d040: 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d  /* Spacer */.  }
d050: 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65   u1;.  Lookaside
d060: 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20   lookaside;     
d070: 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64       /* Lookasid
d080: 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75  e malloc configu
d090: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65  ration */.#ifnde
d0a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
d0b0: 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71  THORIZATION.  sq
d0c0: 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74  lite3_xauth xAut
d0d0: 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  h;          /* A
d0e0: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
d0f0: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
d100: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
d110: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d120: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
d130: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
d140: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
d150: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
d160: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
d170: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
d180: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
d190: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
d1a0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
d1b0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
d1c0: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
d1d0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
d1e0: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
d1f0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
d200: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
d210: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
d220: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
d230: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
d240: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
d250: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
d260: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
d270: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
d280: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
d290: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
d2a0: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
d2b0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
d2c0: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
d2d0: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
d2e0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
d2f0: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
d300: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
d310: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
d320: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
d330: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
d340: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
d350: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
d360: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
d370: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
d380: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
d390: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
d3a0: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
d3b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73            /* Dis
d3c0: 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e  connect these in
d3d0: 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72   next sqlite3_pr
d3e0: 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69  epare() */.#endi
d3f0: 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20  f.  Hash aFunc; 
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d410: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
d420: 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75  of connection fu
d430: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73  nctions */.  Has
d440: 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20  h aCollSeq;     
d450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
d460: 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  l collating sequ
d470: 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48  ences */.  BusyH
d480: 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c  andler busyHandl
d490: 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79  er;      /* Busy
d4a0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44   callback */.  D
d4b0: 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20  b aDbStatic[2]; 
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d4d0: 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72  Static space for
d4e0: 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62   the 2 default b
d4f0: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76  ackends */.  Sav
d500: 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
d510: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  nt;        /* Li
d520: 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76  st of active sav
d530: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
d540: 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20   busyTimeout;   
d550: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75             /* Bu
d560: 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f  sy handler timeo
d570: 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20  ut, in msec */. 
d580: 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b   int nSavepoint;
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d5a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  * Number of non-
d5b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
d5c0: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
d5d0: 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20  nStatement;     
d5e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
d5f0: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74  ber of nested st
d600: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
d610: 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e  ions  */.  i64 n
d620: 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
d630: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
d640: 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
d650: 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61  ints this transa
d660: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20  ction. */.  i64 
d670: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
d680: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74  ;         /* Net
d690: 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69   deferred immedi
d6a0: 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ate constraints 
d6b0: 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65  */.  int *pnByte
d6c0: 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20  sFreed;         
d6d0: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c     /* If not NUL
d6e0: 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69  L, increment thi
d6f0: 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f  s in DbFree() */
d700: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
d710: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
d720: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
d730: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
d740: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
d750: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
d760: 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74  _MASTER.  ** mut
d770: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
d780: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
d790: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
d7a0: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a  in notify.c..  *
d7b0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
d7c0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
d7d0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
d7e0: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
d7f0: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
d800: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
d810: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
d820: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
d830: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
d840: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
d850: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
d860: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
d870: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
d880: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
d890: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
d8a0: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
d8b0: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
d8c0: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
d8d0: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
d8e0: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
d8f0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
d900: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
d910: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
d920: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
d930: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
d940: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
d950: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
d960: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
d970: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
d980: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d990: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
d9a0: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
d9b0: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
d9c0: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
d9d0: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
d9e0: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
d9f0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
da00: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
da10: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
da20: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
da30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
da40: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
da50: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
da60: 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  TICATION.  sqlit
da70: 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68  e3_userauth auth
da80: 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72  ;        /* User
da90: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
daa0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23  information */.#
dab0: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
dac0: 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f  A macro to disco
dad0: 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  ver the encoding
dae0: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a   of a database..
daf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
db00: 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d  A_ENC(db) ((db)-
db10: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[0].pSchema-
db20: 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e  >enc).#define EN
db30: 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64  C(db)        ((d
db40: 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  b)->enc)../*.** 
db50: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
db60: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e  for the sqlite3.
db70: 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  flags..**.** Val
db80: 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
db90: 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
dba0: 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20  ert()):.**      
dbb0: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
dbc0: 20 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55       == PAGER_FU
dbd0: 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20  LLFSYNC.**      
dbe0: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
dbf0: 53 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b  Sync == PAGER_CK
dc00: 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20  PT_FULLFSYNC.** 
dc10: 20 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68       SQLITE_Cach
dc20: 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47  eSpill    == PAG
dc30: 45 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a  ER_CACHE_SPILL.*
dc40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dc50: 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20  _WriteSchema    
dc60: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f  0x00000001  /* O
dc70: 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49  K to update SQLI
dc80: 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65  TE_MASTER */.#de
dc90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
dca0: 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30  cyFileFmt  0x000
dcb0: 30 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65  00002  /* Create
dcc0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69   new databases i
dcd0: 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64  n format 1 */.#d
dce0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
dcf0: 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30  lColNames   0x00
dd00: 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20  000004  /* Show 
dd10: 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  full column name
dd20: 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23  s on SELECT */.#
dd30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
dd40: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
dd50: 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20  0000008  /* Use 
dd60: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
dd70: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
dd80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
dd90: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30  FullFSync  0x000
dda0: 30 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75  00010  /* Use fu
ddb0: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
ddc0: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
ddd0: 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  ne SQLITE_CacheS
dde0: 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30  pill     0x00000
ddf0: 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70  020  /* OK to sp
de00: 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20  ill pager cache 
de10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
de20: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20  E_ShortColNames 
de30: 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20   0x00000040  /* 
de40: 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d  Show short colum
de50: 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  ns names */.#def
de60: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
de70: 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30  Rows      0x0000
de80: 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72  0080  /* Count r
de90: 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49  ows changed by I
dea0: 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20  NSERT, */.      
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ded0: 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c      /*   DELETE,
dee0: 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72   or UPDATE and r
def0: 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20  eturn */.       
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df20: 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e     /*   the coun
df30: 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61  t using a callba
df40: 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ck. */.#define S
df50: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
df60: 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20  ck   0x00000100 
df70: 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63   /* Invoke the c
df80: 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20  allback once if 
df90: 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  the */.         
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfc0: 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74   /*   result set
dfd0: 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65   is empty */.#de
dfe0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f  fine SQLITE_Igno
dff0: 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30  reChecks   0x000
e000: 30 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74  00200  /* Do not
e010: 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63   enforce check c
e020: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
e030: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61  efine SQLITE_Rea
e040: 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30  dUncommit   0x00
e050: 30 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20  000400  /* READ 
e060: 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73  UNCOMMITTED in s
e070: 68 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23  hared-cache */.#
e080: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f  define SQLITE_No
e090: 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30  CkptOnClose  0x0
e0a0: 30 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63  0000800  /* No c
e0b0: 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f  heckpoint on clo
e0c0: 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23  se()/DETACH */.#
e0d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
e0e0: 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30  verseOrder   0x0
e0f0: 30 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65  0001000  /* Reve
e100: 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45  rse unordered SE
e110: 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LECTs */.#define
e120: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
e130: 65 72 73 20 20 20 20 30 78 30 30 30 30 32 30 30  ers    0x0000200
e140: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63  0  /* Enable rec
e150: 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20  ursive triggers 
e160: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e170: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20  E_ForeignKeys   
e180: 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20   0x00004000  /* 
e190: 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20  Enforce foreign 
e1a0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
e1b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e1c0: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20  TE_AutoIndex    
e1d0: 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a    0x00008000  /*
e1e0: 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69   Enable automati
e1f0: 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
e200: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64  fine SQLITE_Load
e210: 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30  Extension  0x000
e220: 31 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  10000  /* Enable
e230: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20   load_extension 
e240: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e250: 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20  E_LoadExtFunc   
e260: 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20   0x00020000  /* 
e270: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
e280: 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63  nsion() SQL func
e290: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e2a0: 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72  TE_EnableTrigger
e2b0: 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a    0x00040000  /*
e2c0: 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
e2d0: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
e2e0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72  ine SQLITE_Defer
e2f0: 46 4b 73 20 20 20 20 20 20 20 30 78 30 30 30 38  FKs       0x0008
e300: 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61  0000  /* Defer a
e310: 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  ll FK constraint
e320: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e330: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20  ITE_QueryOnly   
e340: 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f     0x00100000  /
e350: 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61  * Disable databa
e360: 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  se changes */.#d
e370: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c  efine SQLITE_Cel
e380: 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30  lSizeCk     0x00
e390: 32 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b  200000  /* Check
e3a0: 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65   btree cell size
e3b0: 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65  s on load */.#de
e3c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33  fine SQLITE_Fts3
e3d0: 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34  Tokenizer  0x004
e3e0: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
e3f0: 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28   fts3_tokenizer(
e400: 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  2) */.#define SQ
e410: 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20  LITE_EnableQPSG 
e420: 20 20 20 20 30 78 30 30 38 30 30 30 30 30 20 20      0x00800000  
e430: 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72  /* Query Planner
e440: 20 53 74 61 62 69 6c 69 74 79 20 47 75 61 72 61   Stability Guara
e450: 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ntee*/.#define S
e460: 51 4c 49 54 45 5f 54 72 69 67 67 65 72 45 51 50  QLITE_TriggerEQP
e470: 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20       0x01000000 
e480: 20 2f 2a 20 53 68 6f 77 20 74 72 69 67 67 65 72   /* Show trigger
e490: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
e4a0: 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LAN */.#define S
e4b0: 51 4c 49 54 45 5f 52 65 73 65 74 44 61 74 61 62  QLITE_ResetDatab
e4c0: 61 73 65 20 20 30 78 30 32 30 30 30 30 30 30 20  ase  0x02000000 
e4d0: 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20 64 61   /* Reset the da
e4e0: 74 61 62 61 73 65 20 2a 2f 0a 23 64 65 66 69 6e  tabase */.#defin
e4f0: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 41  e SQLITE_LegacyA
e500: 6c 74 65 72 20 20 20 20 30 78 30 34 30 30 30 30  lter    0x040000
e510: 30 30 20 20 2f 2a 20 4c 65 67 61 63 79 20 41 4c  00  /* Legacy AL
e520: 54 45 52 20 54 41 42 4c 45 20 62 65 68 61 76 69  TER TABLE behavi
e530: 6f 75 72 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73  our */../* Flags
e540: 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65   used only if de
e550: 62 75 67 67 69 6e 67 20 2a 2f 0a 23 69 66 64 65  bugging */.#ifde
e560: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
e570: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71  define SQLITE_Sq
e580: 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30  lTrace       0x0
e590: 38 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  8000000  /* Debu
e5a0: 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69  g print SQL as i
e5b0: 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64  t executes */.#d
e5c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
e5d0: 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 31 30  eListing    0x10
e5e0: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
e5f0: 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42   listings of VDB
e600: 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64  E programs */.#d
e610: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
e620: 65 54 72 61 63 65 20 20 20 20 20 20 30 78 32 30  eTrace      0x20
e630: 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20  000000  /* True 
e640: 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78  to trace VDBE ex
e650: 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ecution */.#defi
e660: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64  ne SQLITE_VdbeAd
e670: 64 6f 70 54 72 61 63 65 20 30 78 34 30 30 30 30  dopTrace 0x40000
e680: 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71  000  /* Trace sq
e690: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29  lite3VdbeAddOp()
e6a0: 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e   calls */.#defin
e6b0: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  e SQLITE_VdbeEQP
e6c0: 20 20 20 20 20 20 20 20 30 78 38 30 30 30 30 30          0x800000
e6d0: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50  00  /* Debug EXP
e6e0: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
e6f0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
e700: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
e710: 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62 46  for sqlite3.mDbF
e720: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
e730: 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61  DBFLAG_SchemaCha
e740: 6e 67 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a  nge   0x0001  /*
e750: 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73   Uncommitted Has
e760: 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20  h table changes 
e770: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
e780: 47 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20  G_PreferBuiltin 
e790: 20 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65 66   0x0002  /* Pref
e7a0: 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d  erence to built-
e7b0: 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66  in funcs */.#def
e7c0: 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75 75  ine DBFLAG_Vacuu
e7d0: 6d 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34  m         0x0004
e7e0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69    /* Currently i
e7f0: 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64  n a VACUUM */.#d
e800: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53 63 68  efine DBFLAG_Sch
e810: 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30 30  emaKnownOk  0x00
e820: 30 38 20 20 2f 2a 20 53 63 68 65 6d 61 20 69 73  08  /* Schema is
e830: 20 6b 6e 6f 77 6e 20 74 6f 20 62 65 20 76 61 6c   known to be val
e840: 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  id */../*.** Bit
e850: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
e860: 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c  .dbOptFlags fiel
e870: 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  d that are used 
e880: 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
e890: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
e8a0: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
e8b0: 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e  PTIMIZATIONS,...
e8c0: 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a  ) interface to.*
e8d0: 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69  * selectively di
e8e0: 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70  sable various op
e8f0: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a  timizations..*/.
e900: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
e910: 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78  ueryFlattener 0x
e920: 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20  0001   /* Query 
e930: 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 20 20  flattening */.  
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e950: 20 20 20 20 20 20 20 20 2f 2a 20 20 30 78 30 30          /*  0x00
e960: 30 32 20 20 20 61 76 61 69 6c 61 62 6c 65 20 66  02   available f
e970: 6f 72 20 72 65 75 73 65 20 2a 2f 0a 23 64 65 66  or reuse */.#def
e980: 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70  ine SQLITE_Group
e990: 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34  ByOrder   0x0004
e9a0: 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f     /* GROUPBY co
e9b0: 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a  ver of ORDERBY *
e9c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e9d0: 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20  _FactorOutConst 
e9e0: 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73  0x0008   /* Cons
e9f0: 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a  tant factoring *
ea00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ea10: 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20  _DistinctOpt    
ea20: 30 78 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54  0x0010   /* DIST
ea30: 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78  INCT using index
ea40: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
ea50: 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61  LITE_CoverIdxSca
ea60: 6e 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20  n   0x0020   /* 
ea70: 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73  Covering index s
ea80: 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cans */.#define 
ea90: 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64  SQLITE_OrderById
eaa0: 78 4a 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f  xJoin 0x0040   /
eab0: 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f  * ORDER BY of jo
eac0: 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f  ins via index */
ead0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eae0: 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30  Transitive     0
eaf0: 78 30 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73  x0080   /* Trans
eb00: 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74  itive constraint
eb10: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
eb20: 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e  ITE_OmitNoopJoin
eb30: 20 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f     0x0100   /* O
eb40: 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65  mit unused table
eb50: 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64  s in joins */.#d
eb60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75  efine SQLITE_Cou
eb70: 6e 74 4f 66 56 69 65 77 20 20 20 20 30 78 30 32  ntOfView    0x02
eb80: 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e  00   /* The coun
eb90: 74 2d 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69  t-of-view optimi
eba0: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
ebb0: 65 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48  e SQLITE_CursorH
ebc0: 69 6e 74 73 20 20 20 20 30 78 30 34 30 30 20 20  ints    0x0400  
ebd0: 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f   /* Add OP_Curso
ebe0: 72 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f  rHint opcodes */
ebf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ec00: 53 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30  Stat34         0
ec10: 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53  x0800   /* Use S
ec20: 54 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61  TAT3 or STAT4 da
ec30: 74 61 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20  ta */.   /* TH3 
ec40: 65 78 70 65 63 74 73 20 74 68 65 20 53 74 61 74  expects the Stat
ec50: 33 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65  34  ^^^^^^ value
ec60: 20 74 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20   to be 0x0800.  
ec70: 44 6f 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20  Don't change it 
ec80: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ec90: 45 5f 50 75 73 68 44 6f 77 6e 20 20 20 20 20 20  E_PushDown      
eca0: 20 30 78 31 30 30 30 20 20 20 2f 2a 20 54 68 65   0x1000   /* The
ecb0: 20 70 75 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d   push-down optim
ecc0: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
ecd0: 6e 65 20 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69  ne SQLITE_Simpli
ece0: 66 79 4a 6f 69 6e 20 20 20 30 78 32 30 30 30 20  fyJoin   0x2000 
ecf0: 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46    /* Convert LEF
ed00: 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a  T JOIN to JOIN *
ed10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ed20: 5f 53 6b 69 70 53 63 61 6e 20 20 20 20 20 20 20  _SkipScan       
ed30: 30 78 34 30 30 30 20 20 20 2f 2a 20 53 6b 69 70  0x4000   /* Skip
ed40: 2d 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  -scans */.#defin
ed50: 65 20 53 51 4c 49 54 45 5f 50 72 6f 70 61 67 61  e SQLITE_Propaga
ed60: 74 65 43 6f 6e 73 74 20 30 78 38 30 30 30 20 20  teConst 0x8000  
ed70: 20 2f 2a 20 54 68 65 20 63 6f 6e 73 74 61 6e 74   /* The constant
ed80: 20 70 72 6f 70 61 67 61 74 69 6f 6e 20 6f 70 74   propagation opt
ed90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
eda0: 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20  TE_AllOpts      
edb0: 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c    0xffff   /* Al
edc0: 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  l optimizations 
edd0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  */../*.** Macros
ede0: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65   for testing whe
edf0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69  ther or not opti
ee00: 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e  mizations are en
ee10: 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65  abled or disable
ee20: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70  d..*/.#define Op
ee30: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
ee40: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28  ed(db, mask)  ((
ee50: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
ee60: 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65  &(mask))!=0).#de
ee70: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
ee80: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
ee90: 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  k)   (((db)->dbO
eea0: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d  ptFlags&(mask))=
eeb0: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  =0)../*.** Retur
eec0: 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20  n true if it OK 
eed0: 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61  to factor consta
eee0: 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  nt expressions i
eef0: 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  nto the initiali
ef00: 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20  zation.** code. 
ef10: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  The argument is 
ef20: 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66  a Parse object f
ef30: 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  or the code gene
ef40: 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rator..*/.#defin
ef50: 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28  e ConstFactorOk(
ef60: 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74  P) ((P)->okConst
ef70: 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50  Factor)../*.** P
ef80: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
ef90: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61  or the sqlite.ma
efa0: 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68  gic field..** Th
efb0: 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62  e numbers are ob
efc0: 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d  tained at random
efd0: 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65   and have no spe
efe0: 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74  cial meaning, ot
eff0: 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e  her.** than bein
f000: 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  g distinct from 
f010: 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a  one another..*/.
f020: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
f030: 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78  AGIC_OPEN     0x
f040: 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74  a029a697  /* Dat
f050: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f  abase is open */
f060: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f070: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30  MAGIC_CLOSED   0
f080: 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61  x9f3c2d33  /* Da
f090: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
f0a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f0b0: 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20  TE_MAGIC_SICK   
f0c0: 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a    0x4b771290  /*
f0d0: 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74   Error and await
f0e0: 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65  ing close */.#de
f0f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
f100: 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33  C_BUSY     0xf03
f110: 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61  b7906  /* Databa
f120: 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  se currently in 
f130: 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
f140: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f  QLITE_MAGIC_ERRO
f150: 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20  R    0xb5357930 
f160: 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49   /* An SQLITE_MI
f170: 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72  SUSE error occur
f180: 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  red */.#define S
f190: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42  QLITE_MAGIC_ZOMB
f1a0: 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20  IE   0x64cffc7f 
f1b0: 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c   /* Close with l
f1c0: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c  ast statement cl
f1d0: 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ose */../*.** Ea
f1e0: 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  ch SQL function 
f1f0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
f200: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
f210: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
f220: 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c  ructure.  For gl
f230: 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75  obal built-in fu
f240: 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62  nctions (ex: sub
f250: 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f  str(), max(), co
f260: 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e  unt()).** a poin
f270: 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
f280: 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e  cture is held in
f290: 20 74 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c   the sqlite3Buil
f2a0: 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a  tinFunctions obj
f2b0: 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d  ect..** For per-
f2c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69  connection appli
f2d0: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66  cation-defined f
f2e0: 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e  unctions, a poin
f2f0: 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73  ter to this.** s
f300: 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64  tructure is held
f310: 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73   in the db->aHas
f320: 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a  h hash table..**
f330: 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20  .** The u.pHash 
f340: 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79  field is used by
f350: 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c   the global buil
f360: 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44  t-ins.  The u.pD
f370: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65  estructor.** fie
f380: 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 70 65  ld is used by pe
f390: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70  r-connection app
f3a0: 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  -def functions..
f3b0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
f3c0: 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20  f {.  i8 nArg;  
f3d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
f3e0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
f3f0: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
f400: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 33 32 20  imited */.  u32 
f410: 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  funcFlags;      
f420: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
f430: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46  tion of SQLITE_F
f440: 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20  UNC_* */.  void 
f450: 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  *pUserData;     
f460: 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72  /* User data par
f470: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63  ameter */.  Func
f480: 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Def *pNext;     
f490: 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f   /* Next functio
f4a0: 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65  n with same name
f4b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46   */.  void (*xSF
f4c0: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
f4d0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
f4e0: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66  3_value**); /* f
f4f0: 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20  unc or agg-step 
f500: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  */.  void (*xFin
f510: 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63  alize)(sqlite3_c
f520: 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20  ontext*);       
f530: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67             /* Ag
f540: 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20  g finalizer */. 
f550: 20 76 6f 69 64 20 28 2a 78 56 61 6c 75 65 29 28   void (*xValue)(
f560: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f570: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  );              
f580: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
f590: 74 20 61 67 67 20 76 61 6c 75 65 20 2a 2f 0a 20  t agg value */. 
f5a0: 20 76 6f 69 64 20 28 2a 78 49 6e 76 65 72 73 65   void (*xInverse
f5b0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
f5c0: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
f5d0: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 69 6e 76 65  alue**); /* inve
f5e0: 72 73 65 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a  rse agg-step */.
f5f0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
f600: 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61  ame;   /* SQL na
f610: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
f620: 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  on. */.  union {
f630: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48  .    FuncDef *pH
f640: 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ash;      /* Nex
f650: 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65  t with a differe
f660: 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20  nt name but the 
f670: 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20  same hash */.   
f680: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
f690: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
f6a0: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
f6b0: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
f6c0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20  function */.  } 
f6d0: 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  u;.};../*.** Thi
f6e0: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
f6f0: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
f700: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
f710: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
f720: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
f730: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
f740: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
f750: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
f760: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
f770: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
f780: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
f790: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
f7a0: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
f7b0: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
f7c0: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
f7d0: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
f7e0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
f7f0: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a  nRef is set to.*
f800: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
f810: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
f820: 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20  created (either 
f830: 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e  1 or 3, dependin
f840: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
f850: 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69  or not the speci
f860: 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73  fied encoding is
f870: 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68   SQLITE_ANY). Th
f880: 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72  e FuncDef.pDestr
f890: 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20  uctor.** member 
f8a0: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  of each of the n
f8b0: 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  ew FuncDef objec
f8c0: 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69  ts is set to poi
f8d0: 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61  nt to the alloca
f8e0: 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72  ted.** FuncDestr
f8f0: 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uctor..**.** The
f900: 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e  reafter, when on
f910: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
f920: 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65   objects is dele
f930: 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e  ted, the referen
f940: 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74  ce.** count on t
f950: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65  his object is de
f960: 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20  cremented. When 
f970: 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68  it reaches 0, th
f980: 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  e destructor.** 
f990: 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74  is invoked and t
f9a0: 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  he FuncDestructo
f9b0: 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65  r structure free
f9c0: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  d..*/.struct Fun
f9d0: 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20  cDestructor {.  
f9e0: 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64  int nRef;.  void
f9f0: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
fa00: 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55  d *);.  void *pU
fa10: 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a  serData;.};../*.
fa20: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
fa30: 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66  es for FuncDef.f
fa40: 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74  lags.  Note that
fa50: 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64   the _LENGTH and
fa60: 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75   _TYPEOF.** valu
fa70: 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f  es must correspo
fa80: 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e  nd to OPFLAG_LEN
fa90: 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
faa0: 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e  G_TYPEOFARG.  An
fab0: 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43  d.** SQLITE_FUNC
fac0: 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62  _CONSTANT must b
fad0: 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51  e the same as SQ
fae0: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
faf0: 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  IC.  There.** ar
fb00: 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
fb10: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
fb20: 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73  e to verify this
fb30: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
fb40: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
fb50: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
fb60: 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  ):.**     SQLITE
fb70: 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20  _FUNC_MINMAX    
fb80: 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ==  NC_MinMaxAgg
fb90: 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d        == SF_MinM
fba0: 61 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c  axAgg.**     SQL
fbb0: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
fbc0: 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45     ==  OPFLAG_LE
fbd0: 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53  NGTHARG.**     S
fbe0: 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
fbf0: 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f  F    ==  OPFLAG_
fc00: 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20  TYPEOFARG.**    
fc10: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fc20: 53 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54  STANT  ==  SQLIT
fc30: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20  E_DETERMINISTIC 
fc40: 66 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20  from the API.** 
fc50: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
fc60: 45 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64  ENCMASK   depend
fc70: 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a  s on SQLITE_UTF*
fc80: 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41   macros in the A
fc90: 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  PI.*/.#define SQ
fca0: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
fcb0: 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c  K  0x0003 /* SQL
fcc0: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
fcd0: 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31  _UTF16BE or UTF1
fce0: 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  6LE */.#define S
fcf0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
fd00: 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61      0x0004 /* Ca
fd10: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
fd20: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
fd30: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fd40: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
fd50: 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65    0x0008 /* Case
fd60: 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d  -sensitive LIKE-
fd70: 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  type function */
fd80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fd90: 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78  FUNC_EPHEM    0x
fda0: 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  0010 /* Ephemera
fdb0: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
fdc0: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
fdd0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
fde0: 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73  COLL 0x0020 /* s
fdf0: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
fe00: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
fe10: 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65  called*/.#define
fe20: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
fe30: 47 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20  GTH   0x0040 /* 
fe40: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
fe50: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
fe60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fe70: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38  C_TYPEOF   0x008
fe80: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
fe90: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
fea0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
feb0: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
fec0: 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0100 /* Built-
fed0: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
fee0: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
fef0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
ff00: 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20  LESCE 0x0200 /* 
ff10: 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
ff20: 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
ff30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ff40: 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20  E_FUNC_UNLIKELY 
ff50: 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0400 /* Built-
ff60: 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
ff70: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
ff80: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
ff90: 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a  NSTANT 0x0800 /*
ffa0: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
ffb0: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
ffc0: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
ffd0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
ffe0: 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f  INMAX   0x1000 /
fff0: 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29  * True for min()
10000 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65   and max() aggre
10010 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  gates */.#define
10020 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10030 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20  CHNG  0x2000 /* 
10040 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56  "Slow Change". V
10050 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75  alue constant du
10060 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20  ring a.         
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10080 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69             ** si
10090 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67  ngle query - mig
100a0 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74  ht change over t
100b0 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ime */.#define S
100c0 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e  QLITE_FUNC_AFFIN
100d0 49 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75  ITY 0x4000 /* Bu
100e0 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28  ilt-in affinity(
100f0 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
10100 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
10110 43 5f 4f 46 46 53 45 54 20 20 20 30 78 38 30 30  C_OFFSET   0x800
10120 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71  0 /* Built-in sq
10130 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75  lite_offset() fu
10140 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
10150 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49  e SQLITE_FUNC_WI
10160 4e 44 4f 57 20 20 30 78 31 30 30 30 30 20 2f 2a  NDOW  0x10000 /*
10170 20 42 75 69 6c 74 2d 69 6e 20 77 69 6e 64 6f 77   Built-in window
10180 2d 6f 6e 6c 79 20 66 75 6e 63 74 69 6f 6e 20 2a  -only function *
10190 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
101a0 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 5f 53 49 5a  _FUNC_WINDOW_SIZ
101b0 45 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20 52  E  0x20000  /* R
101c0 65 71 75 69 72 65 73 20 70 61 72 74 69 74 69 6f  equires partitio
101d0 6e 20 73 69 7a 65 20 61 73 20 61 72 67 2e 20 2a  n size as arg. *
101e0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
101f0 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
10200 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
10210 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
10220 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
10230 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
10240 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
10250 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
10260 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
10270 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
10280 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10290 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
102a0 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
102b0 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
102c0 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
102d0 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
102e0 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d 70  zName.**     imp
102f0 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75  lemented by C fu
10300 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61  nction xFunc tha
10310 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
10320 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a  rguments. The.**
10330 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65       value passe
10340 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73  d as iArg is cas
10350 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61  t to a (void*) a
10360 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c  nd made availabl
10370 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20  e.**     as the 
10380 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
10390 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20  e3_user_data()) 
103a0 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  for the function
103b0 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72 67 75  . If.**     argu
103c0 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65  ment bNC is true
103d0 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54  , then the SQLIT
103e0 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
103f0 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
10400 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a  **   VFUNCTION(z
10410 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10420 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
10430 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
10440 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
10450 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
10460 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
10470 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43 54  ..**.**   DFUNCT
10480 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
10490 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
104a0 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46  c).**     Like F
104b0 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69  UNCTION except i
104c0 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49  t omits the SQLI
104d0 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
104e0 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20 20   flag and.**    
104f0 20 61 64 64 73 20 74 68 65 20 53 51 4c 49 54 45   adds the SQLITE
10500 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66 6c  _FUNC_SLOCHNG fl
10510 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64 61  ag.  Used for da
10520 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74 69  te & time functi
10530 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20 66  ons.**     and f
10540 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73 71  unctions like sq
10550 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 74  lite_version() t
10560 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c 20  hat can change, 
10570 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a 2a  but not during.*
10580 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20 71  *     a single q
10590 75 65 72 79 2e 20 20 54 68 65 20 69 41 72 67 20  uery.  The iArg 
105a0 69 73 20 69 67 6e 6f 72 65 64 2e 20 20 54 68 65  is ignored.  The
105b0 20 75 73 65 72 2d 64 61 74 61 20 69 73 20 61 6c   user-data is al
105c0 77 61 79 73 20 73 65 74 0a 2a 2a 20 20 20 20 20  ways set.**     
105d0 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65  to a NULL pointe
105e0 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72 61  r.  The bNC para
105f0 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65  meter is not use
10600 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52 45 5f  d..**.**   PURE_
10610 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  DATE(zName, nArg
10620 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10630 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  nc).**     Used 
10640 66 6f 72 20 22 70 75 72 65 22 20 64 61 74 65 2f  for "pure" date/
10650 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20  time functions, 
10660 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6c 69  this macro is li
10670 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20  ke DFUNCTION.** 
10680 20 20 20 20 65 78 63 65 70 74 20 74 68 61 74 20      except that 
10690 69 74 20 64 6f 65 73 20 73 65 74 20 74 68 65 20  it does set the 
106a0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
106b0 54 41 4e 54 20 66 6c 61 67 73 2e 20 20 69 41 72  TANT flags.  iAr
106c0 67 20 69 73 0a 2a 2a 20 20 20 20 20 69 67 6e 6f  g is.**     igno
106d0 72 65 64 20 61 6e 64 20 74 68 65 20 75 73 65 72  red and the user
106e0 2d 64 61 74 61 20 66 6f 72 20 74 68 65 73 65 20  -data for these 
106f0 66 75 6e 63 74 69 6f 6e 73 20 69 73 20 73 65 74  functions is set
10700 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20 20 20 61   to an .**     a
10710 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c  rbitrary non-NUL
10720 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20  L pointer.  The 
10730 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69 73  bNC parameter is
10740 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
10750 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61     AGGREGATE(zNa
10760 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10770 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  bNC, xStep, xFin
10780 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  al).**     Used 
10790 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
107a0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
107b0 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
107c0 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
107d0 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
107e0 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
107f0 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
10800 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
10810 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
10820 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
10830 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
10840 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
10850 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
10860 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 57 46 55 4e  ()..**.**   WFUN
10870 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
10880 67 2c 20 69 41 72 67 2c 20 78 53 74 65 70 2c 20  g, iArg, xStep, 
10890 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20  xFinal, xValue, 
108a0 78 49 6e 76 65 72 73 65 29 0a 2a 2a 20 20 20 20  xInverse).**    
108b0 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
108c0 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
108d0 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
108e0 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a   implemented by.
108f0 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e  **     the C fun
10900 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64  ctions xStep and
10910 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72   xFinal. The fir
10920 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65  st four paramete
10930 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e  rs.**     are in
10940 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65  terpreted in the
10950 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65   same way as the
10960 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74   first 4 paramet
10970 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55  ers to.**     FU
10980 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20  NCTION()..**.** 
10990 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65    LIKEFUNC(zName
109a0 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c  , nArg, pArg, fl
109b0 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  ags).**     Used
109c0 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
109d0 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
109e0 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
109f0 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20  ction zName.**  
10a00 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20     that accepts 
10a10 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61  nArg arguments a
10a20 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  nd is implemente
10a30 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43  d by a call to C
10a40 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
10a50 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
10a60 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
10a70 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
10a80 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
10a90 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
10aa0 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
10ab0 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
10ac0 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
10ad0 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
10ae0 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
10af0 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
10b00 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
10b10 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
10b20 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
10b30 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
10b40 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10b50 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
10b60 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10b70 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
10b80 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
10b90 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
10ba0 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
10bb0 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10bc0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10bd0 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10be0 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f  #define VFUNCTIO
10bf0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
10c00 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10c10 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10c20 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10c30 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10c40 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
10c50 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10c60 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10c70 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10c80 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43   }.#define DFUNC
10c90 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10ca0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10cb0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10cc0 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10cd0 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  NG|SQLITE_UTF8, 
10ce0 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63  \.   0, 0, xFunc
10cf0 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
10d00 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
10d10 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65   PURE_DATE(zName
10d20 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10d30 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
10d40 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10d50 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
10d60 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43  UTF8|SQLITE_FUNC
10d70 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20  _CONSTANT, \.   
10d80 28 76 6f 69 64 2a 29 26 73 71 6c 69 74 65 33 43  (void*)&sqlite3C
10d90 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c  onfig, 0, xFunc,
10da0 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
10db0 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10dc0 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
10dd0 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10de0 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
10df0 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53  ags) \.  {nArg,S
10e00 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
10e10 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
10e20 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
10e30 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
10e40 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54  Flags,\.   SQLIT
10e50 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
10e60 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
10e70 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b   0, 0, #zName, {
10e80 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54 52  0} }.#define STR
10e90 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  _FUNCTION(zName,
10ea0 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43   nArg, pArg, bNC
10eb0 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
10ec0 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10ed0 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55  SLOCHNG|SQLITE_U
10ee0 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
10ef0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
10f00 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
10f10 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
10f20 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20  Name, }.#define 
10f30 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
10f40 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
10f50 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10f60 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10f70 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c  T|SQLITE_UTF8|fl
10f80 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20  ags, \.   (void 
10f90 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75  *)arg, 0, likeFu
10fa0 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10fb0 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10fc0 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61  ne AGGREGATE(zNa
10fd0 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
10fe0 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
10ff0 2c 20 78 56 61 6c 75 65 29 20 5c 0a 20 20 7b 6e  , xValue) \.  {n
11000 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
11010 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
11020 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
11030 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
11040 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65  TR(arg), 0, xSte
11050 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c  p,xFinal,xValue,
11060 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23  0,#zName, {0}}.#
11070 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
11080 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  2(zName, nArg, a
11090 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
110a0 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67  Final, extraFlag
110b0 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
110c0 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
110d0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
110e0 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
110f0 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
11100 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
11110 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 46 69  xStep,xFinal,xFi
11120 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30  nal,0,#zName, {0
11130 7d 7d 0a 0a 23 64 65 66 69 6e 65 20 57 41 47 47  }}..#define WAGG
11140 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
11150 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
11160 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c  ep, xFinal, xVal
11170 75 65 2c 20 78 49 6e 76 65 72 73 65 2c 20 66 29  ue, xInverse, f)
11180 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
11190 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
111a0 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
111b0 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  )|f, \.   SQLITE
111c0 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
111d0 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
111e0 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76 65 72 73  l,xValue,xInvers
111f0 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a  e,#zName, {0}}..
11200 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e  /*.** All curren
11210 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65  t savepoints are
11220 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
11230 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e  ked list startin
11240 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e  g at.** sqlite3.
11250 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20  pSavepoint. The 
11260 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e  first element in
11270 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65   the list is the
11280 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a   most recently.*
11290 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69  * opened savepoi
112a0 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61  nt. Savepoints a
112b0 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  re added to the 
112c0 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65  list by the vdbe
112d0 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  .** OP_Savepoint
112e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
112f0 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e  .struct Savepoin
11300 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  t {.  char *zNam
11310 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
11320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76            /* Sav
11330 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c  epoint name (nul
11340 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a  -terminated) */.
11350 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43    i64 nDeferredC
11360 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
11370 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11380 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76  of deferred fk v
11390 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  iolations */.  i
113a0 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
113b0 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
113c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
113d0 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e  deferred imm fk.
113e0 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
113f0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
11400 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
11410 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69  ent savepoint (i
11420 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  f any) */.};../*
11430 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
11440 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  g are used as th
11450 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74  e second paramet
11460 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76  er to sqlite3Sav
11470 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64  epoint(),.** and
11480 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d   as the P1 argum
11490 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61  ent to the OP_Sa
114a0 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
114b0 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ion..*/.#define 
114c0 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
114d0 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
114e0 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
114f0 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41      1.#define SA
11500 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
11510 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63     2.../*.** Eac
11520 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20  h SQLite module 
11530 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64  (virtual table d
11540 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65  efinition) is de
11550 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  fined by an.** i
11560 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
11570 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
11580 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68  re, stored in th
11590 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c  e sqlite3.aModul
115a0 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  e.** hash table.
115b0 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c  .*/.struct Modul
115c0 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  e {.  const sqli
115d0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
115e0 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61  ule;       /* Ca
115f0 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20  llback pointers 
11600 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
11610 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
11620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
11630 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  e passed to crea
11640 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
11650 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20   void *pAux;    
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11670 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61        /* pAux pa
11680 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
11690 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
116a0 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
116b0 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20  id *);          
116c0 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74    /* Module dest
116d0 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
116e0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f  */.  Table *pEpo
116f0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
11700 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f            /* Epo
11710 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72  nymous table for
11720 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a   this module */.
11730 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d  };../*.** inform
11740 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
11750 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51   column of an SQ
11760 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20  L table is held 
11770 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  in an instance.*
11780 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
11790 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ure..*/.struct C
117a0 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a  olumn {.  char *
117b0 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61  zName;     /* Na
117c0 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  me of this colum
117d0 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68  n, \000, then th
117e0 65 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72  e type */.  Expr
117f0 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20   *pDflt;     /* 
11800 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  Default value of
11810 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
11820 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20    char *zColl;  
11830 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
11840 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55  sequence.  If NU
11850 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61  LL, use the defa
11860 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e  ult */.  u8 notN
11870 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  ull;      /* An 
11880 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e  OE_ code for han
11890 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c  dling a NOT NULL
118a0 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
118b0 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
118c0 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
118d0 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76  SQLITE_AFF_... v
118e0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a  alues */.  u8 sz
118f0 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Est;        /* E
11900 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
11910 20 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63   value in this c
11920 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e  olumn. sizeof(IN
11930 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f  T)==1 */.  u8 co
11940 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42  lFlags;     /* B
11950 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65  oolean propertie
11960 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f  s.  See COLFLAG_
11970 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a   defines below *
11980 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
11990 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75   values for Colu
119a0 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a  mn.colFlags:.*/.
119b0 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
119c0 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20  PRIMKEY  0x0001 
119d0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20     /* Column is 
119e0 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d  part of the prim
119f0 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
11a00 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45  ne COLFLAG_HIDDE
11a10 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a  N   0x0002    /*
11a20 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e   A hidden column
11a30 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   in a virtual ta
11a40 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  ble */.#define C
11a50 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20  OLFLAG_HASTYPE  
11a60 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70  0x0004    /* Typ
11a70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63  e name follows c
11a80 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64  olumn name */.#d
11a90 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 55 4e  efine COLFLAG_UN
11aa0 49 51 55 45 20 20 20 30 78 30 30 30 38 20 20 20  IQUE   0x0008   
11ab0 20 2f 2a 20 43 6f 6c 75 6d 6e 20 64 65 66 20 63   /* Column def c
11ac0 6f 6e 74 61 69 6e 73 20 22 55 4e 49 51 55 45 22  ontains "UNIQUE"
11ad0 20 6f 72 20 22 50 4b 22 20 2a 2f 0a 23 64 65 66   or "PK" */.#def
11ae0 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 53 4f 52 54  ine COLFLAG_SORT
11af0 45 52 52 45 46 20 30 78 30 30 31 30 20 20 20 2f  ERREF 0x0010   /
11b00 2a 20 55 73 65 20 73 6f 72 74 65 72 2d 72 65 66  * Use sorter-ref
11b10 73 20 77 69 74 68 20 74 68 69 73 20 63 6f 6c 75  s with this colu
11b20 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22  mn */../*.** A "
11b30 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e  Collating Sequen
11b40 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62  ce" is defined b
11b50 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
11b60 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
11b70 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e  * structure. Con
11b80 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c  ceptually, a col
11b90 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
11ba0 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61  consists of a na
11bb0 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70  me and.** a comp
11bc0 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74  arison routine t
11bd0 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
11be0 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65  order of that se
11bf0 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  quence..**.** If
11c00 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73   CollSeq.xCmp is
11c10 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20   NULL, it means 
11c20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c  that the.** coll
11c30 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
11c40 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e  s undefined.  In
11c50 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61  dices built on a
11c60 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63  n undefined.** c
11c70 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11c80 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61  e may not be rea
11c90 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f  d or written..*/
11ca0 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20  .struct CollSeq 
11cb0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
11cc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
11cd0 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69  e of the collati
11ce0 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46  ng sequence, UTF
11cf0 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20  -8 encoded */.  
11d00 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
11d10 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
11d20 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62  coding handled b
11d30 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f  y xCmp() */.  vo
11d40 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20  id *pUser;      
11d50 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
11d60 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20  ument to xCmp() 
11d70 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29  */.  int (*xCmp)
11d80 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
11d90 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f  t void*, int, co
11da0 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
11db0 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a  id (*xDel)(void*
11dc0 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f  );  /* Destructo
11dd0 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d  r for pUser */.}
11de0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20  ;../*.** A sort 
11df0 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74  order can be eit
11e00 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e  her ASC or DESC.
11e10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
11e20 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20  TE_SO_ASC       
11e30 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  0  /* Sort in as
11e40 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
11e50 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
11e60 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20  SO_DESC      1  
11e70 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
11e80 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
11e90 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
11ea0 55 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20  UNDEFINED -1 /* 
11eb0 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70  No sort order sp
11ec0 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  ecified */../*.*
11ed0 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  * Column affinit
11ee0 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  y types..**.** T
11ef0 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76  hese used to hav
11f00 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20  e mnemonic name 
11f10 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c  like 'i' for SQL
11f20 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
11f30 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53  and.** 't' for S
11f40 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20  QLITE_AFF_TEXT. 
11f50 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65   But we can save
11f60 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20   a little space 
11f70 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74  and improve.** t
11f80 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c  he speed a littl
11f90 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74  e by numbering t
11fa0 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63  he values consec
11fb0 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42  utively..**.** B
11fc0 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73  ut rather than s
11fd0 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31  tart with 0 or 1
11fe0 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20  , we begin with 
11ff0 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a  'A'.  That way,.
12000 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65  ** when multiple
12010 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20   affinity types 
12020 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64  are concatenated
12030 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61   into a string a
12040 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68  nd.** used as th
12050 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68  e P4 operand, th
12060 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20  ey will be more 
12070 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  readable..**.** 
12080 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74  Note also that t
12090 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73  he numeric types
120a0 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67   are grouped tog
120b0 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65  ether so that te
120c0 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e  sting.** for a n
120d0 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61  umeric type is a
120e0 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73   single comparis
120f0 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f  on.  And the BLO
12100 42 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e  B type is first.
12110 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
12120 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20  TE_AFF_BLOB     
12130 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'A'.#define SQLI
12140 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20  TE_AFF_TEXT     
12150 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'B'.#define SQLI
12160 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
12170 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'C'.#define SQLI
12180 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20  TE_AFF_INTEGER  
12190 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'D'.#define SQLI
121a0 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20  TE_AFF_REAL     
121b0 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c  'E'..#define sql
121c0 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66  ite3IsNumericAff
121d0 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d  inity(X)  ((X)>=
121e0 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
121f0 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  IC)../*.** The S
12200 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76  QLITE_AFF_MASK v
12210 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20  alues masks off 
12220 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  the significant 
12230 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66  bits of an.** af
12240 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f  finity value..*/
12250 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12260 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
12270 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
12280 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
12290 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
122a0 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
122b0 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
122c0 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
122d0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
122e0 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
122f0 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
12300 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
12310 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
12320 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
12330 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
12340 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
12350 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
12360 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
12370 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
12380 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
12390 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
123a0 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
123b0 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
123c0 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
123d0 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
123e0 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20  QLITE_KEEPNULL  
123f0 20 20 20 30 78 30 38 20 20 2f 2a 20 55 73 65 64     0x08  /* Used
12400 20 62 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72   by vector == or
12410 20 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   <> */.#define S
12420 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
12430 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
12440 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
12450 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
12460 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
12470 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
12480 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
12490 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
124a0 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
124b0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
124c0 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
124d0 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
124e0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
124f0 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
12500 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
12510 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
12520 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
12530 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
12540 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
12550 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
12560 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
12570 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
12580 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
12590 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
125a0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
125b0 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68   shared, then th
125c0 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61  ere is one insta
125d0 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73  nce of this.** s
125e0 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63  tructure for eac
125f0 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
12600 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29  ction (sqlite3*)
12610 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73   that uses the s
12620 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e  hared.** schema.
12630 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
12640 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
12650 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72  onnection requir
12660 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75  es its own uniqu
12670 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  e.** instance of
12680 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
12690 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74  b* handle used t
126a0 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
126b0 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d  tual table.** im
126c0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
126d0 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
126e0 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
126f0 68 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a  hared between.**
12700 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12710 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
12720 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
12730 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
12740 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  ase.** schema is
12750 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20   shared, as the 
12760 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
12770 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20  ften stores the 
12780 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
12790 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61  ection handle pa
127a0 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74  ssed to it via t
127b0 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72  he xConnect() or
127c0 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f   xCreate() metho
127d0 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74  d.** during init
127e0 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72  ialization inter
127f0 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61  nally. This data
12800 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12810 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68  handle may.** th
12820 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68  en be used by th
12830 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
12840 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
12850 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61  o access real ta
12860 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74  bles.** within t
12870 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20  he database. So 
12880 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72  that they appear
12890 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
128a0 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73  callers.** trans
128b0 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
128c0 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
128d0 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
128e0 61 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ame database.** 
128f0 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68  connection as th
12900 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75  at used to execu
12910 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e  te SQL operation
12920 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s on the virtual
12930 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
12940 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  l VTable objects
12950 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
12960 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62   to a single tab
12970 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a  le in a shared.*
12980 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
12990 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  a are initially 
129a0 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
129b0 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20  ed-list pointed 
129c0 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62  to by.** the Tab
129d0 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65  le.pVTable membe
129e0 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68  r variable of th
129f0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
12a00 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a  Table object..**
12a10 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33   When an sqlite3
12a20 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61  _prepare() opera
12a30 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64  tion is required
12a40 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
12a50 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c  irtual.** table,
12a60 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65   it searches the
12a70 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54   list for the VT
12a80 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73  able that corres
12a90 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20  ponds to the.** 
12aa0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
12ab0 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72  ion doing the pr
12ac0 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f  eparing so as to
12ad0 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74   use the correct
12ae0 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62  .** sqlite3_vtab
12af0 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20  * handle in the 
12b00 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a  compiled query..
12b10 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e  **.** When an in
12b20 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62  -memory Table ob
12b30 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20  ject is deleted 
12b40 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65  (for example whe
12b50 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  n the.** schema 
12b60 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65  is being reloade
12b70 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f  d for some reaso
12b80 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f  n), the VTable o
12b90 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a  bjects are not.*
12ba0 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
12bb0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
12bc0 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
12bd0 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a  xDisconnect()ed.
12be0 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
12bf0 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72  Instead, they ar
12c00 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  e moved from the
12c10 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c   Table.pVTable l
12c20 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65  ist to.** anothe
12c30 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  r linked list he
12c40 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  aded by the sqli
12c50 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20  te3.pDisconnect 
12c60 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a  member of the.**
12c70 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
12c80 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
12c90 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20  . They are then 
12ca0 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e  deleted/xDisconn
12cb0 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69  ected.** next ti
12cc0 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69  me a statement i
12cd0 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67  s prepared using
12ce0 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20   said sqlite3*. 
12cf0 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20  This is done.** 
12d00 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63  to avoid deadloc
12d10 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69  k issues involvi
12d20 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69  ng multiple sqli
12d30 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65  te3.mutex mutexe
12d40 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63  s..** Refer to c
12d50 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75  omments above fu
12d60 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74  nction sqlite3Vt
12d70 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66  abUnlockList() f
12d80 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61  or an.** explana
12d90 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69  tion as to why i
12da0 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64  t is safe to add
12db0 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20   an entry to an 
12dc0 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
12dd0 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68  ect.** list with
12de0 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  out holding the 
12df0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
12e00 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
12e10 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  x..**.** The mem
12e20 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  ory for objects 
12e30 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
12e40 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64  always allocated
12e50 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62   by.** sqlite3Db
12e60 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20  Malloc(), using 
12e70 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  the connection h
12e80 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  andle stored in 
12e90 56 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20  VTable.db as.** 
12ea0 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
12eb0 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54  nt..*/.struct VT
12ec0 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  able {.  sqlite3
12ed0 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
12ee0 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63     /* Database c
12ef0 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69  onnection associ
12f00 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74  ated with this t
12f10 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65  able */.  Module
12f20 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20   *pMod;         
12f30 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
12f40 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  o module impleme
12f50 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  ntation */.  sql
12f60 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
12f70 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  ;      /* Pointe
12f80 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e  r to vtab instan
12f90 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ce */.  int nRef
12fa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
12fb0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
12fc0 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
12fd0 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75  structure */.  u
12fe0 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20  8 bConstraint;  
12ff0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
13000 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   if constraints 
13010 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f  are supported */
13020 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
13030 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
13040 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56  Depth of the SAV
13050 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a  EPOINT stack */.
13060 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b    VTable *pNext;
13070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13080 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69  ext in linked li
13090 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  st (see above) *
130a0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
130b0 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20  schema for each 
130c0 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69  SQL table and vi
130d0 65 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ew is represente
130e0 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62  d in memory.** b
130f0 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
13100 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
13110 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
13120 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68  uct Table {.  ch
13130 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
13140 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
13150 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
13160 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f  */.  Column *aCo
13170 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66  l;        /* Inf
13180 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
13190 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
131a0 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
131b0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
131c0 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74  SQL indexes on t
131d0 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  his table. */.  
131e0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
131f0 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72       /* NULL for
13200 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73   tables.  Points
13210 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69   to definition i
13220 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46  f a view. */.  F
13230 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20  Key *pFKey;     
13240 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69      /* Linked li
13250 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67  st of all foreig
13260 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74  n keys in this t
13270 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  able */.  char *
13280 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f  zColAff;       /
13290 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
132a0 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
132b0 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
132c0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
132d0 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
132e0 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
132f0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
13300 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
13310 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73  ... also used as
13320 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73   column name lis
13330 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20  t in a VIEW */. 
13340 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
13350 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
13360 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69  ree page for thi
13370 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32  s table */.  u32
13380 20 6e 54 61 62 52 65 66 3b 20 20 20 20 20 20 20   nTabRef;       
13390 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
133a0 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
133b0 54 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 74  Table */.  u32 t
133c0 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
133d0 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20  /* Mask of TF_* 
133e0 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36 20  values */.  i16 
133f0 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20  iPKey;          
13400 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74   /* If not negat
13410 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50  ive, use aCol[iP
13420 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69  Key] as the rowi
13430 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  d */.  i16 nCol;
13440 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13450 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
13460 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
13470 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c  /.  LogEst nRowL
13480 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69  ogEst;   /* Esti
13490 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61  mated rows in ta
134a0 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74  ble - from sqlit
134b0 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f  e_stat1 table */
134c0 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52  .  LogEst szTabR
134d0 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  ow;     /* Estim
134e0 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63  ated size of eac
134f0 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62  h table row in b
13500 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ytes */.#ifdef S
13510 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53  QLITE_ENABLE_COS
13520 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63  TMULT.  LogEst c
13530 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20  ostMult;     /* 
13540 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20  Cost multiplier 
13550 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74  for using this t
13560 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  able */.#endif. 
13570 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
13580 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
13590 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
135a0 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
135b0 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
135c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
135d0 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
135e0 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
135f0 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
13600 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
13610 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
13620 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
13630 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
13640 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
13650 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
13660 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
13670 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
13680 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
13690 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
136a0 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d  uleArg;  /* 0: m
136b0 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20  odule 1: schema 
136c0 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e  2: vtab name 3..
136d0 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61  .: args */.  VTa
136e0 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
136f0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
13700 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
13710 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
13720 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
13730 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
13740 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
13750 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
13760 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
13770 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
13780 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
13790 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
137a0 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
137b0 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
137c0 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
137d0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
137e0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
137f0 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
13800 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64  **.** TF_OOOHidd
13810 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61  en applies to ta
13820 62 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68 61  bles or view tha
13830 74 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f  t have hidden co
13840 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a  lumns that are.*
13850 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f  * followed by no
13860 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  n-hidden columns
13870 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52  .  Example:  "CR
13880 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
13890 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74  LE x USING.** vt
138a0 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29  ab1(a HIDDEN, b)
138b0 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69  ;".  Since "b" i
138c0 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63  s a non-hidden c
138d0 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73  olumn but "a" is
138e0 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20   hidden,.** the 
138f0 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74  TF_OOOHidden att
13900 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70  ribute would app
13910 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e  ly in this case.
13920 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65    Such tables re
13930 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c  quire.** special
13940 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67   handling during
13950 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69   INSERT processi
13960 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ng..*/.#define T
13970 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
13980 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 52    0x0001    /* R
13990 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20  ead-only system 
139a0 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
139b0 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20   TF_Ephemeral   
139c0 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
139d0 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61   An ephemeral ta
139e0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
139f0 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
13a00 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
13a10 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61  able has a prima
13a20 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
13a30 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65  e TF_Autoincreme
13a40 6e 74 20 20 20 30 78 30 30 30 38 20 20 20 20 2f  nt   0x0008    /
13a50 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72  * Integer primar
13a60 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63  y key is autoinc
13a70 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  rement */.#defin
13a80 65 20 54 46 5f 48 61 73 53 74 61 74 31 20 20 20  e TF_HasStat1   
13a90 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
13aa0 2a 20 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65 74  * nRowLogEst set
13ab0 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
13ac0 74 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  t1 */.#define TF
13ad0 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20  _WithoutRowid   
13ae0 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 4e 6f   0x0020    /* No
13af0 20 72 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59   rowid.  PRIMARY
13b00 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20   KEY is the key 
13b10 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f  */.#define TF_No
13b20 56 69 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78  VisibleRowid  0x
13b30 30 30 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73  0040    /* No us
13b40 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69  er-visible "rowi
13b50 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  d" column */.#de
13b60 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65  fine TF_OOOHidde
13b70 6e 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20  n       0x0080  
13b80 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65    /* Out-of-Orde
13b90 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  r hidden columns
13ba0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53   */.#define TF_S
13bb0 74 61 74 73 55 73 65 64 20 20 20 20 20 20 20 30  tatsUsed       0
13bc0 78 30 31 30 30 20 20 20 20 2f 2a 20 51 75 65 72  x0100    /* Quer
13bd0 79 20 70 6c 61 6e 6e 65 72 20 64 65 63 69 73 69  y planner decisi
13be0 6f 6e 73 20 61 66 66 65 63 74 65 64 20 62 79 0a  ons affected by.
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c10 20 20 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61 69       ** Index.ai
13c20 52 6f 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c 75  RowLogEst[] valu
13c30 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  es */.#define TF
13c40 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20 20  _HasNotNull     
13c50 20 30 78 30 32 30 30 20 20 20 20 2f 2a 20 43 6f   0x0200    /* Co
13c60 6e 74 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20  ntains NOT NULL 
13c70 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 0a  constraints */..
13c80 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65  /*.** Test to se
13c90 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
13ca0 20 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69   a table is a vi
13cb0 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
13cc0 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73  is is.** done as
13cd0 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74   a macro so that
13ce0 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69   it will be opti
13cf0 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76  mized out when v
13d00 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
13d10 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74  support is omitt
13d20 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c  ed from the buil
13d30 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
13d40 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
13d50 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
13d60 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
13d70 20 20 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65     ((X)->nModule
13d80 41 72 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  Arg).#else.#  de
13d90 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
13da0 29 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a  )      0.#endif.
13db0 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
13dc0 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20   determine if a 
13dd0 63 6f 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e  column is hidden
13de0 2e 20 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  .  IsOrdinaryHid
13df0 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f  denColumn().** o
13e00 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f  nly works for no
13e10 6e 2d 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  n-virtual tables
13e20 20 28 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65   (ordinary table
13e30 73 20 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64  s and views) and
13e40 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61   is.** always fa
13e50 6c 73 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54  lse unless SQLIT
13e60 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
13e70 43 4f 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e  COLUMNS is defin
13e80 65 64 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69  ed.  The.** IsHi
13e90 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63  ddenColumn() mac
13ea0 72 6f 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75  ro is general pu
13eb0 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65  rpose..*/.#if de
13ec0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
13ed0 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
13ee0 4e 53 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  NS).#  define Is
13ef0 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
13f00 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63          (((X)->c
13f10 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
13f20 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20  G_HIDDEN)!=0).# 
13f30 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61   define IsOrdina
13f40 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  ryHiddenColumn(X
13f50 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67  ) (((X)->colFlag
13f60 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
13f70 45 4e 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64  EN)!=0).#elif !d
13f80 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
13f90 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
13fa0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
13fb0 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20  denColumn(X)    
13fc0 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46       (((X)->colF
13fd0 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
13fe0 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65  IDDEN)!=0).#  de
13ff0 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
14000 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
14010 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
14020 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
14030 58 29 20 20 20 20 20 20 20 20 20 30 0a 23 20 20  X)         0.#  
14040 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72  define IsOrdinar
14050 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  yHiddenColumn(X)
14060 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44   0.#endif.../* D
14070 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61  oes the table ha
14080 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64  ve a rowid */.#d
14090 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58  efine HasRowid(X
140a0 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62  )     (((X)->tab
140b0 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f  Flags & TF_Witho
140c0 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65  utRowid)==0).#de
140d0 66 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69  fine VisibleRowi
140e0 64 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46  d(X) (((X)->tabF
140f0 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69  lags & TF_NoVisi
14100 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f  bleRowid)==0)../
14110 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67  *.** Each foreig
14120 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
14130 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
14140 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
14150 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
14160 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
14170 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
14180 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20  th two tables.  
14190 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65  The "from" table
141a0 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   is.** the table
141b0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
141c0 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
141d0 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65  ause that create
141e0 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  s the foreign.**
141f0 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20   key.  The "to" 
14200 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62  table is the tab
14210 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64  le that is named
14220 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43   in the REFERENC
14230 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f  ES clause..** Co
14240 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d  nsider this exam
14250 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  ple:.**.**     C
14260 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28  REATE TABLE ex1(
14270 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45  .**       a INTE
14280 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
14290 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45  .**       b INTE
142a0 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66  GER CONSTRAINT f
142b0 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78  k1 REFERENCES ex
142c0 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a  2(x).**     );.*
142d0 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e  *.** For foreign
142e0 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20   key "fk1", the 
142f0 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65  from-table is "e
14300 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74  x1" and the to-t
14310 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a  able is "ex2"..*
14320 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d  * Equivalent nam
14330 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72  es:.**.**     fr
14340 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c  om-table == chil
14350 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  d-table.**      
14360 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72   to-table == par
14370 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20  ent-table.**.** 
14380 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20  Each REFERENCES 
14390 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73  clause generates
143a0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
143b0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
143c0 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68  ructure.** which
143d0 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
143e0 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20  the from-table. 
143f0 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65   The to-table ne
14400 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65  ed not exist whe
14410 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61  n.** the from-ta
14420 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
14430 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f   The existence o
14440 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  f the to-table i
14450 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a  s not checked..*
14460 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66  *.** The list of
14470 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72   all parents for
14480 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69   child Table X i
14490 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65  s held at X.pFKe
144a0 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  y..**.** A list 
144b0 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20  of all children 
144c0 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  for a table name
144d0 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74  d Z (which might
144e0 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29   not even exist)
144f0 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53  .** is held in S
14500 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77  chema.fkeyHash w
14510 69 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f  ith a hash key o
14520 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  f Z..*/.struct F
14530 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70  Key {.  Table *p
14540 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62  From;     /* Tab
14550 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
14560 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
14570 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29  use (aka: Child)
14580 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
14590 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20  tFrom;  /* Next 
145a0 46 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61  FKey with the sa
145b0 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78  me in pFrom. Nex
145c0 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f  t parent of pFro
145d0 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f  m */.  char *zTo
145e0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
145f0 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74   of table that t
14600 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f  he key points to
14610 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a   (aka: Parent) *
14620 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54  /.  FKey *pNextT
14630 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69  o;    /* Next wi
14640 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e  th the same zTo.
14650 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a   Next child of z
14660 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  To. */.  FKey *p
14670 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72  PrevTo;    /* Pr
14680 65 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20  evious with the 
14690 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e  same zTo */.  in
146a0 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
146b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
146c0 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79  umns in this key
146d0 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33   */.  /* EV: R-3
146e0 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20  0323-21917 */.  
146f0 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20  u8 isDeferred;  
14700 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
14710 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b  constraint check
14720 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20  ing is deferred 
14730 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20  till COMMIT */. 
14740 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20   u8 aAction[2]; 
14750 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c         /* ON DEL
14760 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54  ETE and ON UPDAT
14770 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65  E actions, respe
14780 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69  ctively */.  Tri
14790 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b  gger *apTrigger[
147a0 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66  2];/* Triggers f
147b0 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74  or aAction[] act
147c0 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
147d0 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20   sColMap {      
147e0 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f  /* Mapping of co
147f0 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74  lumns in pFrom t
14800 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f  o columns in zTo
14810 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f   */.    int iFro
14820 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
14830 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e   Index of column
14840 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20   in pFrom */.   
14850 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20   char *zCol;    
14860 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
14870 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e  f column in zTo.
14880 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52    If NULL use PR
14890 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d  IMARY KEY */.  }
148a0 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20   aCol[1];       
148b0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
148c0 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43  y for each of nC
148d0 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b  ol columns */.};
148e0 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73  ../*.** SQLite s
148f0 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66  upports many dif
14900 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72  ferent ways to r
14910 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61  esolve a constra
14920 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52  int.** error.  R
14930 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69  OLLBACK processi
14940 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  ng means that a 
14950 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
14960 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74  tion.** causes t
14970 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
14980 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20  process to fail 
14990 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  and for the curr
149a0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
149b0 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ** to be rolled 
149c0 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f  back.  ABORT pro
149d0 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
149e0 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
149f0 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20  rocess.** fails 
14a00 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68  and any prior ch
14a10 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20  anges from that 
14a20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  one operation ar
14a30 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a  e backed out,.**
14a40 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63   but the transac
14a50 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c  tion is not roll
14a60 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70  ed back.  FAIL p
14a70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
14a80 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72  that.** the oper
14a90 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
14aa0 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75  s stops and retu
14ab0 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  rns an error cod
14ac0 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a  e.  But prior.**
14ad0 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20   changes due to 
14ae0 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
14af0 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  on are not backe
14b00 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c  d out and no rol
14b10 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e  lback.** occurs.
14b20 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74    IGNORE means t
14b30 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c  hat the particul
14b40 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73  ar row that caus
14b50 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
14b60 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f  t.** error is no
14b70 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  t inserted or up
14b80 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69  dated.  Processi
14b90 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
14ba0 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20   no error.** is 
14bb0 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41  returned.  REPLA
14bc0 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72  CE means that pr
14bd0 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  eexisting databa
14be0 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75  se rows that cau
14bf0 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20  sed.** a UNIQUE 
14c00 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
14c10 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64  tion are removed
14c20 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77   so that the new
14c30 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70   insert or.** up
14c40 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64  date can proceed
14c50 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
14c60 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
14c70 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64  rror is reported
14c80 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54  ..**.** RESTRICT
14c90 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43  , SETNULL, and C
14ca0 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61  ASCADE actions a
14cb0 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72  pply only to for
14cc0 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45  eign keys..** RE
14cd0 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61  STRICT is the sa
14ce0 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20  me as ABORT for 
14cf0 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67  IMMEDIATE foreig
14d00 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a  n keys and the.*
14d10 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41  * same as ROLLBA
14d20 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  CK for DEFERRED 
14d30 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d  keys.  SETNULL m
14d40 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f  eans that the fo
14d50 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20  reign.** key is 
14d60 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41  set to NULL.  CA
14d70 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74  SCADE means that
14d80 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44   a DELETE or UPD
14d90 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  ATE of the.** re
14da0 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72  ferenced table r
14db0 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64  ow is propagated
14dc0 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68   into the row th
14dd0 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20  at holds the.** 
14de0 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a  foreign key..**.
14df0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
14e00 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73   symbolic values
14e10 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63   are used to rec
14e20 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a  ord which type.*
14e30 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74  * of action to t
14e40 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ake..*/.#define 
14e50 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20  OE_None     0   
14e60 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63  /* There is no c
14e70 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65  onstraint to che
14e80 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ck */.#define OE
14e90 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a  _Rollback 1   /*
14ea0 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74   Fail the operat
14eb0 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b  ion and rollback
14ec0 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
14ed0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41   */.#define OE_A
14ee0 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42  bort    2   /* B
14ef0 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20  ack out changes 
14f00 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61  but do no rollba
14f10 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  ck transaction *
14f20 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69  /.#define OE_Fai
14f30 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f  l     3   /* Sto
14f40 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  p the operation 
14f50 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72  but leave all pr
14f60 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ior changes */.#
14f70 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65  define OE_Ignore
14f80 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65     4   /* Ignore
14f90 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e   the error. Do n
14fa0 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54  ot do the INSERT
14fb0 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64   or UPDATE */.#d
14fc0 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65  efine OE_Replace
14fd0 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20    5   /* Delete 
14fe0 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c  existing record,
14ff0 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20   then do INSERT 
15000 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
15010 66 69 6e 65 20 4f 45 5f 55 70 64 61 74 65 20 20  fine OE_Update  
15020 20 36 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20   6   /* Process 
15030 61 73 20 61 20 44 4f 20 55 50 44 41 54 45 20 69  as a DO UPDATE i
15040 6e 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 23  n an upsert */.#
15050 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69  define OE_Restri
15060 63 74 20 37 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ct 7   /* OE_Abo
15070 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  rt for IMMEDIATE
15080 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f  , OE_Rollback fo
15090 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64  r DEFERRED */.#d
150a0 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c  efine OE_SetNull
150b0 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65    8   /* Set the
150c0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
150d0 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64  ue to NULL */.#d
150e0 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74  efine OE_SetDflt
150f0 20 20 39 20 20 20 2f 2a 20 53 65 74 20 74 68 65    9   /* Set the
15100 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
15110 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c  ue to its defaul
15120 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
15130 43 61 73 63 61 64 65 20 20 31 30 20 20 2f 2a 20  Cascade  10  /* 
15140 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e  Cascade the chan
15150 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
15160 45 5f 44 65 66 61 75 6c 74 20 20 31 31 20 20 2f  E_Default  11  /
15170 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68  * Do whatever th
15180 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e  e default action
15190 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41   is */.../*.** A
151a0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
151b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
151c0 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
151d0 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  as the first.** 
151e0 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
151f0 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72  te3VdbeKeyCompar
15200 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  e and is used to
15210 20 63 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20   control the.** 
15220 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68  comparison of th
15230 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73  e two index keys
15240 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
15250 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61  t aSortOrder[] a
15260 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20  nd aColl[] have 
15270 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20  nField+1 slots. 
15280 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46   There.** are nF
15290 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74  ield slots for t
152a0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e  he columns of an
152b0 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20   index then one 
152c0 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f  extra slot.** fo
152d0 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74  r the rowid at t
152e0 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
152f0 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33  t KeyInfo {.  u3
15300 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  2 nRef;         
15310 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
15320 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69  eferences to thi
15330 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74  s KeyInfo object
15340 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
15350 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
15360 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65  t encoding - one
15370 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55   of the SQLITE_U
15380 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  TF* values */.  
15390 75 31 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20  u16 nKeyField;  
153a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
153b0 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   key columns in 
153c0 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  the index */.  u
153d0 31 36 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20  16 nAllField;   
153e0 20 20 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75     /* Total colu
153f0 6d 6e 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b  mns, including k
15400 65 79 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a  ey plus others *
15410 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  /.  sqlite3 *db;
15420 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
15430 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
15440 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  on */.  u8 *aSor
15450 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53  tOrder;     /* S
15460 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61  ort order for ea
15470 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20  ch column. */.  
15480 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31  CollSeq *aColl[1
15490 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67  ];  /* Collating
154a0 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61   sequence for ea
154b0 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b  ch term of the k
154c0 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ey */.};../*.** 
154d0 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64  This object hold
154e0 73 20 61 20 72 65 63 6f 72 64 20 77 68 69 63 68  s a record which
154f0 20 68 61 73 20 62 65 65 6e 20 70 61 72 73 65 64   has been parsed
15500 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69   out into indivi
15510 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20  dual.** fields, 
15520 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
15530 20 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70   of doing a comp
15540 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20  arison..**.** A 
15550 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a  record is an obj
15560 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ect that contain
15570 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69  s one or more fi
15580 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a  elds of data..**
15590 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65   Records are use
155a0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63  d to store the c
155b0 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c  ontent of a tabl
155c0 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f  e row and to sto
155d0 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66  re.** the key of
155e0 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c   an index.  A bl
155f0 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  ob encoding of a
15600 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74   record is creat
15610 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f  ed by.** the OP_
15620 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
15630 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e  e of the VDBE an
15640 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65  d is disassemble
15650 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43  d by the.** OP_C
15660 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a  olumn opcode..**
15670 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
15680 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73  of this object s
15690 65 72 76 65 73 20 61 73 20 61 20 22 6b 65 79 22  erves as a "key"
156a0 20 66 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61   for doing a sea
156b0 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64  rch on.** an ind
156c0 65 78 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67  ex b+tree. The g
156d0 6f 61 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63  oal of the searc
156e0 68 20 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65  h is to find the
156f0 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69   entry that.** i
15700 73 20 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20  s closed to the 
15710 6b 65 79 20 64 65 73 63 72 69 62 65 64 20 62 79  key described by
15720 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54   this object.  T
15730 68 69 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74  his object might
15740 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20   hold.** just a 
15750 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65  prefix of the ke
15760 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  y.  The number o
15770 66 20 66 69 65 6c 64 73 20 69 73 20 67 69 76 65  f fields is give
15780 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f  n by.** pKeyInfo
15790 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  ->nField..**.** 
157a0 54 68 65 20 72 31 20 61 6e 64 20 72 32 20 66 69  The r1 and r2 fi
157b0 65 6c 64 73 20 61 72 65 20 74 68 65 20 76 61 6c  elds are the val
157c0 75 65 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66  ues to return if
157d0 20 74 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73   this key is les
157e0 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65  s than.** or gre
157f0 61 74 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20  ater than a key 
15800 69 6e 20 74 68 65 20 62 74 72 65 65 2c 20 72 65  in the btree, re
15810 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
15820 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a  se are normally.
15830 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73  ** -1 and +1 res
15840 70 65 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d  pectively, but m
15850 69 67 68 74 20 62 65 20 69 6e 76 65 72 74 65 64  ight be inverted
15860 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66   to +1 and -1 if
15870 20 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69   the b-tree.** i
15880 73 20 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e  s in DESC order.
15890 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63  .**.** The key c
158a0 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69  omparison functi
158b0 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74  ons actually ret
158c0 75 72 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77  urn default_rc w
158d0 68 65 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a  hen they find.**
158e0 20 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61   an equals compa
158f0 72 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f  rison.  default_
15900 72 63 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c  rc can be -1, 0,
15910 20 6f 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72   or +1.  If ther
15920 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c  e are.** multipl
15930 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  e entries in the
15940 20 62 2d 74 72 65 65 20 77 69 74 68 20 74 68 65   b-tree with the
15950 20 73 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20   same key (when 
15960 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20  only looking.** 
15970 61 74 20 74 68 65 20 66 69 72 73 74 20 70 4b 65  at the first pKe
15980 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29  yInfo->nFields,)
15990 20 74 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63   then default_rc
159a0 20 63 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d   can be set to -
159b0 31 20 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68  1 to.** cause th
159c0 65 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64  e search to find
159d0 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c   the last match,
159e0 20 6f 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20   or +1 to cause 
159f0 74 68 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a  the search to.**
15a00 20 66 69 6e 64 20 74 68 65 20 66 69 72 73 74 20   find the first 
15a10 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  match..**.** The
15a20 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20   key comparison 
15a30 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73  functions will s
15a40 65 74 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75  et eqSeen to tru
15a50 65 20 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a  e if they ever.*
15a60 2a 20 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20  * get and equal 
15a70 72 65 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d  results when com
15a80 70 61 72 69 6e 67 20 74 68 69 73 20 73 74 72 75  paring this stru
15a90 63 74 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65  cture to a b-tre
15aa0 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65  e record..** Whe
15ab0 6e 20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c  n default_rc!=0,
15ac0 20 74 68 65 20 73 65 61 72 63 68 20 6d 69 67 68   the search migh
15ad0 74 20 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20  t end up on the 
15ae0 72 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65  record immediate
15af0 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65  ly.** before the
15b00 20 66 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20   first match or 
15b10 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65  immediately afte
15b20 72 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68  r the last match
15b30 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e  .  The.** eqSeen
15b40 20 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69   field will indi
15b50 63 61 74 65 20 77 68 65 74 68 65 72 20 6f 72 20  cate whether or 
15b60 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74  not an exact mat
15b70 63 68 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  ch exists in the
15b80 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73  .** b-tree..*/.s
15b90 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
15ba0 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f  cord {.  KeyInfo
15bb0 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20   *pKeyInfo;  /* 
15bc0 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f  Collation and so
15bd0 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61  rt-order informa
15be0 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61  tion */.  Mem *a
15bf0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
15c00 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36   Values */.  u16
15c10 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
15c20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
15c30 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d  tries in apMem[]
15c40 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74   */.  i8 default
15c50 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  _rc;      /* Com
15c60 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69  parison result i
15c70 66 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c  f keys are equal
15c80 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65   */.  u8 errCode
15c90 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72  ;         /* Err
15ca0 6f 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78  or detected by x
15cb0 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43  RecordCompare (C
15cc0 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29  ORRUPT or NOMEM)
15cd0 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20   */.  i8 r1;    
15ce0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
15cf0 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
15d00 28 6c 68 73 20 3c 20 72 68 73 29 20 2a 2f 0a 20  (lhs < rhs) */. 
15d10 20 69 38 20 72 32 3b 20 20 20 20 20 20 20 20 20   i8 r2;         
15d20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
15d30 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20   return if (lhs 
15d40 3e 20 72 68 73 29 20 2a 2f 0a 20 20 75 38 20 65  > rhs) */.  u8 e
15d50 71 53 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20  qSeen;          
15d60 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65 71  /* True if an eq
15d70 75 61 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f  uality compariso
15d80 6e 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20  n has been seen 
15d90 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  */.};.../*.** Ea
15da0 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20  ch SQL index is 
15db0 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
15dc0 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69  emory by an.** i
15dd0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
15de0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
15df0 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  re..**.** The co
15e00 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
15e10 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62  le that are to b
15e20 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65  e indexed are de
15e30 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68  scribed.** by th
15e40 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65  e aiColumn[] fie
15e50 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ld of this struc
15e60 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  ture.  For examp
15e70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77  le, suppose.** w
15e80 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f  e have the follo
15e90 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69  wing table and i
15ea0 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ndex:.**.**     
15eb0 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31  CREATE TABLE Ex1
15ec0 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c  (c1 int, c2 int,
15ed0 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20   c3 text);.**   
15ee0 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45    CREATE INDEX E
15ef0 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29  x2 ON Ex1(c3,c1)
15f00 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54  ;.**.** In the T
15f10 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64  able structure d
15f20 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e  escribing Ex1, n
15f30 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74  Col==3 because t
15f40 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65  here are.** thre
15f50 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
15f60 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20   table.  In the 
15f70 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
15f80 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78  describing.** Ex
15f90 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69  2, nColumn==2 si
15fa0 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63  nce 2 of the 3 c
15fb0 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72  olumns of Ex1 ar
15fc0 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68  e indexed..** Th
15fd0 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c  e value of aiCol
15fe0 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20  umn is {2, 0}.  
15ff0 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62  aiColumn[0]==2 b
16000 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69  ecause the.** fi
16010 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
16020 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
16030 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
16040 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
16050 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
16060 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
16070 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
16080 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
16090 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
160a0 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
160b0 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
160c0 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
160d0 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
160e0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
160f0 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
16100 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
16110 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
16120 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
16130 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
16140 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
16150 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
16160 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
16170 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
16180 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
16190 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
161a0 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
161b0 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
161c0 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
161d0 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
161e0 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  .** algorithm to
161f0 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72   employ whenever
16200 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
16210 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20  ade to insert a 
16220 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c  non-unique.** el
16230 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69  ement..**.** Whi
16240 6c 65 20 70 61 72 73 69 6e 67 20 61 20 43 52 45  le parsing a CRE
16250 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45  ATE TABLE or CRE
16260 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ATE INDEX statem
16270 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ent in order to.
16280 2a 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42 45  ** generate VDBE
16290 20 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65   code (as oppose
162a0 64 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65  d to parsing one
162b0 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71   read from an sq
162c0 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74  lite_master.** t
162d0 61 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20  able as part of 
162e0 70 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74  parsing an exist
162f0 69 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68  ing database sch
16300 65 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20  ema), transient 
16310 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20  instances.** of 
16320 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 6d  this structure m
16330 61 79 20 62 65 20 63 72 65 61 74 65 64 2e 20 49  ay be created. I
16340 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
16350 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61  Index.tnum varia
16360 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  ble is.** used t
16370 6f 20 73 74 6f 72 65 20 74 68 65 20 61 64 64 72  o store the addr
16380 65 73 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e  ess of a VDBE in
16390 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61  struction, not a
163a0 20 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a   database page.*
163b0 2a 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e  * number (it can
163c0 6e 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62 61  not - the databa
163d0 73 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61  se page is not a
163e0 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74  llocated until t
163f0 68 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72  he VDBE.** progr
16400 61 6d 20 69 73 20 65 78 65 63 75 74 65 64 29 2e  am is executed).
16410 20 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69   See convertToWi
16420 74 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28  thoutRowidTable(
16430 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
16440 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b  /.struct Index {
16450 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
16460 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16470 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65  ame of this inde
16480 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f  x */.  i16 *aiCo
16490 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
164a0 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73  /* Which columns
164b0 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69   are used by thi
164c0 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73  s index.  1st is
164d0 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a   0 */.  LogEst *
164e0 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20  aiRowLogEst;    
164f0 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45   /* From ANALYZE
16500 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65  : Est. rows sele
16510 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c  cted by each col
16520 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  umn */.  Table *
16530 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  pTable;         
16540 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62    /* The SQL tab
16550 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  le being indexed
16560 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
16570 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Aff;           /
16580 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
16590 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
165a0 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
165b0 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b  .  Index *pNext;
165c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
165d0 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73  he next index as
165e0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
165f0 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a  e same table */.
16600 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
16610 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63  a;         /* Sc
16620 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
16630 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
16640 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
16650 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20           /* for 
16660 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75  each column: Tru
16670 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d  e==DESC, False==
16680 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ASC */.  const c
16690 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20  har **azColl;   
166a0 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f    /* Array of co
166b0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
166c0 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78   names for index
166d0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72   */.  Expr *pPar
166e0 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f  tIdxWhere;     /
166f0 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  * WHERE clause f
16700 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63  or partial indic
16710 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  es */.  ExprList
16720 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20   *aColExpr;     
16730 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65   /* Column expre
16740 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
16750 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
16760 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20       /* DB Page 
16770 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20  containing root 
16780 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
16790 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52  .  LogEst szIdxR
167a0 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ow;         /* E
167b0 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65  stimated average
167c0 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74   row size in byt
167d0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
167e0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
167f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
16800 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68  lumns forming th
16810 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e  e key */.  u16 n
16820 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
16830 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16840 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20   columns stored 
16850 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
16860 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20    u8 onError;   
16870 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
16880 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72  _Abort, OE_Ignor
16890 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f  e, OE_Replace, o
168a0 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75  r OE_None */.  u
168b0 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a  nsigned idxType:
168c0 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e  2;      /* 1==UN
168d0 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59  IQUE, 2==PRIMARY
168e0 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20   KEY, 0==CREATE 
168f0 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67  INDEX */.  unsig
16900 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
16910 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
16920 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
16930 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
16940 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e  */.  unsigned un
16950 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a  iqNotNull:1;  /*
16960 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20   True if UNIQUE 
16970 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72  and NOT NULL for
16980 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   all columns */.
16990 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73    unsigned isRes
169a0 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72  ized:1;    /* Tr
169b0 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65  ue if resizeInde
169c0 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65  xObject() has be
169d0 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75  en called */.  u
169e0 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69  nsigned isCoveri
169f0 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  ng:1;   /* True 
16a00 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76  if this is a cov
16a10 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  ering index */. 
16a20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70   unsigned noSkip
16a30 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20  Scan:1;   /* Do 
16a40 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73  not try to use s
16a50 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65  kip-scan if true
16a60 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68   */.  unsigned h
16a70 61 73 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f  asStat1:1;     /
16a80 2a 20 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61  * aiRowLogEst va
16a90 6c 75 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73  lues come from s
16aa0 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 20  qlite_stat1 */. 
16ab0 20 75 6e 73 69 67 6e 65 64 20 62 4e 6f 51 75 65   unsigned bNoQue
16ac0 72 79 3a 31 3b 20 20 20 20 20 2f 2a 20 44 6f 20  ry:1;     /* Do 
16ad0 6e 6f 74 20 75 73 65 20 74 68 69 73 20 69 6e 64  not use this ind
16ae0 65 78 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71  ex to optimize q
16af0 75 65 72 69 65 73 20 2a 2f 0a 23 69 66 64 65 66  ueries */.#ifdef
16b00 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
16b10 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20  TAT3_OR_STAT4.  
16b20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20  int nSample;    
16b30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16b40 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
16b50 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20  n aSample[] */. 
16b60 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b   int nSampleCol;
16b70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
16b80 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65  e of IndexSample
16b90 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f  .anEq[] and so o
16ba0 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  n */.  tRowcnt *
16bb0 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20  aAvgEq;         
16bc0 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76  /* Average nEq v
16bd0 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e  alues for keys n
16be0 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f  ot in aSample */
16bf0 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a  .  IndexSample *
16c00 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53  aSample;    /* S
16c10 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
16c20 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20  ft-most key */. 
16c30 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45   tRowcnt *aiRowE
16c40 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  st;       /* Non
16c50 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61  -logarithmic sta
16c60 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73  t1 data for this
16c70 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77   index */.  tRow
16c80 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20  cnt nRowEst0;   
16c90 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
16ca0 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f  rithmic number o
16cb0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
16cc0 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  dex */.#endif.  
16cd0 42 69 74 6d 61 73 6b 20 63 6f 6c 4e 6f 74 49 64  Bitmask colNotId
16ce0 78 65 64 3b 20 20 20 20 20 2f 2a 20 30 20 66 6f  xed;     /* 0 fo
16cf0 72 20 75 6e 69 6e 64 65 78 65 64 20 63 6f 6c 75  r unindexed colu
16d00 6d 6e 73 20 69 6e 20 70 54 61 62 20 2a 2f 0a 7d  mns in pTab */.}
16d10 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
16d20 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65   values for Inde
16d30 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65  x.idxType.*/.#de
16d40 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
16d50 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20  YPE_APPDEF      
16d60 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75  0   /* Created u
16d70 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45  sing CREATE INDE
16d80 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  X */.#define SQL
16d90 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51  ITE_IDXTYPE_UNIQ
16da0 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49  UE      1   /* I
16db0 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51  mplements a UNIQ
16dc0 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  UE constraint */
16dd0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
16de0 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
16df0 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68  EY  2   /* Is th
16e00 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f  e PRIMARY KEY fo
16e10 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a  r the table */..
16e20 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
16e30 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50  f index X is a P
16e40 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78  RIMARY KEY index
16e50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72   */.#define IsPr
16e60 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29  imaryKeyIndex(X)
16e70 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d    ((X)->idxType=
16e80 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f  =SQLITE_IDXTYPE_
16e90 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20  PRIMARYKEY)../* 
16ea0 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
16eb0 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51  ndex X is a UNIQ
16ec0 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  UE index */.#def
16ed0 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65  ine IsUniqueInde
16ee0 78 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e  x(X)      ((X)->
16ef0 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65  onError!=OE_None
16f00 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e  )../* The Index.
16f10 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65  aiColumn[] value
16f20 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70  s are normally p
16f30 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e  ositive integer.
16f40 20 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61    But.** there a
16f50 72 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65  re some negative
16f60 20 76 61 6c 75 65 73 20 74 68 61 74 20 68 61 76   values that hav
16f70 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
16f80 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e  g:.*/.#define XN
16f90 5f 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20  _ROWID     (-1) 
16fa0 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63      /* Indexed c
16fb0 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77  olumn is the row
16fc0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e  id */.#define XN
16fd0 5f 45 58 50 52 20 20 20 20 20 20 28 2d 32 29 20  _EXPR      (-2) 
16fe0 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63      /* Indexed c
16ff0 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72  olumn is an expr
17000 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ession */../*.**
17010 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f   Each sample sto
17020 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
17030 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
17040 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
17050 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20  memory.** using 
17060 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74  a structure of t
17070 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64  his type.  See d
17080 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20  ocumentation at 
17090 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a  the top of the.*
170a0 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72  * analyze.c sour
170b0 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69  ce file for addi
170c0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
170d0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  on..*/.struct In
170e0 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f  dexSample {.  vo
170f0 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20  id *p;          
17100 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61  /* Pointer to sa
17110 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a  mpled record */.
17120 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
17130 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72      /* Size of r
17140 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a  ecord in bytes *
17150 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45  /.  tRowcnt *anE
17160 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  q;    /* Est. nu
17170 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
17180 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c  re the key equal
17190 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  s this sample */
171a0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74  .  tRowcnt *anLt
171b0 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
171c0 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
171d0 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68  e key is less th
171e0 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
171f0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44  /.  tRowcnt *anD
17200 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  Lt;   /* Est. nu
17210 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74  mber of distinct
17220 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20   keys less than 
17230 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d  this sample */.}
17240 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f  ;../*.** Each to
17250 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f  ken coming out o
17260 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61  f the lexer is a
17270 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a  n instance of.**
17280 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
17290 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73    Tokens are als
172a0 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f  o used as part o
172b0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  f an expression.
172c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72  .**.** The memor
172d0 79 20 74 68 61 74 20 22 7a 22 20 70 6f 69 6e 74  y that "z" point
172e0 73 20 74 6f 20 69 73 20 6f 77 6e 65 64 20 62 79  s to is owned by
172f0 20 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 2e 20   other objects. 
17300 20 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20 74 68   Take care.** th
17310 61 74 20 74 68 65 20 6f 77 6e 65 72 20 6f 66 20  at the owner of 
17320 74 68 65 20 22 7a 22 20 73 74 72 69 6e 67 20 64  the "z" string d
17330 6f 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f 63 61  oes not dealloca
17340 74 65 20 74 68 65 20 73 74 72 69 6e 67 20 62 65  te the string be
17350 66 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f 6b 65  fore.** the Toke
17360 6e 20 67 6f 65 73 20 6f 75 74 20 6f 66 20 73 63  n goes out of sc
17370 6f 70 65 21 20 20 56 65 72 79 20 6f 66 74 65 6e  ope!  Very often
17380 2c 20 74 68 65 20 22 7a 22 20 70 6f 69 6e 74 73  , the "z" points
17390 20 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65 0a 2a   to some place.*
173a0 2a 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20  * in the middle 
173b0 6f 66 20 74 68 65 20 50 61 72 73 65 2e 7a 53 71  of the Parse.zSq
173c0 6c 20 74 65 78 74 2e 20 20 42 75 74 20 69 74 20  l text.  But it 
173d0 6d 69 67 68 74 20 61 6c 73 6f 20 70 6f 69 6e 74  might also point
173e0 20 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69 63 20   to a.** static 
173f0 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63  string..*/.struc
17400 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73  t Token {.  cons
17410 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f  t char *z;     /
17420 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f  * Text of the to
17430 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74  ken.  Not NULL-t
17440 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20  erminated! */.  
17450 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20  unsigned int n; 
17460 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17470 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
17480 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a  is token */.};..
17490 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
174a0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
174b0 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
174c0 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
174d0 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
174e0 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54  ode for a SELECT
174f0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
17500 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17510 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70  ns..**.** If Exp
17520 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c  r.op==TK_AGG_COL
17530 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55  UMN or TK_AGG_FU
17540 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72  NCTION then Expr
17550 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a  .pAggInfo is a.*
17560 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  * pointer to thi
17570 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
17580 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66  e Expr.iColumn f
17590 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65  ield is the inde
175a0 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  x in.** AggInfo.
175b0 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66  aCol[] or AggInf
175c0 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66  o.aFunc[] of inf
175d0 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
175e0 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
175f0 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64  ode for that nod
17600 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f  e..**.** AggInfo
17610 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67  .pGroupBy and Ag
17620 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70  gInfo.aFunc.pExp
17630 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64  r point to field
17640 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20  s within the.** 
17650 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20  original Select 
17660 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
17670 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c  escribes the SEL
17680 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
17690 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20  These.** fields 
176a0 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
176b0 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61  e freed when dea
176c0 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67  llocating the Ag
176d0 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e  gInfo structure.
176e0 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e  .*/.struct AggIn
176f0 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74  fo {.  u8 direct
17700 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Mode;          /
17710 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69  * Direct renderi
17720 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61  ng mode means ta
17730 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79  ke data directly
17740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17750 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72             ** fr
17760 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  om source tables
17770 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f   rather than fro
17780 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a  m accumulators *
17790 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e  /.  u8 useSortin
177a0 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49  gIdx;       /* I
177b0 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72  n direct mode, r
177c0 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72  eference the sor
177d0 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65  ting index rathe
177e0 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
177f0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
17800 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  han the source t
17810 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  able */.  int so
17820 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
17830 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
17840 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e  er of the sortin
17850 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
17860 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b   sortingIdxPTab;
17870 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
17880 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d  umber of pseudo-
17890 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  table */.  int n
178a0 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
178b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
178c0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
178d0 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
178e0 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52    int mnReg, mxR
178f0 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e  eg;       /* Ran
17900 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  ge of registers 
17910 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43  allocated for aC
17920 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a  ol and aFunc */.
17930 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
17940 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65  upBy;     /* The
17950 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65   group by clause
17960 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
17970 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a  Info_col {    /*
17980 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   For each column
17990 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20   used in source 
179a0 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61  tables */.    Ta
179b0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
179c0 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65         /* Source
179d0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
179e0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
179f0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
17a00 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
17a10 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
17a20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
17a30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
17a40 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74  olumn number wit
17a50 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  hin the source t
17a60 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
17a70 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20  iSorterColumn;  
17a80 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
17a90 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72  umber in the sor
17aa0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
17ab0 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
17ac0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
17ad0 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
17ae0 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
17af0 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78  ulator */.    Ex
17b00 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
17b10 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72         /* The or
17b20 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f  iginal expressio
17b30 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a  n */.  } *aCol;.
17b40 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20    int nColumn;  
17b50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17b60 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72  ber of used entr
17b70 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f  ies in aCol[] */
17b80 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61  .  int nAccumula
17b90 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  tor;       /* Nu
17ba0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
17bb0 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67  that show throug
17bc0 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  h to the output.
17bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17be0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64             ** Ad
17bf0 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
17c00 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61   are used only a
17c10 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  s parameters to.
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c30 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67            ** agg
17c40 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
17c50 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
17c60 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a  Info_func {   /*
17c70 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67   For each aggreg
17c80 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ate function */.
17c90 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17cb0 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64  Expression encod
17cc0 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
17cd0 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20   */.    FuncDef 
17ce0 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
17cf0 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74   /* The aggregat
17d00 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  e function imple
17d10 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
17d20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
17d30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
17d40 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
17d50 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
17d60 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  lator */.    int
17d70 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   iDistinct;     
17d80 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72        /* Ephemer
17d90 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f  al table used to
17da0 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43   enforce DISTINC
17db0 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b  T */.  } *aFunc;
17dc0 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20  .  int nFunc;   
17dd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17de0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
17df0 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b  in aFunc[] */.};
17e00 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
17e10 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20  type ynVar is a 
17e20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
17e30 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72  either 16-bit or
17e40 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61   32-bit..** Usua
17e50 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74  lly it is 16-bit
17e60 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54  s.  But if SQLIT
17e70 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
17e80 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72  UMBER is greater
17e90 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77  .** than 32767 w
17ea0 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69  e have to make i
17eb0 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69  t 32-bit.  16-bi
17ec0 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62  t is preferred b
17ed0 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65  ecause.** it use
17ee0 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e  s less memory in
17ef0 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74   the Expr object
17f00 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67  , which is a big
17f10 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20   memory user.** 
17f20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  in systems with 
17f30 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64  lots of prepared
17f40 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e   statements.  An
17f50 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f  d few applicatio
17f60 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20  ns.** need more 
17f70 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72  than about 10 or
17f80 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20   20 variables.  
17f90 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65  But some extreme
17fa0 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74   users want.** t
17fb0 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20  o have prepared 
17fc0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
17fd0 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61  over 32767 varia
17fe0 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68  bles, and for th
17ff0 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e  em.** the option
18000 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61   is available (a
18010 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e  t compile-time).
18020 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
18030 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
18040 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65  ER<=32767.typede
18050 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c  f i16 ynVar;.#el
18060 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79  se.typedef int y
18070 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  nVar;.#endif../*
18080 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66  .** Each node of
18090 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
180a0 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  n the parse tree
180b0 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
180c0 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
180d0 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  ture..**.** Expr
180e0 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64  .op is the opcod
180f0 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70  e. The integer p
18100 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65  arser token code
18110 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20  s are reused.** 
18120 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e  as opcodes here.
18130 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   For example, th
18140 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73  e parser defines
18150 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20   TK_GE to be an 
18160 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20  integer.** code 
18170 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
18180 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20   ">=" operator. 
18190 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65  This same intege
181a0 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64  r code is reused
181b0 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74  .** to represent
181c0 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61   the greater-tha
181d0 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70  n-or-equal-to op
181e0 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78  erator in the ex
181f0 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65  pression.** tree
18200 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
18210 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
18220 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f  SQL literal (TK_
18230 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41  INTEGER, TK_FLOA
18240 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f  T, TK_BLOB,.** o
18250 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68  r TK_STRING), th
18260 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
18270 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20  ntains the text 
18280 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72  of the SQL liter
18290 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78  al. If.** the ex
182a0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61  pression is a va
182b0 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41  riable (TK_VARIA
182c0 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  BLE), then Expr.
182d0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
182e0 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  he.** variable n
182f0 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  ame. Finally, if
18300 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18310 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
18320 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29  on (TK_FUNCTION)
18330 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74  ,.** then Expr.t
18340 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
18350 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  e name of the fu
18360 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78  nction..**.** Ex
18370 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78  pr.pRight and Ex
18380 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65  pr.pLeft are the
18390 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
183a0 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  subexpressions o
183b0 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70  f a.** binary op
183c0 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f  erator. Either o
183d0 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55  r both may be NU
183e0 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78  LL..**.** Expr.x
183f0 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74  .pList is a list
18400 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66   of arguments if
18410 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18420 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
18430 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78  on,.** a CASE ex
18440 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49  pression or an I
18450 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  N expression of 
18460 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
18470 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29  IN (<y>, <z>...)
18480 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65  "..** Expr.x.pSe
18490 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20  lect is used if 
184a0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
184b0 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f  s a sub-select o
184c0 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
184d0 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22  of.** the form "
184e0 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54  <lhs> IN (SELECT
184f0 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45   ...)". If the E
18500 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20  P_xIsSelect bit 
18510 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a  is set in the.**
18520 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
18530 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53  , then Expr.x.pS
18540 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20  elect is valid. 
18550 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e  Otherwise, Expr.
18560 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61  x.pList is.** va
18570 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78  lid..**.** An ex
18580 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
18590 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44  form ID or ID.ID
185a0 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c   refers to a col
185b0 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a  umn in a table..
185c0 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72  ** For such expr
185d0 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70  essions, Expr.op
185e0 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f   is set to TK_CO
185f0 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54  LUMN and Expr.iT
18600 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69  able is.** the i
18610 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75  nteger cursor nu
18620 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63  mber of a VDBE c
18630 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
18640 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64  o that table and
18650 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  .** Expr.iColumn
18660 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   is the column n
18670 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70  umber for the sp
18680 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20  ecific column.  
18690 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73  If the.** expres
186a0 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20  sion is used as 
186b0 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61  a result in an a
186c0 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c  ggregate SELECT,
186d0 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c   then the.** val
186e0 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65  ue is also store
186f0 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41  d in the Expr.iA
18700 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  gg column in the
18710 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68   aggregate so th
18720 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20  at.** it can be 
18730 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61  accessed after a
18740 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72  ll aggregates ar
18750 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a  e computed..**.*
18760 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
18770 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e  ion is an unboun
18780 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65  d variable marke
18790 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61  r (a question ma
187a0 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20  rk.** character 
187b0 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69  '?' in the origi
187c0 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68  nal SQL) then th
187d0 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f  e Expr.iTable ho
187e0 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a  lds the index.**
187f0 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74   number for that
18800 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   variable..**.**
18810 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
18820 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79  on is a subquery
18830 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75   then Expr.iColu
18840 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  mn holds an inte
18850 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ger.** register 
18860 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e  number containin
18870 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  g the result of 
18880 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49  the subquery.  I
18890 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72  f the.** subquer
188a0 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61  y gives a consta
188b0 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20  nt result, then 
188c0 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49  iTable is -1.  I
188d0 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a  f the subquery.*
188e0 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72  * gives a differ
188f0 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69  ent answer at di
18900 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75  fferent times du
18910 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70  ring statement p
18920 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65  rocessing.** the
18930 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20  n iTable is the 
18940 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62  address of a sub
18950 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d  routine that com
18960 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65  putes the subque
18970 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ry..**.** If the
18980 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65   Expr is of type
18990 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20   OP_Column, and 
189a0 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20  the table it is 
189b0 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a  selecting from.*
189c0 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c  * is a disk tabl
189d0 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22  e or the "old.*"
189e0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74   pseudo-table, t
189f0 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20  hen pTab points 
18a00 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  to the.** corres
18a10 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65  ponding table de
18a20 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  finition..**.** 
18a30 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53  ALLOCATION NOTES
18a40 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a  :.**.** Expr obj
18a50 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c  ects can use a l
18a60 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  ot of memory spa
18a70 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73  ce in database s
18a80 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65  chema.  To.** he
18a90 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79  lp reduce memory
18aa0 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73   requirements, s
18ab0 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72  ometimes an Expr
18ac0 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a   object will be.
18ad0 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41  ** truncated.  A
18ae0 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65  nd to reduce the
18af0 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
18b00 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73  y allocations, s
18b10 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20  ometimes.** two 
18b20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a  or more Expr obj
18b30 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f  ects will be sto
18b40 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  red in a single 
18b50 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
18b60 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77  n,.** together w
18b70 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  ith Expr.zToken 
18b80 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49  strings..**.** I
18b90 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
18ba0 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   and EP_TokenOnl
18bb0 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20  y flags are set 
18bc0 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20  when.** an Expr 
18bd0 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61  object is trunca
18be0 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65  ted.  When EP_Re
18bf0 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68  duced is set, th
18c00 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68  en all.** the ch
18c10 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ild Expr objects
18c20 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65   in the Expr.pLe
18c30 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67  ft and Expr.pRig
18c40 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61  ht subtrees.** a
18c50 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  re contained wit
18c60 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d  hin the same mem
18c70 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ory allocation. 
18c80 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20   Note, however, 
18c90 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74  that.** the subt
18ca0 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70  rees in Expr.x.p
18cb0 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70  List or Expr.x.p
18cc0 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79  Select are alway
18cd0 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20  s separately.** 
18ce0 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72  allocated, regar
18cf0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
18d00 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63   or not EP_Reduc
18d10 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74  ed is set..*/.st
18d20 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38  ruct Expr {.  u8
18d30 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
18d40 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f       /* Operatio
18d50 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74  n performed by t
18d60 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68  his node */.  ch
18d70 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20  ar affinity;    
18d80 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
18d90 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75  nity of the colu
18da0 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61  mn or 0 if not a
18db0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32   column */.  u32
18dc0 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
18dd0 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66      /* Various f
18de0 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20  lags.  EP_* See 
18df0 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e  below */.  union
18e00 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f   {.    char *zTo
18e10 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ken;          /*
18e20 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65   Token value. Ze
18e30 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e  ro terminated an
18e40 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20  d dequoted */.  
18e50 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20    int iValue;   
18e60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d           /* Non-
18e70 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72  negative integer
18e80 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74   value if EP_Int
18e90 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a  Value */.  } u;.
18ea0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
18eb0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69  TokenOnly flag i
18ec0 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
18ed0 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
18ee0 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
18ef0 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
18f00 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
18f10 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
18f20 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
18f30 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
18f40 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
18f50 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
18f60 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
18f70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18f80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18f90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18fa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
18fb0 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b  ..  Expr *pLeft;
18fc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
18fd0 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ft subnode */.  
18fe0 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20  Expr *pRight;   
18ff0 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20         /* Right 
19000 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  subnode */.  uni
19010 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73  on {.    ExprLis
19020 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a  t *pList;     /*
19030 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
19040 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20  , SELECT, CASE, 
19050 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45  FUNCTION, BETWEE
19060 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  N */.    Select 
19070 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
19080 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e   EP_xIsSelect an
19090 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  d op = IN, EXIST
190a0 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d  S, SELECT */.  }
190b0 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   x;..  /* If the
190c0 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
190d0 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
190e0 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
190f0 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
19100 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
19110 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
19120 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
19130 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
19140 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
19150 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
19160 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
19170 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  function..  ****
19180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191c0 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  */..#if SQLITE_M
191d0 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
191e0 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
191f0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67           /* Heig
19200 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68  ht of the tree h
19210 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f  eaded by this no
19220 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  de */.#endif.  i
19230 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
19240 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
19250 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  MN: cursor numbe
19260 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69  r of table holdi
19270 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  ng column.      
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19290 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45     ** TK_REGISTE
192a0 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  R: register numb
192b0 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
192c0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
192d0 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20  K_TRIGGER: 1 -> 
192e0 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20  new, 0 -> old.  
192f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19300 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c         ** EP_Unl
19310 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32  ikely:  13421772
19320 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f  8 times likeliho
19330 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  od.             
19340 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19350 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72 65  K_SELECT: 1st re
19360 67 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c 74  gister of result
19370 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56   vector */.  ynV
19380 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  ar iColumn;     
19390 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
193a0 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20  : column index. 
193b0 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20   -1 for rowid.. 
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193d0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41          ** TK_VA
193e0 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65  RIABLE: variable
193f0 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20   number (always 
19400 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20 20  >= 1)..         
19410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19420 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c  ** TK_SELECT_COL
19430 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  UMN: column of t
19440 68 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72  he result vector
19450 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20   */.  i16 iAgg; 
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19470 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70  Which entry in p
19480 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20  AggInfo->aCol[] 
19490 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a  or ->aFunc[] */.
194a0 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e    i16 iRightJoin
194b0 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45  Table;   /* If E
194c0 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20  P_FromJoin, the 
194d0 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74  right table of t
194e0 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20  he join */.  u8 
194f0 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
19500 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54      /* TK_REGIST
19510 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  ER: original val
19520 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19540 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
19550 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
19560 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
19570 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
19580 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19590 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
195a0 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
195b0 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
195c0 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
195d0 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
195e0 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
195f0 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e 69 6f  NCTION */.  unio
19600 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  n {.    Table *p
19610 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
19620 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54 61 62  * TK_COLUMN: Tab
19630 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f  le containing co
19640 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20 4e 55 4c  lumn. Can be NUL
19650 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  L.              
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19670 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20  for a column of 
19680 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65  an index on an e
19690 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
196a0 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20   Window *pWin;  
196b0 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 46 55          /* TK_FU
196c0 4e 43 54 49 4f 4e 3a 20 57 69 6e 64 6f 77 20 64  NCTION: Window d
196d0 65 66 69 6e 69 74 69 6f 6e 20 66 6f 72 20 74 68  efinition for th
196e0 65 20 66 75 6e 63 20 2a 2f 0a 20 20 7d 20 79 3b  e func */.  } y;
196f0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
19700 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
19710 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
19720 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
19730 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
19740 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69  efine EP_FromJoi
19750 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f  n  0x000001 /* O
19760 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f  riginates in ON/
19770 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
19780 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
19790 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20  efine EP_Agg    
197a0 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43     0x000002 /* C
197b0 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
197c0 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
197d0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
197e0 6e 65 20 45 50 5f 48 61 73 46 75 6e 63 20 20 20  ne EP_HasFunc   
197f0 30 78 30 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74  0x000004 /* Cont
19800 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
19810 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e   functions of an
19820 79 20 6b 69 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  y kind */.#defin
19830 65 20 45 50 5f 46 69 78 65 64 43 6f 6c 20 20 30  e EP_FixedCol  0
19840 78 30 30 30 30 30 38 20 2f 2a 20 54 4b 5f 43 6f  x000008 /* TK_Co
19850 6c 75 6d 6e 20 77 69 74 68 20 61 20 6b 6e 6f 77  lumn with a know
19860 6e 20 66 69 78 65 64 20 76 61 6c 75 65 20 2a 2f  n fixed value */
19870 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74  .#define EP_Dist
19880 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f  inct  0x000010 /
19890 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
198a0 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e  tion with DISTIN
198b0 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  CT keyword */.#d
198c0 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65  efine EP_VarSele
198d0 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70  ct 0x000020 /* p
198e0 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c  Select is correl
198f0 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61  ated, not consta
19900 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
19910 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30  _DblQuoted 0x000
19920 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77  040 /* token.z w
19930 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e  as originally in
19940 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e   "..." */.#defin
19950 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30  e EP_InfixFunc 0
19960 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20  x000080 /* True 
19970 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e  for an infix fun
19980 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f  ction: LIKE, GLO
19990 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e  B, etc */.#defin
199a0 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30  e EP_Collate   0
199b0 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20  x000100 /* Tree 
199c0 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f  contains a TK_CO
199d0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a  LLATE operator *
199e0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e  /.#define EP_Gen
199f0 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20  eric   0x000200 
19a00 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54  /* Ignore COLLAT
19a10 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e  E or affinity on
19a20 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64   this tree */.#d
19a30 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75  efine EP_IntValu
19a40 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49  e  0x000400 /* I
19a50 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e  nteger value con
19a60 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c  tained in u.iVal
19a70 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
19a80 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30  _xIsSelect 0x000
19a90 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74  800 /* x.pSelect
19aa0 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72   is valid (other
19ab0 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29  wise x.pList is)
19ac0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
19ad0 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30  kip      0x00100
19ae0 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53  0 /* COLLATE, AS
19af0 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f  , or UNLIKELY */
19b00 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75  .#define EP_Redu
19b10 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f  ced   0x002000 /
19b20 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
19b30 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62  PR_REDUCEDSIZE b
19b40 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
19b50 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c  fine EP_TokenOnl
19b60 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78  y 0x004000 /* Ex
19b70 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54  pr struct EXPR_T
19b80 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74  OKENONLYSIZE byt
19b90 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
19ba0 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20  ne EP_Static    
19bb0 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64  0x008000 /* Held
19bc0 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f   in memory not o
19bd0 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c  btained from mal
19be0 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  loc() */.#define
19bf0 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78   EP_MemToken  0x
19c00 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74  010000 /* Need t
19c10 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  o sqlite3DbFree(
19c20 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f  ) Expr.zToken */
19c30 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65  .#define EP_NoRe
19c40 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f  duce  0x020000 /
19c50 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50  * Cannot EXPRDUP
19c60 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70  _REDUCE this Exp
19c70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
19c80 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30  Unlikely  0x0400
19c90 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29  00 /* unlikely()
19ca0 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29   or likelihood()
19cb0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
19cc0 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e  fine EP_ConstFun
19cd0 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20  c 0x080000 /* A 
19ce0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
19cf0 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47  TANT or _SLOCHNG
19d00 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
19d10 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c  fine EP_CanBeNul
19d20 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61  l 0x100000 /* Ca
19d30 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74  n be null despit
19d40 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  e NOT NULL const
19d50 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
19d60 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78   EP_Subquery  0x
19d70 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63  200000 /* Tree c
19d80 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c  ontains a TK_SEL
19d90 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ECT operator */.
19da0 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73  #define EP_Alias
19db0 20 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a       0x400000 /*
19dc0 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   Is an alias for
19dd0 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f   a result set co
19de0 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
19df0 45 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78 38  EP_Leaf      0x8
19e00 30 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c  00000 /* Expr.pL
19e10 65 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75  eft, .pRight, .u
19e20 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c  .pSelect all NUL
19e30 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  L */.#define EP_
19e40 57 69 6e 46 75 6e 63 20 20 30 78 31 30 30 30 30  WinFunc  0x10000
19e50 30 30 20 2f 2a 20 54 4b 5f 46 55 4e 43 54 49 4f  00 /* TK_FUNCTIO
19e60 4e 20 77 69 74 68 20 45 78 70 72 2e 79 2e 70 57  N with Expr.y.pW
19e70 69 6e 20 73 65 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  in set */../*.**
19e80 20 54 68 65 20 45 50 5f 50 72 6f 70 61 67 61 74   The EP_Propagat
19e90 65 20 6d 61 73 6b 20 69 73 20 61 20 73 65 74 20  e mask is a set 
19ea0 6f 66 20 70 72 6f 70 65 72 74 69 65 73 20 74 68  of properties th
19eb0 61 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  at automatically
19ec0 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70   propagate.** up
19ed0 77 61 72 64 73 20 69 6e 74 6f 20 70 61 72 65 6e  wards into paren
19ee0 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66  t nodes..*/.#def
19ef0 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  ine EP_Propagate
19f00 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f   (EP_Collate|EP_
19f10 53 75 62 71 75 65 72 79 7c 45 50 5f 48 61 73 46  Subquery|EP_HasF
19f20 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  unc)../*.** Thes
19f30 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
19f40 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
19f50 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
19f60 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e   in the.** Expr.
19f70 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
19f80 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50  #define ExprHasP
19f90 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
19fa0 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
19fb0 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45  ))!=0).#define E
19fc0 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74  xprHasAllPropert
19fd0 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66  y(E,P)  (((E)->f
19fe0 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
19ff0 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50  #define ExprSetP
1a000 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
1a010 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
1a020 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65  .#define ExprCle
1a030 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  arProperty(E,P) 
1a040 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28    (E)->flags&=~(
1a050 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53  P)../* The ExprS
1a060 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20  etVVAProperty() 
1a070 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
1a080 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20  r Verification, 
1a090 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61  Validation,.** a
1a0a0 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e  nd Accreditation
1a0b0 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73   only.  It works
1a0c0 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f   like ExprSetPro
1a0d0 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56  perty() during V
1a0e0 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20  VA.** processes 
1a0f0 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66  but is a no-op f
1a100 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a  or delivery..*/.
1a110 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1a120 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70  BUG.# define Exp
1a130 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
1a140 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73  E,P)  (E)->flags
1a150 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  |=(P).#else.# de
1a160 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
1a170 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e  roperty(E,P).#en
1a180 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
1a190 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  s to determine t
1a1a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
1a1b0 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61  es required by a
1a1c0 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20   normal Expr.** 
1a1d0 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20  struct, an Expr 
1a1e0 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
1a1f0 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
1a200 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67  set in Expr.flag
1a210 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72  s.** and an Expr
1a220 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
1a230 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
1a240 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69  ag set..*/.#defi
1a250 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45  ne EXPR_FULLSIZE
1a260 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
1a270 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20  f(Expr)         
1a280 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a    /* Full size *
1a290 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52  /.#define EXPR_R
1a2a0 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20  EDUCEDSIZE      
1a2b0 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
1a2c0 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d  iTable)  /* Comm
1a2d0 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23  on features */.#
1a2e0 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45  define EXPR_TOKE
1a2f0 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f  NONLYSIZE      o
1a300 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65  ffsetof(Expr,pLe
1a310 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66  ft)   /* Fewer f
1a320 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  eatures */../*.*
1a330 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
1a340 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70  o the sqlite3Exp
1a350 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e  rDup() function.
1a360 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
1a370 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65  comment.** above
1a380 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
1a390 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
1a3a0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55  /.#define EXPRDU
1a3b0 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20  P_REDUCE        
1a3c0 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64   0x0001  /* Used
1a3d0 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78   reduced-size Ex
1a3e0 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a  pr nodes */../*.
1a3f0 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  ** A list of exp
1a400 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20  ressions.  Each 
1a410 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f  expression may o
1a420 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61  ptionally have a
1a430 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78  .** name.  An ex
1a440 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74  pr/name combinat
1a450 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20  ion can be used 
1a460 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
1a470 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20   such.** as the 
1a480 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53  list of "expr AS
1a490 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c   ID" fields foll
1a4a0 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22  owing a "SELECT"
1a4b0 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69   or in the.** li
1a4c0 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72  st of "ID = expr
1a4d0 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50  " items in an UP
1a4e0 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66  DATE.  A list of
1a4f0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e   expressions can
1a500 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64  .** also be used
1a510 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
1a520 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20   to a function, 
1a530 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68  in which case th
1a540 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65  e a.zName.** fie
1a550 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  ld is not used..
1a560 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74  **.** By default
1a570 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20   the Expr.zSpan 
1a580 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75  field holds a hu
1a590 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73  man-readable des
1a5a0 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  cription of.** t
1a5b0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  he expression th
1a5c0 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68  at is used in th
1a5d0 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
1a5e0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61  error messages a
1a5f0 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62  nd.** column lab
1a600 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61  els.  In this ca
1a610 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69  se, Expr.zSpan i
1a620 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20  s typically the 
1a630 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c  text of a.** col
1a640 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  umn expression a
1a650 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61  s it exists in a
1a660 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1a670 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a  t.  However, if.
1a680 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61  ** the bSpanIsTa
1a690 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  b flag is set, t
1a6a0 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65  hen zSpan is ove
1a6b0 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20  rloaded to mean 
1a6c0 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74  the name.** of t
1a6d0 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
1a6e0 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41   in the form: DA
1a6f0 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c  TABASE.TABLE.COL
1a700 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72  UMN.  This later
1a710 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64  .** form is used
1a720 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75   for name resolu
1a730 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64  tion with nested
1a740 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a   FROM clauses..*
1a750 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  /.struct ExprLis
1a760 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b  t {.  int nExpr;
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a780 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73  Number of expres
1a790 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73  sions on the lis
1a7a0 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78  t */.  struct Ex
1a7b0 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a  prList_item { /*
1a7c0 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73   For each expres
1a7d0 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74  sion in the list
1a7e0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
1a7f0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
1a800 2f 2a 20 54 68 65 20 70 61 72 73 65 20 74 72 65  /* The parse tre
1a810 65 20 66 6f 72 20 74 68 69 73 20 65 78 70 72 65  e for this expre
1a820 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
1a830 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
1a840 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73       /* Token as
1a850 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1a860 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
1a870 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  .    char *zSpan
1a880 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1a890 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
1a8a0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
1a8b0 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72  */.    u8 sortOr
1a8c0 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  der;           /
1a8d0 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
1a8e0 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
1a8f0 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a   unsigned done :
1a900 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c  1;       /* A fl
1a910 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
1a920 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
1a930 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
1a940 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e    unsigned bSpan
1a950 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70  IsTab :1; /* zSp
1a960 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c  an holds DB.TABL
1a970 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20  E.COLUMN */.    
1a980 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c  unsigned reusabl
1a990 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74  e :1;   /* Const
1a9a0 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ant expression i
1a9b0 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20  s reusable */.  
1a9c0 20 20 75 6e 73 69 67 6e 65 64 20 62 53 6f 72 74    unsigned bSort
1a9d0 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66  erRef :1; /* Def
1a9e0 65 72 20 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e  er evaluation un
1a9f0 74 69 6c 20 61 66 74 65 72 20 73 6f 72 74 69 6e  til after sortin
1aa00 67 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  g */.    union {
1aa10 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
1aa20 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
1aa30 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
1aa40 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
1aa50 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
1aa60 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
1aa70 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
1aa80 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
1aa90 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
1aaa0 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
1aab0 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
1aac0 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
1aad0 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
1aae0 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
1aaf0 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
1ab00 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
1ab10 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  } u;.  } a[1];  
1ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab30 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20  /* One slot for 
1ab40 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
1ab50 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  in the list */.}
1ab60 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
1ab70 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
1ab80 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20  ucture can hold 
1ab90 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66  a simple list of
1aba0 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a   identifiers,.**
1abb0 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73   such as the lis
1abc0 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65  t "a,b,c" in the
1abd0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
1abe0 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ments:.**.**    
1abf0 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
1ac00 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e  a,b,c) VALUES ..
1ac10 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  .;.**      CREAT
1ac20 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74  E INDEX idx ON t
1ac30 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20  (a,b,c);.**     
1ac40 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
1ac50 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41  trig BEFORE UPDA
1ac60 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e  TE ON t(a,b,c) .
1ac70 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64  ..;.**.** The Id
1ac80 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64  List.a.idx field
1ac90 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68   is used when th
1aca0 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65  e IdList represe
1acb0 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a  nts the list of.
1acc0 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ** column names 
1acd0 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61  after a table na
1ace0 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20  me in an INSERT 
1acf0 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74  statement.  In t
1ad00 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a  he statement.**.
1ad10 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  **     INSERT IN
1ad20 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a  TO t(a,b,c) ....
1ad30 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20  **.** If "a" is 
1ad40 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20  the k-th column 
1ad50 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68  of table "t", th
1ad60 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69  en IdList.a[0].i
1ad70 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  dx==k..*/.struct
1ad80 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75   IdList {.  stru
1ad90 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b  ct IdList_item {
1ada0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
1adb0 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
1adc0 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72  f the identifier
1add0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b   */.    int idx;
1ade0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1adf0 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65  ex in some Table
1ae00 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c  .aCol[] of a col
1ae10 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20  umn named zName 
1ae20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74  */.  } *a;.  int
1ae30 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a   nId;         /*
1ae40 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74   Number of ident
1ae50 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69  ifiers on the li
1ae60 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
1ae70 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
1ae80 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65  ructure describe
1ae90 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  s the FROM claus
1aea0 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  e of a SELECT st
1aeb0 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68  atement..** Each
1aec0 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
1aed0 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
1aee0 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72  lause is a separ
1aef0 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a  ate element of.*
1af00 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b  * the SrcList.a[
1af10 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57  ] array..**.** W
1af20 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e  ith the addition
1af30 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   of multiple dat
1af40 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74  abase support, t
1af50 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1af60 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c  ucture.** can al
1af70 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65  so be used to de
1af80 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75  scribe a particu
1af90 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61  lar table such a
1afa0 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
1afb0 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20  .** is modified 
1afc0 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  by an INSERT, DE
1afd0 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
1afe0 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73  statement.  In s
1aff0 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20  tandard SQL,.** 
1b000 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73  such a table mus
1b010 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61  t be a simple na
1b020 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20  me: ID.  But in 
1b030 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c  SQLite, the tabl
1b040 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20  e can.** now be 
1b050 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
1b060 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61  database name, a
1b070 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74   dot, then the t
1b080 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44  able name: ID.ID
1b090 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e  ..**.** The join
1b0a0 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20  type starts out 
1b0b0 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e  showing the join
1b0c0 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68   type between th
1b0d0 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a  e current table.
1b0e0 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20  ** and the next 
1b0f0 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73  table on the lis
1b100 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62  t.  The parser b
1b110 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74  uilds the list t
1b120 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20  his way..** But 
1b130 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
1b140 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61  iftJoinType() la
1b150 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a  ter shifts the j
1b160 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74  ointypes so that
1b170 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70   each.** jointyp
1b180 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  e expresses the 
1b190 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  join between the
1b1a0 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
1b1b0 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a  revious table..*
1b1c0 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55  *.** In the colU
1b1d0 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68  sed field, the h
1b1e0 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62  igh-order bit (b
1b1f0 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66  it 63) is set if
1b200 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f   the table.** co
1b210 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e  ntains more than
1b220 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20   63 columns and 
1b230 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74  the 64-th or lat
1b240 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65  er column is use
1b250 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63  d..*/.struct Src
1b260 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72  List {.  int nSr
1b270 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
1b280 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72  ber of tables or
1b290 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74   subqueries in t
1b2a0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
1b2b0 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20  /.  u32 nAlloc; 
1b2c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b2d0 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61  f entries alloca
1b2e0 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77  ted in a[] below
1b2f0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63   */.  struct Src
1b300 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
1b310 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1b320 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77    /* Schema to w
1b330 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69  hich this item i
1b340 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63  s fixed */.    c
1b350 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20  har *zDatabase; 
1b360 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
1b370 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69  base holding thi
1b380 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  s table */.    c
1b390 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1b3a0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
1b3b0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
1b3c0 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f  r *zAlias;     /
1b3d0 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f  * The "B" part o
1b3e0 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72  f a "A AS B" phr
1b3f0 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74  ase.  zName is t
1b400 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61  he "A" */.    Ta
1b410 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
1b420 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20  /* An SQL table 
1b430 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1b440 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65   zName */.    Se
1b450 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
1b460 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74  /* A SELECT stat
1b470 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c  ement used in pl
1b480 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e  ace of a table n
1b490 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  ame */.    int a
1b4a0 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20  ddrFillSub;  /* 
1b4b0 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f  Address of subro
1b4c0 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73  utine to manifes
1b4d0 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a  t a subquery */.
1b4e0 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72      int regRetur
1b4f0 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  n;    /* Registe
1b500 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e  r holding return
1b510 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72   address of addr
1b520 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69  FillSub */.    i
1b530 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20  nt regResult;   
1b540 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f   /* Registers ho
1b550 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66  lding results of
1b560 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
1b570 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20  .    struct {.  
1b580 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b      u8 jointype;
1b590 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
1b5a0 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
1b5b0 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  is table and the
1b5c0 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20   previous */.   
1b5d0 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49     unsigned notI
1b5e0 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a  ndexed :1;    /*
1b5f0 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69   True if there i
1b600 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  s a NOT INDEXED 
1b610 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
1b620 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78  unsigned isIndex
1b630 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72  edBy :1;   /* Tr
1b640 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
1b650 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  n INDEXED BY cla
1b660 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  use */.      uns
1b670 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20  igned isTabFunc 
1b680 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  :1;     /* True 
1b690 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d  if table-valued-
1b6a0 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20  function syntax 
1b6b0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1b6c0 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a  d isCorrelated :
1b6d0 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73  1;  /* True if s
1b6e0 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72  ub-query is corr
1b6f0 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20  elated */.      
1b700 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f  unsigned viaCoro
1b710 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d  utine :1;  /* Im
1b720 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63  plemented as a c
1b730 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
1b740 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65     unsigned isRe
1b750 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a  cursive :1;   /*
1b760 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73   True for recurs
1b770 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e  ive reference in
1b780 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66   WITH */.    } f
1b790 67 3b 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73  g;.    int iCurs
1b7a0 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  or;      /* The 
1b7b0 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
1b7c0 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  er used to acces
1b7d0 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
1b7e0 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20      Expr *pOn;  
1b7f0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20        /* The ON 
1b800 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
1b810 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a   */.    IdList *
1b820 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65  pUsing;   /* The
1b830 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
1b840 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42   a join */.    B
1b850 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20  itmask colUsed; 
1b860 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29   /* Bit N (1<<N)
1b870 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e   set if column N
1b880 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64   of pTab is used
1b890 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
1b8a0 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64        char *zInd
1b8b0 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64  exedBy;    /* Id
1b8c0 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49  entifier from "I
1b8d0 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65  NDEXED BY <zInde
1b8e0 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  x>" clause */.  
1b8f0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46      ExprList *pF
1b900 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75  uncArg;  /* Argu
1b910 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76  ments to table-v
1b920 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a  alued-function *
1b930 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20  /.    } u1;.    
1b940 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b  Index *pIBIndex;
1b950 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
1b960 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
1b970 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65  ng to u1.zIndexe
1b980 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  dBy */.  } a[1];
1b990 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b9a0 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
1b9b0 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
1b9c0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
1b9d0 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
1b9e0 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
1b9f0 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
1ba00 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
1ba10 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
1ba20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
1ba30 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
1ba40 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
1ba50 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
1ba60 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
1ba70 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
1ba80 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
1ba90 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
1baa0 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
1bab0 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
1bac0 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
1bad0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1bae0 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
1baf0 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
1bb00 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
1bb10 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
1bb20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
1bb30 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
1bb40 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
1bb50 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
1bb60 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
1bb70 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
1bb80 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
1bb90 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
1bba0 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
1bbb0 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
1bbc0 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
1bbd0 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
1bbe0 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
1bbf0 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
1bc00 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
1bc10 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
1bc20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
1bc30 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
1bc40 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
1bc50 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
1bc60 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1bc70 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55  :.**     WHERE_U
1bc80 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f  SE_LIMIT  == SF_
1bc90 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64  FixedLimit.*/.#d
1bca0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1bcb0 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
1bcc0 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
1bcd0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1bce0 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
1bcf0 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
1bd00 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
1bd10 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
1bd20 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1bd30 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
1bd40 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
1bd50 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
1bd60 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
1bd70 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
1bd80 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
1bd90 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
1bda0 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
1bdb0 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
1bdc0 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
1bdd0 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30  S_MULTIROW 0x000
1bde0 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20  8 /* ONEPASS is 
1bdf0 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  ok with multiple
1be00 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65   rows */.#define
1be10 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45   WHERE_DUPLICATE
1be20 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f  S_OK    0x0010 /
1be30 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61  * Ok to return a
1be40 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f   row more than o
1be50 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nce */.#define W
1be60 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53  HERE_OR_SUBCLAUS
1be70 45 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20  E     0x0020 /* 
1be80 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62  Processing a sub
1be90 2d 57 48 45 52 45 20 61 73 20 70 61 72 74 20 6f  -WHERE as part o
1bea0 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f.              
1beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bec0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f          ** the O
1bed0 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20  R optimization  
1bee0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1bef0 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20  _GROUPBY        
1bf00 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64    0x0040 /* pOrd
1bf10 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erBy is really a
1bf20 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65   GROUP BY */.#de
1bf30 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1bf40 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30 30  NCTBY       0x00
1bf50 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69  80 /* pOrderby i
1bf60 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49  s really a DISTI
1bf70 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  NCT clause */.#d
1bf80 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54  efine WHERE_WANT
1bf90 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30  _DISTINCT    0x0
1bfa0 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75  100 /* All outpu
1bfb0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69  t needs to be di
1bfc0 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e  stinct */.#defin
1bfd0 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52  e WHERE_SORTBYGR
1bfe0 4f 55 50 20 20 20 20 20 20 30 78 30 32 30 30 20  OUP      0x0200 
1bff0 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74  /* Support sqlit
1c000 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
1c010 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ) */.#define WHE
1c020 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20  RE_SEEK_TABLE   
1c030 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f      0x0400 /* Do
1c040 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73   not defer seeks
1c050 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a   on main table *
1c060 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c070 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20  ORDERBY_LIMIT   
1c080 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52   0x0800 /* ORDER
1c090 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20  BY+LIMIT on the 
1c0a0 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64  inner loop */.#d
1c0b0 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b  efine WHERE_SEEK
1c0c0 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31  _UNIQ_TABLE  0x1
1c0d0 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65  000 /* Do not de
1c0e0 66 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69  fer seeks if uni
1c0f0 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  que */.         
1c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c110 2a 20 20 20 20 20 30 78 32 30 30 30 20 20 20 20  *     0x2000    
1c120 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
1c130 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ed */.#define WH
1c140 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20  ERE_USE_LIMIT   
1c150 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55       0x4000 /* U
1c160 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20  se the LIMIT in 
1c170 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a  cost estimates *
1c180 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1c190 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
1c1a0 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63   0x8000    not c
1c1b0 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
1c1c0 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  ../* Allowed ret
1c1d0 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
1c1e0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
1c1f0 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66  stinct().*/.#def
1c200 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1c210 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20  CT_NOOP      0  
1c220 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  /* DISTINCT keyw
1c230 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a  ord not used */.
1c240 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1c250 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20  STINCT_UNIQUE   
1c260 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63   1  /* No duplic
1c270 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
1c280 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f  WHERE_DISTINCT_O
1c290 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41  RDERED   2  /* A
1c2a0 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72  ll duplicates ar
1c2b0 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64  e adjacent */.#d
1c2c0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1c2d0 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33  INCT_UNORDERED 3
1c2e0 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20    /* Duplicates 
1c2f0 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f  are scattered */
1c300 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f  ../*.** A NameCo
1c310 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20  ntext defines a 
1c320 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68  context in which
1c330 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c   to resolve tabl
1c340 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  e and column.** 
1c350 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74  names.  The cont
1c360 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ext consists of 
1c370 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  a list of tables
1c380 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20   (the pSrcList) 
1c390 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c  field and.** a l
1c3a0 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70  ist of named exp
1c3b0 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29  ression (pEList)
1c3c0 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70  .  The named exp
1c3d0 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79  ression list may
1c3e0 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68  .** be NULL.  Th
1c3f0 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e  e pSrc correspon
1c400 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63  ds to the FROM c
1c410 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
1c420 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74  T or.** to the t
1c430 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61  able being opera
1c440 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54  ted on by INSERT
1c450 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c  , UPDATE, or DEL
1c460 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c  ETE.  The.** pEL
1c470 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
1c480 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  to the result se
1c490 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e  t of a SELECT an
1c4a0 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a  d is NULL for.**
1c4b0 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74   other statement
1c4c0 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  s..**.** NameCon
1c4d0 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73  texts can be nes
1c4e0 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c  ted.  When resol
1c4f0 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20  ving names, the 
1c500 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f  inner-most.** co
1c510 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65  ntext is searche
1c520 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20  d first.  If no 
1c530 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
1c540 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a  the next outer.*
1c550 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65  * context is che
1c560 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20  cked.  If there 
1c570 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63  is still no matc
1c580 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74  h, the next cont
1c590 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65  ext.** is checke
1c5a0 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73  d.  This process
1c5b0 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c   continues until
1c5c0 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20   either a match 
1c5d0 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61  is found.** or a
1c5e0 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20  ll contexts are 
1c5f0 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d  check.  When a m
1c600 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
1c610 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f  he nRef member o
1c620 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74  f.** the context
1c630 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1c640 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65  match is increme
1c650 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68  nted..**.** Each
1c660 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
1c670 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
1c680 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
1c690 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
1c6a0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1c6b0 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
1c6c0 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
1c6d0 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
1c6e0 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
1c6f0 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
1c700 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
1c710 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
1c720 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
1c730 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
1c740 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
1c750 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
1c760 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
1c770 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1c780 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
1c790 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
1c7a0 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
1c7b0 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
1c7c0 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
1c7d0 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  ames */.  union 
1c7e0 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
1c7f0 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70  pEList;    /* Op
1c800 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72  tional list of r
1c810 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e  esult-set column
1c820 73 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f  s */.    AggInfo
1c830 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a   *pAggInfo;   /*
1c840 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1c850 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74  ut aggregates at
1c860 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20   this level */. 
1c870 20 20 20 55 70 73 65 72 74 20 2a 70 55 70 73 65     Upsert *pUpse
1c880 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f  rt;     /* ON CO
1c890 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e  NFLICT clause in
1c8a0 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61  formation from a
1c8b0 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20  n upsert */.  } 
1c8c0 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  uNC;.  NameConte
1c8d0 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
1c8e0 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
1c8f0 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
1c900 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
1c910 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
1c920 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c930 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
1c940 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
1c950 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
1c960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1c970 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
1c980 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
1c990 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
1c9a0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
1c9b0 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
1c9c0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
1c9d0 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
1c9e0 65 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c 65 63 74  elow */.  Select
1c9f0 20 2a 70 57 69 6e 53 65 6c 65 63 74 3b 20 20 2f   *pWinSelect;  /
1ca00 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  * SELECT stateme
1ca10 6e 74 20 66 6f 72 20 61 6e 79 20 77 69 6e 64 6f  nt for any windo
1ca20 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  w functions */.}
1ca30 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
1ca40 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
1ca50 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46  NameContext, ncF
1ca60 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
1ca70 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1ca80 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1ca90 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
1caa0 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20  **    NC_HasAgg 
1cab0 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a     == SF_HasAgg.
1cac0 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41  **    NC_MinMaxA
1cad0 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41  gg == SF_MinMaxA
1cae0 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e  gg == SQLITE_FUN
1caf0 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23  C_MINMAX.**.*/.#
1cb00 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41  define NC_AllowA
1cb10 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41  gg  0x0001  /* A
1cb20 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1cb30 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68  ns are allowed h
1cb40 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ere */.#define N
1cb50 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30  C_PartIdx   0x00
1cb60 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  02  /* True if r
1cb70 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69  esolving a parti
1cb80 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a  al index WHERE *
1cb90 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43  /.#define NC_IsC
1cba0 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f  heck   0x0004  /
1cbb0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1cbc0 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43  ing names in a C
1cbd0 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
1cbe0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e  */.#define NC_In
1cbf0 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20  AggFunc 0x0008  
1cc00 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79  /* True if analy
1cc10 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74  zing arguments t
1cc20 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f  o an agg func */
1cc30 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
1cc40 67 67 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a  gg    0x0010  /*
1cc50 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
1cc60 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1cc70 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1cc80 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78   NC_IdxExpr   0x
1cc90 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0020  /* True if
1cca0 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d   resolving colum
1ccb0 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44  ns of CREATE IND
1ccc0 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  EX */.#define NC
1ccd0 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 34  _VarSelect 0x004
1cce0 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74  0  /* A correlat
1ccf0 65 64 20 73 75 62 71 75 65 72 79 20 68 61 73 20  ed subquery has 
1cd00 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65  been seen */.#de
1cd10 66 69 6e 65 20 4e 43 5f 55 45 4c 69 73 74 20 20  fine NC_UEList  
1cd20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75    0x0080  /* Tru
1cd30 65 20 69 66 20 75 4e 43 2e 70 45 4c 69 73 74 20  e if uNC.pEList 
1cd40 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  is used */.#defi
1cd50 6e 65 20 4e 43 5f 55 41 67 67 49 6e 66 6f 20 20  ne NC_UAggInfo  
1cd60 30 78 30 31 30 30 20 20 2f 2a 20 54 72 75 65 20  0x0100  /* True 
1cd70 69 66 20 75 4e 43 2e 70 41 67 67 49 6e 66 6f 20  if uNC.pAggInfo 
1cd80 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  is used */.#defi
1cd90 6e 65 20 4e 43 5f 55 55 70 73 65 72 74 20 20 20  ne NC_UUpsert   
1cda0 30 78 30 32 30 30 20 20 2f 2a 20 54 72 75 65 20  0x0200  /* True 
1cdb0 69 66 20 75 4e 43 2e 70 55 70 73 65 72 74 20 69  if uNC.pUpsert i
1cdc0 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  s used */.#defin
1cdd0 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30  e NC_MinMaxAgg 0
1cde0 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61  x1000  /* min/ma
1cdf0 78 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65  x aggregates see
1ce00 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f  n.  See note abo
1ce10 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ve */.#define NC
1ce20 5f 43 6f 6d 70 6c 65 78 20 20 20 30 78 32 30 30  _Complex   0x200
1ce30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20  0  /* True if a 
1ce40 66 75 6e 63 74 69 6f 6e 20 6f 72 20 73 75 62 71  function or subq
1ce50 75 65 72 79 20 73 65 65 6e 20 2a 2f 0a 23 64 65  uery seen */.#de
1ce60 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 57 69 6e  fine NC_AllowWin
1ce70 20 20 30 78 34 30 30 30 20 20 2f 2a 20 57 69 6e    0x4000  /* Win
1ce80 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  dow functions ar
1ce90 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
1cea0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1ceb0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1cec0 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20 64 65 73  owing object des
1ced0 63 72 69 62 65 73 20 61 20 73 69 6e 67 6c 65 20  cribes a single 
1cee0 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63  ON CONFLICT.** c
1cef0 6c 61 75 73 65 20 69 6e 20 61 6e 20 75 70 73 65  lause in an upse
1cf00 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 55  rt..**.** The pU
1cf10 70 73 65 72 74 54 61 72 67 65 74 20 66 69 65 6c  psertTarget fiel
1cf20 64 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 69 66  d is only set if
1cf30 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
1cf40 20 63 6c 61 75 73 65 20 69 6e 63 6c 75 64 65 73   clause includes
1cf50 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72  .** conflict-tar
1cf60 67 65 74 20 63 6c 61 75 73 65 2e 20 20 28 49 6e  get clause.  (In
1cf70 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 61 2c   "ON CONFLICT(a,
1cf80 62 29 22 20 74 68 65 20 22 28 61 2c 62 29 22 20  b)" the "(a,b)" 
1cf90 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69  is the.** confli
1cfa0 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65  ct-target clause
1cfb0 2e 29 20 20 54 68 65 20 70 55 70 73 65 72 74 54  .)  The pUpsertT
1cfc0 61 72 67 65 74 57 68 65 72 65 20 69 73 20 74 68  argetWhere is th
1cfd0 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48  e optional.** WH
1cfe0 45 52 45 20 63 6c 61 75 73 65 20 75 73 65 64 20  ERE clause used 
1cff0 74 6f 20 69 64 65 6e 74 69 66 79 20 70 61 72 74  to identify part
1d000 69 61 6c 20 75 6e 69 71 75 65 20 69 6e 64 65 78  ial unique index
1d010 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65 72  es..**.** pUpser
1d020 74 53 65 74 20 69 73 20 74 68 65 20 6c 69 73 74  tSet is the list
1d030 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70 72 20   of column=expr 
1d040 74 65 72 6d 73 20 6f 66 20 74 68 65 20 55 50 44  terms of the UPD
1d050 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a  ATE statement. .
1d060 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 53 65  ** The pUpsertSe
1d070 74 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c 20  t field is NULL 
1d080 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c 49 43  for a ON CONFLIC
1d090 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20 54  T DO NOTHING.  T
1d0a0 68 65 0a 2a 2a 20 70 55 70 73 65 72 74 57 68 65  he.** pUpsertWhe
1d0b0 72 65 20 69 73 20 74 68 65 20 57 48 45 52 45 20  re is the WHERE 
1d0c0 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 55  clause for the U
1d0d0 50 44 41 54 45 20 61 6e 64 20 69 73 20 4e 55 4c  PDATE and is NUL
1d0e0 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57 48 45 52  L if the.** WHER
1d0f0 45 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74  E clause is omit
1d100 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  ted..*/.struct U
1d110 70 73 65 72 74 20 7b 0a 20 20 45 78 70 72 4c 69  psert {.  ExprLi
1d120 73 74 20 2a 70 55 70 73 65 72 74 54 61 72 67 65  st *pUpsertTarge
1d130 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20  t;  /* Optional 
1d140 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 63  description of c
1d150 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78  onflicting index
1d160 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73   */.  Expr *pUps
1d170 65 72 74 54 61 72 67 65 74 57 68 65 72 65 3b 20  ertTargetWhere; 
1d180 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
1d190 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 65  for partial inde
1d1a0 78 20 74 61 72 67 65 74 73 20 2a 2f 0a 20 20 45  x targets */.  E
1d1b0 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74  xprList *pUpsert
1d1c0 53 65 74 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  Set;     /* The 
1d1d0 53 45 54 20 63 6c 61 75 73 65 20 66 72 6f 6d 20  SET clause from 
1d1e0 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55  an ON CONFLICT U
1d1f0 50 44 41 54 45 20 2a 2f 0a 20 20 45 78 70 72 20  PDATE */.  Expr 
1d200 2a 70 55 70 73 65 72 74 57 68 65 72 65 3b 20 20  *pUpsertWhere;  
1d210 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
1d220 61 75 73 65 20 66 6f 72 20 74 68 65 20 4f 4e 20  ause for the ON 
1d230 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20  CONFLICT UPDATE 
1d240 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69 65 6c  */.  /* The fiel
1d250 64 73 20 61 62 6f 76 65 20 63 6f 6d 70 72 69 73  ds above compris
1d260 65 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  e the parse tree
1d270 20 66 6f 72 20 74 68 65 20 75 70 73 65 72 74 20   for the upsert 
1d280 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54 68 65  clause..  ** The
1d290 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 61 72   fields below ar
1d2a0 65 20 75 73 65 64 20 74 6f 20 74 72 61 6e 73 66  e used to transf
1d2b0 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  er information f
1d2c0 72 6f 6d 20 74 68 65 20 49 4e 53 45 52 54 0a 20  rom the INSERT. 
1d2d0 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 64   ** processing d
1d2e0 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20 55 50 44  own into the UPD
1d2f0 41 54 45 20 70 72 6f 63 65 73 73 69 6e 67 20 77  ATE processing w
1d300 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67 20  hile generating 
1d310 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73 65 72  code..  ** Upser
1d320 74 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d 6f 72  t owns the memor
1d330 79 20 61 6c 6c 6f 63 61 74 65 64 20 61 62 6f 76  y allocated abov
1d340 65 2c 20 62 75 74 20 6e 6f 74 20 74 68 65 20 6d  e, but not the m
1d350 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a  emory below. */.
1d360 20 20 49 6e 64 65 78 20 2a 70 55 70 73 65 72 74    Index *pUpsert
1d370 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 43  Idx;        /* C
1d380 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20 70  onstraint that p
1d390 55 70 73 65 72 74 54 61 72 67 65 74 20 69 64 65  UpsertTarget ide
1d3a0 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20 53 72 63  ntifies */.  Src
1d3b0 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53 72 63  List *pUpsertSrc
1d3c0 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  ;      /* Table 
1d3d0 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 2a 2f  to be updated */
1d3e0 0a 20 20 69 6e 74 20 72 65 67 44 61 74 61 3b 20  .  int regData; 
1d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d400 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 68  First register h
1d410 6f 6c 64 69 6e 67 20 61 72 72 61 79 20 6f 66 20  olding array of 
1d420 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e 74 20  VALUES */.  int 
1d430 69 44 61 74 61 43 75 72 3b 20 20 20 20 20 20 20  iDataCur;       
1d440 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1d450 66 20 74 68 65 20 64 61 74 61 20 63 75 72 73 6f  f the data curso
1d460 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78 43  r */.  int iIdxC
1d470 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
1d480 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1d490 20 66 69 72 73 74 20 69 6e 64 65 78 20 63 75 72   first index cur
1d4a0 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sor */.};../*.**
1d4b0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1d4c0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1d4d0 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
1d4e0 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   all information
1d4f0 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65  .** needed to ge
1d500 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20  nerate code for 
1d510 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
1d520 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
1d530 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
1d540 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20 63  comment on the c
1d550 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65 67 69 73  omputeLimitRegis
1d560 74 65 72 73 28 29 20 72 6f 75 74 69 6e 65 20 66  ters() routine f
1d570 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c 65 64  or a.** detailed
1d580 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20   description of 
1d590 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74  the meaning of t
1d5a0 68 65 20 69 4c 69 6d 69 74 20 61 6e 64 20 69 4f  he iLimit and iO
1d5b0 66 66 73 65 74 20 66 69 65 6c 64 73 2e 0a 2a 2a  ffset fields..**
1d5c0 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
1d5d0 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
1d5e0 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
1d5f0 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
1d600 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
1d610 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
1d620 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
1d630 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
1d640 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
1d650 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
1d660 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
1d670 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
1d680 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
1d690 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
1d6a0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1d6b0 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
1d6c0 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
1d6d0 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
1d6e0 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
1d6f0 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
1d700 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
1d710 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
1d720 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
1d730 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
1d740 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
1d750 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
1d760 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
1d770 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
1d780 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1d790 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
1d7a0 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
1d7b0 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
1d7c0 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
1d7d0 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
1d7e0 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
1d7f0 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
1d800 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
1d810 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
1d820 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
1d830 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
1d840 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
1d850 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d870 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
1d880 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
1d890 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
1d8a0 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53  T */.  LogEst nS
1d8b0 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a  electRow;     /*
1d8c0 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
1d8d0 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
1d8e0 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61   */.  u32 selFla
1d8f0 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
1d900 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c  Various SF_* val
1d910 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69  ues */.  int iLi
1d920 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20  mit, iOffset;   
1d930 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1d940 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49  ers holding LIMI
1d950 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74  T & OFFSET count
1d960 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c  ers */.  u32 sel
1d970 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Id;             
1d980 2f 2a 20 55 6e 69 71 75 65 20 69 64 65 6e 74 69  /* Unique identi
1d990 66 69 65 72 20 6e 75 6d 62 65 72 20 66 6f 72 20  fier number for 
1d9a0 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20  this SELECT */. 
1d9b0 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68   int addrOpenEph
1d9c0 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70  m[2];   /* OP_Op
1d9d0 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20  enEphem opcodes 
1d9e0 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20  related to this 
1d9f0 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c  select */.  SrcL
1da00 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
1da10 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
1da20 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
1da30 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
1da40 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
1da50 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1da60 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
1da70 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
1da80 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
1da90 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
1daa0 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
1dab0 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
1dac0 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1dad0 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
1dae0 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
1daf0 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
1db00 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
1db10 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
1db20 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
1db30 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
1db40 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
1db50 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
1db60 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
1db70 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
1db80 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
1db90 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
1dba0 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
1dbb0 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
1dbc0 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  d. */.  With *pW
1dbd0 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ith;           /
1dbe0 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74  * WITH clause at
1dbf0 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73  tached to this s
1dc00 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20  elect. Or NULL. 
1dc10 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1dc20 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
1dc30 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e  C.  Window *pWin
1dc40 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ;          /* Li
1dc50 73 74 20 6f 66 20 77 69 6e 64 6f 77 20 66 75 6e  st of window fun
1dc60 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e 64  ctions */.  Wind
1dc70 6f 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20 20 20  ow *pWinDefn;   
1dc80 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 6e 61     /* List of na
1dc90 6d 65 64 20 77 69 6e 64 6f 77 20 64 65 66 69 6e  med window defin
1dca0 69 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  itions */.#endif
1dcb0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
1dcc0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
1dcd0 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
1dce0 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
1dcf0 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
1dd00 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a  elect Flag"..**.
1dd10 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1dd20 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1dd30 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a  d via assert()).
1dd40 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67  **     SF_HasAgg
1dd50 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67       == NC_HasAg
1dd60 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d  g.**     SF_MinM
1dd70 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e  axAgg  == NC_Min
1dd80 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51  MaxAgg     == SQ
1dd90 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
1dda0 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64  .**     SF_Fixed
1ddb0 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55  Limit == WHERE_U
1ddc0 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66  SE_LIMIT.*/.#def
1ddd0 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20  ine SF_Distinct 
1dde0 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f        0x00001  /
1ddf0 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20  * Output should 
1de00 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23  be DISTINCT */.#
1de10 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20  define SF_All   
1de20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32           0x00002
1de30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68    /* Includes th
1de40 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f  e ALL keyword */
1de50 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f  .#define SF_Reso
1de60 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30  lved       0x000
1de70 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65  04  /* Identifie
1de80 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  rs have been res
1de90 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  olved */.#define
1dea0 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20   SF_Aggregate   
1deb0 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43     0x00008  /* C
1dec0 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63  ontains agg func
1ded0 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50  tions or a GROUP
1dee0 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   BY */.#define S
1def0 46 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20  F_HasAgg        
1df00 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e   0x00010  /* Con
1df10 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
1df20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
1df30 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65  fine SF_UsesEphe
1df40 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20  meral  0x00020  
1df50 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e  /* Uses the Open
1df60 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1df70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45   */.#define SF_E
1df80 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78  xpanded       0x
1df90 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65  00040  /* sqlite
1dfa0 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20  3SelectExpand() 
1dfb0 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a  called on this *
1dfc0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1dfd0 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30  TypeInfo    0x00
1dfe0 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62  080  /* FROM sub
1dff0 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62  queries have Tab
1e000 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23  le metadata */.#
1e010 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75  define SF_Compou
1e020 6e 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30  nd       0x00100
1e030 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63    /* Part of a c
1e040 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f  ompound query */
1e050 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
1e060 65 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32  es         0x002
1e070 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  00  /* Synthesiz
1e080 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
1e090 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1e0a0 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20   SF_MultiValue  
1e0b0 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53     0x00400  /* S
1e0c0 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72  ingle VALUES ter
1e0d0 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  m with multiple 
1e0e0 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1e0f0 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
1e100 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61    0x00800  /* Pa
1e110 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
1e120 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
1e130 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1e140 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30  MinMaxAgg      0
1e150 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65  x01000  /* Aggre
1e160 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  gate containing 
1e170 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a  min() or max() *
1e180 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63  /.#define SF_Rec
1e190 75 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32  ursive      0x02
1e1a0 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75  000  /* The recu
1e1b0 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20  rsive part of a 
1e1c0 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f  recursive CTE */
1e1d0 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65  .#define SF_Fixe
1e1e0 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30  dLimit     0x040
1e1f0 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f  00  /* nSelectRo
1e200 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74  w set by a const
1e210 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65  ant LIMIT */.#de
1e220 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e  fine SF_MaybeCon
1e230 76 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20  vert   0x08000  
1e240 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43  /* Need convertC
1e250 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1e260 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1e270 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65  fine SF_Converte
1e280 64 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20  d      0x10000  
1e290 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d  /* By convertCom
1e2a0 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1e2b0 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
1e2c0 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64  ne SF_IncludeHid
1e2d0 64 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a  den  0x20000  /*
1e2e0 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20   Include hidden 
1e2f0 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75  columns in outpu
1e300 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  t */.#define SF_
1e310 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20 30  ComplexResult  0
1e320 78 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75 6c  x40000  /* Resul
1e330 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71 75  t contains subqu
1e340 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ery or function 
1e350 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65  */../*.** The re
1e360 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
1e370 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62  T can be distrib
1e380 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  uted in several 
1e390 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64  ways, as defined
1e3a0 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68  .** by one of th
1e3b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1e3c0 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70  os.  The "SRT" p
1e3d0 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c  refix means "SEL
1e3e0 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79  ECT Result.** Ty
1e3f0 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pe"..**.**     S
1e400 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53  RT_Union       S
1e410 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
1e420 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f  a key in a tempo
1e430 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20  rary index.**   
1e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e450 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20    identified by 
1e460 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1e470 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
1e480 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65  cept      Remove
1e490 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68   results from th
1e4a0 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  e temporary inde
1e4b0 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  x pDest->iSDParm
1e4c0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e4d0 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72  Exists      Stor
1e4e0 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20  e a 1 in memory 
1e4f0 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50  cell pDest->iSDP
1e500 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c  arm if the resul
1e510 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1e520 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20           set is 
1e530 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a  not empty..**.**
1e540 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64       SRT_Discard
1e550 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72       Throw the r
1e560 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68  esults away.  Th
1e570 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45  is is used by SE
1e580 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20  LECT.**         
1e590 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
1e5a0 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
1e5b0 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c  iggers whose onl
1e5c0 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20  y purpose is.** 
1e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5e0 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66      the side-eff
1e5f0 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e  ects of function
1e600 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  s..**.** All of 
1e610 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72  the above are fr
1e620 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65  ee to ignore the
1e630 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  ir ORDER BY clau
1e640 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a  se. Those that.*
1e650 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f  * follow must ho
1e660 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  nor the ORDER BY
1e670 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1e680 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20     SRT_Output   
1e690 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f     Generate a ro
1e6a0 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69  w of output (usi
1e6b0 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74  ng the OP_Result
1e6c0 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  Row.**          
1e6d0 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64             opcod
1e6e0 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  e) for each row 
1e6f0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
1e700 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1e710 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c  _Mem         Onl
1e720 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72  y valid if the r
1e730 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c  esult is a singl
1e740 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20  e column..**    
1e750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e760 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74   Store the first
1e770 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66   column of the f
1e780 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a  irst result row.
1e790 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e7a0 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74         in regist
1e7b0 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
1e7c0 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74  m then abandon t
1e7d0 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20  he rest.**      
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1e7f0 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68  f the query.  Th
1e800 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69  is destination i
1e810 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22  mplies "LIMIT 1"
1e820 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e830 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20  Set         The 
1e840 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61  result must be a
1e850 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
1e860 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20   Store each.**  
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e880 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74     row of result
1e890 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74   as the key in t
1e8a0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1e8b0 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c              Appl
1e8d0 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70  y the affinity p
1e8e0 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65  Dest->affSdst be
1e8f0 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20  fore storing.** 
1e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e910 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73      results.  Us
1e920 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
1e930 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29  "IN (SELECT ...)
1e940 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1e950 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65  _EphemTab    Cre
1e960 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79  ate an temporary
1e970 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1e980 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a  DParm and store.
1e990 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e9a0 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c         the resul
1e9b0 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72  t there. The cur
1e9c0 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e  sor is left open
1e9d0 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20   after.**       
1e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e9f0 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69  turning.  This i
1ea00 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  s like SRT_Table
1ea10 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea30 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61      this destina
1ea40 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65  tion uses OP_Ope
1ea50 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72  nEphemeral to cr
1ea60 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  eate.**         
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1ea80 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a  table first..**.
1ea90 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75  **     SRT_Corou
1eaa0 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20  tine   Generate 
1eab0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61  a co-routine tha
1eac0 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20  t returns a new 
1ead0 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20  row of.**       
1eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1eaf0 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20  sults each time 
1eb00 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20  it is invoked.  
1eb10 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a  The entry point.
1eb20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1eb30 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
1eb40 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72  -routine is stor
1eb50 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70  ed in register p
1eb60 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a  Dest->iSDParm.**
1eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb80 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73       and the res
1eb90 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65  ult row is store
1eba0 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73  d in pDest->nDes
1ebb0 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20  t registers.**  
1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebd0 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68     starting with
1ebe0 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a   pDest->iSdst..*
1ebf0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62  *.**     SRT_Tab
1ec00 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  le       Store r
1ec10 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72  esults in tempor
1ec20 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1ec30 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
1ec40 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1ec50 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1ec60 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70  T_EphemTab excep
1ec70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65  t that the table
1ec80 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ec90 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d          is assum
1eca0 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65  ed to already be
1ecb0 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f   open.  SRT_Fifo
1ecc0 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20   has.**         
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1ece0 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65  additional prope
1ecf0 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c  rty of being abl
1ed00 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20  e to ignore.**  
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20     the ORDER BY 
1ed30 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
1ed40 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20    SRT_DistFifo  
1ed50 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1ed60 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74  in a temporary t
1ed70 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1ed80 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20              But 
1eda0 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61  also use tempora
1edb0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1edc0 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20  iSDParm+1 as.** 
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ede0 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20      a record of 
1edf0 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74  all prior result
1ee00 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79  s and ignore any
1ee10 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20   duplicate.**   
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee30 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65    rows.  Name me
1ee40 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20  ans:  "Distinct 
1ee50 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Fifo"..**.**    
1ee60 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1ee70 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1ee80 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1ee90 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1eea0 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20  (really.**      
1eeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1eec0 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e  n index).  Appen
1eed0 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  d a sequence num
1eee0 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20  ber so that all 
1eef0 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20  entries.**      
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1ef10 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a  re distinct..**.
1ef20 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51  **     SRT_DistQ
1ef30 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73  ueue   Store res
1ef40 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1ef50 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1ef60 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a  DParm only if.**
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef80 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65       the same re
1ef90 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62  cord has never b
1efa0 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72  een stored befor
1efb0 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20  e.  The.**      
1efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1efd0 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69  ndex at pDest->i
1efe0 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c  SDParm+1 hold al
1eff0 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a  l prior stores..
1f000 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55  */.#define SRT_U
1f010 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f  nion        1  /
1f020 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1f030 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
1f040 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1f050 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32  T_Except       2
1f060 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75    /* Remove resu
1f070 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20  lt from a UNION 
1f080 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1f090 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
1f0a0 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20    3  /* Store 1 
1f0b0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1f0c0 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64   not empty */.#d
1f0d0 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72  efine SRT_Discar
1f0e0 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20  d      4  /* Do 
1f0f0 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73  not save the res
1f100 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f  ults anywhere */
1f110 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66  .#define SRT_Fif
1f120 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20  o         5  /* 
1f130 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1f140 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1f150 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1f160 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1f170 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c  Fifo     6  /* L
1f180 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75  ike SRT_Fifo, bu
1f190 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1f1a0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1f1b0 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1f1c0 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    7  /* Store re
1f1d0 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65  sult in an queue
1f1e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f1f0 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20  DistQueue    8  
1f200 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75  /* Like SRT_Queu
1f210 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  e, but unique re
1f220 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f  sults only */../
1f230 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1f240 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64  lause is ignored
1f250 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20   for all of the 
1f260 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
1f270 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62   IgnorableOrderb
1f280 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29  y(X) ((X->eDest)
1f290 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29  <=SRT_DistQueue)
1f2a0 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75  ..#define SRT_Ou
1f2b0 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a  tput       9  /*
1f2c0 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77   Output each row
1f2d0 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1f2e0 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20  efine SRT_Mem   
1f2f0 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f        10  /* Sto
1f300 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d  re result in a m
1f310 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64  emory cell */.#d
1f320 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20  efine SRT_Set   
1f330 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f        11  /* Sto
1f340 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65  re results as ke
1f350 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1f360 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70  /.#define SRT_Ep
1f370 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a  hemTab    12  /*
1f380 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e   Create transien
1f390 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20  t tab and store 
1f3a0 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a  like SRT_Table *
1f3b0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f  /.#define SRT_Co
1f3c0 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a  routine   13  /*
1f3d0 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67   Generate a sing
1f3e0 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
1f3f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f400 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20  Table       14  
1f410 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1f420 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1f430 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1f440 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1f450 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
1f460 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77  ject describes w
1f470 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74  here to put of t
1f480 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a  he results of.**
1f490 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1f4a0 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ent..*/.struct S
1f4b0 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
1f4c0 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
1f4d0 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
1f4e0 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
1f4f0 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f  lts.  On of SRT_
1f500 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e  * above. */.  in
1f510 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
1f520 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65     /* A paramete
1f530 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44  r used by the eD
1f540 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74  est disposal met
1f550 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64  hod */.  int iSd
1f560 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
1f570 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77   Base register w
1f580 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65  here results are
1f590 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
1f5a0 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20  t nSdst;        
1f5b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f5c0 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
1f5d0 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
1f5e0 41 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f 2a  AffSdst;      /*
1f5f0 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77   Affinity used w
1f600 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53  hen eDest==SRT_S
1f610 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  et */.  ExprList
1f620 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20   *pOrderBy;  /* 
1f630 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20  Key columns for 
1f640 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52  SRT_Queue and SR
1f650 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d  T_DistQueue */.}
1f660 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20  ;../*.** During 
1f670 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  code generation 
1f680 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  of statements th
1f690 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e  at do inserts in
1f6a0 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  to AUTOINCREMENT
1f6b0 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20  .** tables, the 
1f6c0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d  following inform
1f6d0 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65  ation is attache
1f6e0 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75  d to the Table.u
1f6f0 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f  .autoInc.p.** po
1f700 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75  inter of each au
1f710 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c  toincrement tabl
1f720 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65  e to record some
1f730 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f   side informatio
1f740 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f  n that.** the co
1f750 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65  de generator nee
1f760 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  ds.  We have to 
1f770 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61  keep per-table a
1f780 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20  utoincrement.** 
1f790 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63  information in c
1f7a0 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20  ase inserts are 
1f7b0 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67  done within trig
1f7c0 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20  gers.  Triggers 
1f7d0 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c  do not.** normal
1f7e0 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  ly coordinate th
1f7f0 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20  eir activities, 
1f800 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74  but we do need t
1f810 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  o coordinate the
1f820 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20  .** loading and 
1f830 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e  saving of autoin
1f840 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74  crement informat
1f850 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ion..*/.struct A
1f860 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41  utoincInfo {.  A
1f870 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78  utoincInfo *pNex
1f880 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66  t;   /* Next inf
1f890 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73  o block in a lis
1f8a0 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f  t of them all */
1f8b0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
1f8c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1f8d0 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63  e this info bloc
1f8e0 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20  k refers to */. 
1f8f0 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
1f900 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1f910 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
1f920 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
1f930 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69  ding pTab */.  i
1f940 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20  nt regCtr;      
1f950 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72       /* Memory r
1f960 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1f970 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65  the rowid counte
1f980 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
1f990 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74  t least one inst
1f9a0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1f9b0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1f9c0 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
1f9d0 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ach.** trigger t
1f9e0 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
1f9f0 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
1fa00 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
1fa10 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
1fa20 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
1fa30 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
1fa40 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
1fa50 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
1fa60 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
1fa70 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
1fa80 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
1fa90 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
1faa0 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
1fab0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
1fac0 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
1fad0 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
1fae0 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
1faf0 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
1fb00 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
1fb10 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
1fb20 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
1fb30 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1fb40 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
1fb50 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
1fb60 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
1fb70 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
1fb80 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
1fb90 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1fba0 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
1fbb0 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
1fbc0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
1fbd0 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
1fbe0 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
1fbf0 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
1fc00 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1fc10 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
1fc20 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
1fc30 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1fc40 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
1fc50 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
1fc60 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
1fc70 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
1fc80 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  SERT.** statemen
1fc90 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20  ts). Similarly, 
1fca0 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  the TriggerPrg.a
1fcb0 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61  Colmask[1] varia
1fcc0 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  ble is set to.**
1fcd0 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a   a mask of new.*
1fce0 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79   columns used by
1fcf0 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
1fd00 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50  .struct TriggerP
1fd10 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a  rg {.  Trigger *
1fd20 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f  pTrigger;      /
1fd30 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70  * Trigger this p
1fd40 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64  rogram was coded
1fd50 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67   from */.  Trigg
1fd60 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20  erPrg *pNext;   
1fd70 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
1fd80 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67   in Parse.pTrigg
1fd90 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  erPrg list */.  
1fda0 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
1fdb0 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72  gram;   /* Progr
1fdc0 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  am implementing 
1fdd0 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20  pTrigger/orconf 
1fde0 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b  */.  int orconf;
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fe00 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1fe10 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20  ICT policy */.  
1fe20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b  u32 aColmask[2];
1fe30 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73          /* Masks
1fe40 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a   of old.*, new.*
1fe50 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65   columns accesse
1fe60 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  d */.};../*.** T
1fe70 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74  he yDbMask datat
1fe80 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d  ype for the bitm
1fe90 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63  ask of all attac
1fea0 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
1feb0 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
1fec0 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74  _ATTACHED>30.  t
1fed0 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1fee0 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51  char yDbMask[(SQ
1fef0 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1ff00 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e  D+9)/8];.# defin
1ff10 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1ff20 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38  )    (((M)[(I)/8
1ff30 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21  ]&(1<<((I)&7)))!
1ff40 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1ff50 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1ff60 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a  memset((M),0,siz
1ff70 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65  eof(M)).# define
1ff80 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1ff90 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d      (M)[(I)/8]|=
1ffa0 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64  (1<<((I)&7)).# d
1ffb0 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1ffc0 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33  ero(M)   sqlite3
1ffd0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1ffe0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1fff0 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71  NonZero(M)   (sq
20000 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
20010 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ro(M)==0).#else.
20020 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
20030 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a  ed int yDbMask;.
20040 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
20050 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
20060 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  )&(((yDbMask)1)<
20070 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66  <(I)))!=0).# def
20080 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
20090 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64  )      (M)=0.# d
200a0 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
200b0 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28  M,I)     (M)|=((
200c0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
200d0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
200e0 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kAllZero(M)   (M
200f0 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  )==0.# define Db
20100 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
20110 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a   (M)!=0.#endif..
20120 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72  /*.** An SQL par
20130 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20  ser context.  A 
20140 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72  copy of this str
20150 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
20160 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20   through.** the 
20170 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20  parser and down 
20180 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72  into all the par
20190 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69  ser action routi
201a0 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
201b0 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69  * carry around i
201c0 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
201d0 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
201e0 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a   entire parse..*
201f0 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75  *.** The structu
20200 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  re is divided in
20210 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57  to two parts.  W
20220 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61  hen the parser a
20230 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72  nd code.** gener
20240 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c  ate call themsel
20250 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c  ves recursively,
20260 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
20270 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65  of the structure
20280 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  .** is constant 
20290 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70  but the second p
202a0 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20  art is reset at 
202b0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  the beginning an
202c0 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68  d end of.** each
202d0 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a   recursion..**.*
202e0 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b  * The nTableLock
202f0 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20   and aTableLock 
20300 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
20310 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73  ly used if the s
20320 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66  hared-cache.** f
20330 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
20340 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64  d (if sqlite3Tsd
20350 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74  ()->useSharedDat
20360 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79  a is true). They
20370 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
20380 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66  store the set of
20390 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71   table-locks req
203a0 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61  uired by the sta
203b0 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20  tement being.** 
203c0 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69  compiled. Functi
203d0 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  on sqlite3TableL
203e0 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f  ock() is used to
203f0 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20   add entries to 
20400 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a  the.** list..*/.
20410 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20  struct Parse {. 
20420 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
20430 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69        /* The mai
20440 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63  n database struc
20450 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ture */.  char *
20460 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f  zErrMsg;       /
20470 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  * An error messa
20480 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56  ge */.  Vdbe *pV
20490 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dbe;         /* 
204a0 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78  An engine for ex
204b0 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65  ecuting database
204c0 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69   bytecode */.  i
204d0 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
204e0 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f      /* Return co
204f0 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f  de from executio
20500 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d  n */.  u8 colNam
20510 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54  esSet;      /* T
20520 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c  RUE after OP_Col
20530 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e  umnName has been
20540 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65   issued to pVdbe
20550 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63   */.  u8 checkSc
20560 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61  hema;      /* Ca
20570 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b  uses schema cook
20580 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61  ie check after a
20590 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20  n error */.  u8 
205a0 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20  nested;         
205b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
205c0 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74  ested calls to t
205d0 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67  he parser/code g
205e0 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38  enerator */.  u8
205f0 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20   nTempReg;      
20600 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20610 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
20620 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b  ers in aTempReg[
20630 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74  ] */.  u8 isMult
20640 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54  iWrite;     /* T
20650 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
20660 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65   may modify/inse
20670 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  rt multiple rows
20680 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72   */.  u8 mayAbor
20690 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  t;         /* Tr
206a0 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
206b0 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  may throw an ABO
206c0 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  RT exception */.
206d0 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64    u8 hasCompound
206e0 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74  ;      /* Need t
206f0 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74  o invoke convert
20700 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
20710 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20  Subquery() */.  
20720 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  u8 okConstFactor
20730 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61  ;    /* OK to fa
20740 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
20750 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ts */.  u8 disab
20760 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20  leLookaside; /* 
20770 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  Number of times 
20780 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65  lookaside has be
20790 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20  en disabled */. 
207a0 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
207b0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
207c0 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
207d0 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
207e0 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
207f0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
20800 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
20810 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
20820 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
20830 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
20840 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
20850 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
20860 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
20870 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20880 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
20890 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
208a0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
208b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
208c0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
208d0 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
208e0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c  r */.  int nOpAl
208f0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  loc;        /* N
20900 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
20910 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
20920 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
20930 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20   szOpAlloc;     
20940 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65    /* Bytes of me
20950 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63  mory space alloc
20960 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
20970 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  p[] */.  int iSe
20980 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  lfTab;        /*
20990 20 54 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65   Table associate
209a0 64 20 77 69 74 68 20 61 6e 20 69 6e 64 65 78 20  d with an index 
209b0 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65 67 61  on expr, or nega
209c0 74 69 76 65 0a 20 20 20 20 20 20 20 20 20 20 20  tive.           
209d0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f              ** o
209e0 66 20 74 68 65 20 62 61 73 65 20 72 65 67 69 73  f the base regis
209f0 74 65 72 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ter during check
20a00 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65 76 61 6c  -constraint eval
20a10 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
20a20 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
20a30 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75  mber of labels u
20a40 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c  sed */.  int *aL
20a50 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  abel;         /*
20a60 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   Space to hold t
20a70 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45  he labels */.  E
20a80 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45  xprList *pConstE
20a90 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  xpr;/* Constant 
20aa0 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
20ab0 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
20ac0 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
20ad0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
20ae0 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
20af0 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d  parsed */.  yDbM
20b00 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
20b10 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
20b20 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
20b30 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
20b40 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
20b50 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
20b60 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
20b70 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
20b80 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  es */.  int regR
20b90 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  owid;        /* 
20ba0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
20bb0 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45   rowid of CREATE
20bc0 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a   TABLE entry */.
20bd0 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20    int regRoot;  
20be0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
20bf0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20  er holding root 
20c00 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
20c10 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  new objects */. 
20c20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
20c30 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
20c40 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
20c50 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
20c60 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e  -program */.  in
20c70 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20  t nSelect;      
20c80 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20c90 53 45 4c 45 43 54 20 73 74 6d 74 73 2e 20 43 6f  SELECT stmts. Co
20ca0 75 6e 74 65 72 20 66 6f 72 20 53 65 6c 65 63 74  unter for Select
20cb0 2e 73 65 6c 49 64 20 2a 2f 0a 23 69 66 6e 64 65  .selId */.#ifnde
20cc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
20cd0 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
20ce0 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
20cf0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20d00 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
20d10 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
20d20 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
20d30 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
20d40 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
20d50 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
20d60 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69  /.#endif.  Autoi
20d70 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
20d80 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
20d90 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
20da0 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  NT counters */. 
20db0 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65   Parse *pTopleve
20dc0 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73  l;    /* Parse s
20dd0 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69  tructure for mai
20de0 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55  n program (or NU
20df0 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  LL) */.  Table *
20e00 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a  pTriggerTab;  /*
20e10 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20   Table triggers 
20e20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
20e30 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  for */.  int add
20e40 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a  rCrTab;       /*
20e50 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43   Address of OP_C
20e60 72 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64  reateBtree opcod
20e70 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c  e on CREATE TABL
20e80 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72  E */.  u32 nQuer
20e90 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45  yLoop;      /* E
20ea0 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  st number of ite
20eb0 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65  rations of a que
20ec0 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20  ry (10*log2(N)) 
20ed0 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b  */.  u32 oldmask
20ee0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
20ef0 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
20f00 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
20f10 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20  .  u32 newmask; 
20f20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
20f30 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
20f40 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
20f50 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20   u8 eTriggerOp; 
20f60 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41        /* TK_UPDA
20f70 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72  TE, TK_INSERT or
20f80 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20   TK_DELETE */.  
20f90 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20  u8 eOrconf;     
20fa0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
20fb0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
20fc0 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73  cy for trigger s
20fd0 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  teps */.  u8 dis
20fe0 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f  ableTriggers;  /
20ff0 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c  * True to disabl
21000 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20  e triggers */.. 
21010 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
21020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
21060 2a 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d  * Fields above m
21070 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
21080 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65  ed to zero.  The
21090 20 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c   fields that fol
210a0 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74  low,.  ** down t
210b0 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  o the beginning 
210c0 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65  of the recursive
210d0 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74   section, do not
210e0 20 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a   need to be.  **
210f0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20   initialized as 
21100 74 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74  they will be set
21110 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73   before being us
21120 65 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72  ed.  The boundar
21130 79 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d  y is.  ** determ
21140 69 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66  ined by offsetof
21150 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29  (Parse,aTempReg)
21160 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
21170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
211b0 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
211c0 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f  8];        /* Ho
211d0 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74  lding area for t
211e0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
211f0 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e  rs */.  Token sN
21200 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  ameToken;       
21210 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e  /* Token with un
21220 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61  qualified schema
21230 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a   object name */.
21240 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
21250 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
21290 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
212a0 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
212b0 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
212c0 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
212d0 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
212e0 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
212f0 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
21300 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
21310 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
21320 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
21330 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c  ffsetof(Parse,sL
21340 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65  astToken) so the
21350 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c   sLastToken fiel
21360 64 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20  d must be the.  
21370 2a 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69  ** first field i
21380 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  n the recursive 
21390 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  region..  ******
213a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213e0 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61  **/..  Token sLa
213f0 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  stToken;       /
21400 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e  * The last token
21410 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56   parsed */.  ynV
21420 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  ar nVar;        
21430 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21440 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65   of '?' variable
21450 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51  s seen in the SQ
21460 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38  L so far */.  u8
21470 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20   iPkSortOrder;  
21480 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f          /* ASC o
21490 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47  r DESC for INTEG
214a0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  ER PRIMARY KEY *
214b0 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20  /.  u8 explain; 
214c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
214d0 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50   True if the EXP
214e0 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75  LAIN flag is fou
214f0 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20  nd on the query 
21500 2a 2f 0a 23 69 66 20 21 28 64 65 66 69 6e 65 64  */.#if !(defined
21510 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
21520 54 55 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65  TUALTABLE) && de
21530 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
21540 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 29 0a 20  T_ALTERTABLE)). 
21550 20 75 38 20 65 50 61 72 73 65 4d 6f 64 65 3b 20   u8 eParseMode; 
21560 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 41             /* PA
21570 52 53 45 5f 4d 4f 44 45 5f 58 58 58 20 63 6f 6e  RSE_MODE_XXX con
21580 73 74 61 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  stant */.#endif.
21590 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
215a0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
215b0 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
215c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
215d0 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
215e0 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
215f0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
21600 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
21610 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
21620 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74  sion tree height
21630 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d   of current sub-
21640 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65  select */.#ifnde
21650 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
21660 50 4c 41 49 4e 0a 20 20 69 6e 74 20 61 64 64 72  PLAIN.  int addr
21670 45 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  Explain;        
21680 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
21690 63 75 72 72 65 6e 74 20 4f 50 5f 45 78 70 6c 61  current OP_Expla
216a0 69 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  in opcode */.#en
216b0 64 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c  dif.  VList *pVL
216c0 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
216d0 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65  /* Mapping betwe
216e0 65 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  en variable name
216f0 73 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f  s and numbers */
21700 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70  .  Vdbe *pReprep
21710 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  are;         /* 
21720 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61  VM being reprepa
21730 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72  red (sqlite3Repr
21740 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f  epare()) */.  co
21750 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b  nst char *zTail;
21760 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53          /* All S
21770 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
21780 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
21790 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
217a0 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
217b0 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65        /* A table
217c0 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
217d0 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
217e0 4c 45 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  LE */.  Index *p
217f0 4e 65 77 49 6e 64 65 78 3b 20 20 20 20 20 20 20  NewIndex;       
21800 20 20 2f 2a 20 41 6e 20 69 6e 64 65 78 20 62 65    /* An index be
21810 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
21820 62 79 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  by CREATE INDEX 
21830 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
21840 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
21850 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
21860 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
21870 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
21880 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
21890 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
218a0 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
218b0 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
218c0 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e  allbacks */.#ifn
218d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
218e0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54  VIRTUALTABLE.  T
218f0 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20  oken sArg;      
21900 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
21910 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d  lete text of a m
21920 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a  odule argument *
21930 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74  /.  Table **apVt
21940 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a  abLock;       /*
21950 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74   Pointer to virt
21960 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69  ual tables needi
21970 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65  ng locking */.#e
21980 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a  ndif.  Table *pZ
21990 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20  ombieTab;       
219a0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c   /* List of Tabl
219b0 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c  e objects to del
219c0 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67  ete after code g
219d0 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  en */.  TriggerP
219e0 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b  rg *pTriggerPrg;
219f0 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
21a00 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65   of coded trigge
21a10 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  rs */.  With *pW
21a20 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  ith;            
21a30 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54    /* Current WIT
21a40 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
21a50 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  L */.  With *pWi
21a60 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20  thToFree;       
21a70 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57 49   /* Free this WI
21a80 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65  TH object at the
21a90 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73   end of the pars
21aa0 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e */.#ifndef SQL
21ab0 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
21ac0 42 4c 45 0a 20 20 52 65 6e 61 6d 65 54 6f 6b 65  BLE.  RenameToke
21ad0 6e 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20 20  n *pRename;     
21ae0 2f 2a 20 54 6f 6b 65 6e 73 20 73 75 62 6a 65 63  /* Tokens subjec
21af0 74 20 74 6f 20 72 65 6e 61 6d 69 6e 67 20 62 79  t to renaming by
21b00 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a   ALTER TABLE */.
21b10 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 64 65 66 69  #endif.};..#defi
21b20 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f  ne PARSE_MODE_NO
21b30 52 4d 41 4c 20 20 20 20 20 20 20 20 30 0a 23 64  RMAL        0.#d
21b40 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45  efine PARSE_MODE
21b50 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 20 31  _DECLARE_VTAB  1
21b60 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d  .#define PARSE_M
21b70 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d  ODE_RENAME_COLUM
21b80 4e 20 32 0a 23 64 65 66 69 6e 65 20 50 41 52 53  N 2.#define PARS
21b90 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 54 41  E_MODE_RENAME_TA
21ba0 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a 2a 20 53 69  BLE  3../*.** Si
21bb0 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73  zes and pointers
21bc0 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72 74   of various part
21bd0 73 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f  s of the Parse o
21be0 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  bject..*/.#defin
21bf0 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f  e PARSE_HDR_SZ o
21c00 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 54  ffsetof(Parse,aT
21c10 65 6d 70 52 65 67 29 20 2f 2a 20 52 65 63 75 72  empReg) /* Recur
21c20 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61 43  sive part w/o aC
21c30 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e  olCache*/.#defin
21c40 65 20 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  e PARSE_RECURSE_
21c50 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  SZ offsetof(Pars
21c60 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20  e,sLastToken)   
21c70 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61   /* Recursive pa
21c80 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  rt */.#define PA
21c90 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a  RSE_TAIL_SZ (siz
21ca0 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53 45  eof(Parse)-PARSE
21cb0 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20  _RECURSE_SZ) /* 
21cc0 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70 61  Non-recursive pa
21cd0 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  rt */.#define PA
21ce0 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28 63  RSE_TAIL(X) (((c
21cf0 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45 5f  har*)(X))+PARSE_
21d00 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20  RECURSE_SZ)  /* 
21d10 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c 20  Pointer to tail 
21d20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  */../*.** Return
21d30 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
21d40 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
21d50 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
21d60 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
21d70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21d80 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
21d90 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
21da0 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
21db0 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
21dc0 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
21dd0 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3d 3d 50 41  ->eParseMode==PA
21de0 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52 45  RSE_MODE_DECLARE
21df0 5f 56 54 41 42 29 0a 23 65 6e 64 69 66 0a 0a 23  _VTAB).#endif..#
21e00 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
21e10 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
21e20 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  E).  #define IN_
21e30 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 30 0a  RENAME_OBJECT 0.
21e40 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
21e50 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54  IN_RENAME_OBJECT
21e60 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65   (pParse->eParse
21e70 4d 6f 64 65 3e 3d 50 41 52 53 45 5f 4d 4f 44 45  Mode>=PARSE_MODE
21e80 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 0a  _RENAME_COLUMN).
21e90 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
21ea0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
21eb0 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20 26 26  VIRTUALTABLE) &&
21ec0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
21ed0 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29  OMIT_ALTERTABLE)
21ee0 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 53 50  .  #define IN_SP
21ef0 45 43 49 41 4c 5f 50 41 52 53 45 20 30 0a 23 65  ECIAL_PARSE 0.#e
21f00 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
21f10 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20 28  _SPECIAL_PARSE (
21f20 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f  pParse->eParseMo
21f30 64 65 21 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 4e  de!=PARSE_MODE_N
21f40 4f 52 4d 41 4c 29 0a 23 65 6e 64 69 66 0a 0a 2f  ORMAL).#endif../
21f50 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
21f60 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
21f70 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
21f80 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
21f90 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
21fa0 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
21fb0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
21fc0 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
21fd0 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
21fe0 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
21ff0 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
22000 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
22010 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
22020 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
22030 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
22040 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
22050 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
22060 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
22070 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
22080 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
22090 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
220a0 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
220b0 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20   opcodes..**.** 
220c0 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
220d0 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
220e0 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
220f0 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
22100 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46  G    == SQLITE_F
22110 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20  UNC_LENGTH.**   
22120 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
22130 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46  G    == SQLITE_F
22140 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20  UNC_TYPEOF.**   
22150 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
22160 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55       == BTREE_BU
22170 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46  LKLOAD.**    OPF
22180 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
22190 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45   == BTREE_SEEK_E
221a0 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46  Q.**    OPFLAG_F
221b0 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  ORDELETE    == B
221c0 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a  TREE_FORDELETE.*
221d0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45  *    OPFLAG_SAVE
221e0 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45  POSITION == BTRE
221f0 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a  E_SAVEPOSITION.*
22200 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44  *    OPFLAG_AUXD
22210 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45  ELETE    == BTRE
22220 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23  E_AUXDELETE.*/.#
22230 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43  define OPFLAG_NC
22240 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31  HANGE       0x01
22250 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74      /* OP_Insert
22260 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  : Set to update 
22270 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20  db->nChange */. 
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222a0 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64      /* Also used
222b0 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20   in P2 (not P5) 
222c0 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  of OP_Delete */.
222d0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
222e0 4f 43 48 4e 47 20 20 20 20 20 20 20 20 30 78 30  OCHNG        0x0
222f0 31 20 20 20 20 2f 2a 20 4f 50 5f 56 43 6f 6c 75  1    /* OP_VColu
22300 6d 6e 20 6e 6f 63 68 61 6e 67 65 20 66 6f 72 20  mn nochange for 
22310 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
22320 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20  e OPFLAG_EPHEM  
22330 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
22340 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68  * OP_Column: Eph
22350 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73  emeral output is
22360 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f   ok */.#define O
22370 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
22380 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53      0x20    /* S
22390 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
223a0 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64  >lastRowid */.#d
223b0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55  efine OPFLAG_ISU
223c0 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20  PDATE      0x04 
223d0 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e     /* This OP_In
223e0 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55  sert is an sql U
223f0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
22400 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20   OPFLAG_APPEND  
22410 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a        0x08    /*
22420 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20   This is likely 
22430 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20  to be an append 
22440 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22450 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
22460 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74  0x10    /* Try t
22470 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69  o avoid a seek i
22480 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20  n BtreeInsert() 
22490 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
224a0 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20  G_ISNOOP        
224b0 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x40    /* OP_De
224c0 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70  lete does pre-up
224d0 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a  date-hook only *
224e0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
224f0 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30  _LENGTHARG     0
22500 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x40    /* OP_Col
22510 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
22520 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64  r length() */.#d
22530 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50  efine OPFLAG_TYP
22540 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20  EOFARG     0x80 
22550 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
22560 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79  only used for ty
22570 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  peof() */.#defin
22580 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  e OPFLAG_BULKCSR
22590 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
225a0 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64  * OP_Open** used
225b0 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75   to open bulk cu
225c0 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rsor */.#define 
225d0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
225e0 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
225f0 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72  OP_Open** cursor
22600 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e   uses EQ seek on
22610 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
22620 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
22630 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50     0x08    /* OP
22640 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65  _Open should use
22650 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45   BTREE_FORDELETE
22660 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22670 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20  AG_P2ISREG      
22680 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74   0x10    /* P2 t
22690 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61  o OP_Open** is a
226a0 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
226b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
226c0 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20  AG_PERMUTE      
226d0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
226e0 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20  ompare: use the 
226f0 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23  permutation */.#
22700 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41  define OPFLAG_SA
22710 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32  VEPOSITION  0x02
22720 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
22730 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63 75  /Insert: save cu
22740 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66  rsor pos */.#def
22750 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  ine OPFLAG_AUXDE
22760 4c 45 54 45 20 20 20 20 20 30 78 30 34 20 20 20  LETE     0x04   
22770 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69   /* OP_Delete: i
22780 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45  ndex in a DELETE
22790 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f   op */.#define O
227a0 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47  PFLAG_NOCHNG_MAG
227b0 49 43 20 20 30 78 36 64 20 20 20 20 2f 2a 20 4f  IC  0x6d    /* O
227c0 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 73 65  P_MakeRecord: se
227d0 72 69 61 6c 74 79 70 65 20 31 30 20 69 73 20 6f  rialtype 10 is o
227e0 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  k */../*. * Each
227f0 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
22800 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
22810 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
22820 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
22830 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
22840 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69  igger.. *. * Poi
22850 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
22860 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
22870 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
22880 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
22890 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
228a0 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
228b0 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
228c0 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
228d0 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20 20  sents the. *    
228e0 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20  database). This 
228f0 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73  allows Trigger s
22900 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20  tructures to be 
22910 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d  retrieved by nam
22920 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69  e.. * 2. All tri
22930 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ggers associated
22940 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74   with a single t
22950 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  able form a link
22960 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74  ed list, using t
22970 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d  he. *    pNext m
22980 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20  ember of struct 
22990 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74  Trigger. A point
229a0 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
229b0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20  element of the. 
229c0 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74  *    linked list
229d0 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68   is stored as th
229e0 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d  e "pTrigger" mem
229f0 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63  ber of the assoc
22a00 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75  iated. *    stru
22a10 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20  ct Table.. *. * 
22a20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  The "step_list" 
22a30 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f  member points to
22a40 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
22a50 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c  nt of a linked l
22a60 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e  ist. * containin
22a70 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
22a80 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61  ents specified a
22a90 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  s the trigger pr
22aa0 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63  ogram.. */.struc
22ab0 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68  t Trigger {.  ch
22ac0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
22ad0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d        /* The nam
22ae0 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  e of the trigger
22af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b00 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61          */.  cha
22b10 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20  r *table;       
22b20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c       /* The tabl
22b30 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
22b40 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61  ch the trigger a
22b50 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f  pplies */.  u8 o
22b60 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
22b70 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
22b80 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
22b90 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20  TE, TK_INSERT   
22ba0 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72        */.  u8 tr
22bb0 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  _tm;            
22bc0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49     /* One of TRI
22bd0 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49  GGER_BEFORE, TRI
22be0 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20  GGER_AFTER */.  
22bf0 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20  Expr *pWhen;    
22c00 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
22c10 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68  HEN clause of th
22c20 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61  e expression (ma
22c30 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20  y be NULL) */.  
22c40 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73  IdList *pColumns
22c50 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ;       /* If th
22c60 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20  is is an UPDATE 
22c70 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  OF <column-list>
22c80 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20   trigger,.      
22c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ca0 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75         the <colu
22cb0 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72  mn-list> is stor
22cc0 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  ed here */.  Sch
22cd0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
22ce0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
22cf0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
22d00 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d  igger */.  Schem
22d10 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20  a *pTabSchema;  
22d20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
22d30 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
22d40 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  e */.  TriggerSt
22d50 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f  ep *step_list; /
22d60 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74  * Link list of t
22d70 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73  rigger program s
22d80 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20  teps            
22d90 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
22da0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
22db0 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73   Next trigger as
22dc0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
22dd0 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
22de0 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69  *.** A trigger i
22df0 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52  s either a BEFOR
22e00 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72  E or an AFTER tr
22e10 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c  igger.  The foll
22e20 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a  owing constants.
22e30 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  ** determine whi
22e40 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ch..**.** If the
22e50 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20  re are multiple 
22e60 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69  triggers, you mi
22e70 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f  ght of some BEFO
22e80 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45  RE and some AFTE
22e90 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61  R..** In that ca
22ea0 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e  ses, the constan
22eb0 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20  ts below can be 
22ec0 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a  ORed together..*
22ed0 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  /.#define TRIGGE
22ee0 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66  R_BEFORE  1.#def
22ef0 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45  ine TRIGGER_AFTE
22f00 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20  R   2../*. * An 
22f10 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75  instance of stru
22f20 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69  ct TriggerStep i
22f30 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
22f40 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61  a single SQL sta
22f50 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69  tement. * that i
22f60 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72  s a part of a tr
22f70 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
22f80 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f  *. * Instances o
22f90 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
22fa0 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20  Step are stored 
22fb0 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b  in a singly link
22fc0 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a  ed list (linked.
22fd0 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e   * using the "pN
22fe0 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66  ext" member) ref
22ff0 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22  erenced by the "
23000 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
23010 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73 6f  r of the. * asso
23020 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
23030 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
23040 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
23050 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
23060 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
23070 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
23080 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
23090 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22  .. *. * The "op"
230a0 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65   member indicate
230b0 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  s whether this i
230c0 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49  s a "DELETE", "I
230d0 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22  NSERT", "UPDATE"
230e0 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20   or. * "SELECT" 
230f0 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d  statement. The m
23100 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f  eanings of the o
23110 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20  ther members is 
23120 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
23130 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f  e. * value of "o
23140 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
23150 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
23160 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
23170 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
23180 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
23190 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
231a0 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
231b0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
231c0 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
231d0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
231e0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
231f0 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
23200 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
23210 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
23220 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
23230 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
23240 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
23250 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
23260 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
23270 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
23280 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
23290 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
232a0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
232b0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
232c0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
232d0 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
232e0 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
232f0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
23300 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
23310 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
23320 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
23330 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
23340 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23350 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
23360 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65   this stores the
23370 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f   column-names to
23380 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20   be. *          
23390 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74      inserted int
233a0 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  o.. *. * (op == 
233b0 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54  TK_DELETE). * zT
233c0 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
233d0 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
233e0 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20  table to delete 
233f0 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20  from.. * pWhere 
23400 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
23410 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45  clause of the DE
23420 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
23430 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
23440 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
23450 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
23460 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  LL.. *. * (op ==
23470 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a   TK_UPDATE). * z
23480 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
23490 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
234a0 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
234b0 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
234c0 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
234d0 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
234e0 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
234f0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
23500 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
23510 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
23520 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
23530 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
23540 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
23550 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
23560 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
23580 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
23590 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
235a0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
235b0 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
235c0 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
235d0 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  . *. */.struct T
235e0 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
235f0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
23600 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
23610 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
23620 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
23630 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
23640 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
23650 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
23660 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
23670 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
23680 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
23690 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
236a0 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
236b0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
236c0 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
236d0 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53  statement or RHS
236e0 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   of INSERT INTO 
236f0 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20  SELECT ... */.  
23700 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20  char *zTarget;  
23710 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74       /* Target t
23720 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c  able for DELETE,
23730 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20   UPDATE, INSERT 
23740 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
23750 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  e;        /* The
23760 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
23770 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  r DELETE or UPDA
23780 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78  TE steps */.  Ex
23790 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73  prList *pExprLis
237a0 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65  t; /* SET clause
237b0 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 20   for UPDATE */. 
237c0 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74   IdList *pIdList
237d0 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  ;     /* Column 
237e0 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54  names for INSERT
237f0 20 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a 70 55   */.  Upsert *pU
23800 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 55 70  psert;     /* Up
23810 73 65 72 74 20 63 6c 61 75 73 65 73 20 6f 6e 20  sert clauses on 
23820 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63  an INSERT */.  c
23830 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20  har *zSpan;     
23840 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
23850 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68 69 73  SQL text of this
23860 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72   command */.  Tr
23870 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74  iggerStep *pNext
23880 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68  ;  /* Next in th
23890 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20  e link-list */. 
238a0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c   TriggerStep *pL
238b0 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c  ast;  /* Last el
238c0 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69  ement in link-li
238d0 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73  st. Valid for 1s
238e0 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d  t elem only */.}
238f0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
23900 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
23910 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
23920 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68  ation used by th
23930 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a  e sqliteFix....*
23940 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68  * routines as th
23950 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73  ey walk the pars
23960 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64  e tree to make d
23970 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63  atabase referenc
23980 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a  es.** explicit..
23990 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
239a0 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
239b0 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
239c0 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
239d0 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
239e0 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
239f0 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
23a00 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
23a10 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
23a20 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
23a30 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
23a40 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61  ema */.  int bVa
23a50 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20  rOnly;       /* 
23a60 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62  Check for variab
23a70 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e  le references on
23a80 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ly */.  const ch
23a90 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
23aa0 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
23ab0 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
23ac0 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
23ad0 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
23ae0 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
23af0 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
23b00 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
23b10 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
23b20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
23b30 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
23b40 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
23b50 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
23b60 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
23b70 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
23b80 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
23b90 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
23ba0 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
23bb0 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
23bc0 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
23bd0 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
23be0 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
23bf0 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
23c00 74 20 73 71 6c 69 74 65 33 5f 73 74 72 20 7b 0a  t sqlite3_str {.
23c10 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
23c20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e         /* Option
23c30 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20  al database for 
23c40 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20  lookaside.  Can 
23c50 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61  be NULL */.  cha
23c60 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20  r *zText;       
23c70 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
23c80 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72  collected so far
23c90 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f   */.  u32  nAllo
23ca0 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d  c;         /* Am
23cb0 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c  ount of space al
23cc0 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74  located in zText
23cd0 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c   */.  u32  mxAll
23ce0 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  oc;        /* Ma
23cf0 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c  ximum allowed al
23d00 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72  location.  0 for
23d10 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65   no malloc usage
23d20 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72   */.  u32  nChar
23d30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  ;          /* Le
23d40 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
23d50 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  ng so far */.  u
23d60 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20  8   accError;   
23d70 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f      /* SQLITE_NO
23d80 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45 5f 54 4f  MEM or SQLITE_TO
23d90 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70  OBIG */.  u8   p
23da0 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f  rintfFlags;    /
23db0 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20  * SQLITE_PRINTF 
23dc0 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  flags below */.}
23dd0 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
23de0 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c  _PRINTF_INTERNAL
23df0 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e   0x01  /* Intern
23e00 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76  al-use-only conv
23e10 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a  erters allowed *
23e20 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
23e30 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20  _PRINTF_SQLFUNC 
23e40 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20 66 75   0x02  /* SQL fu
23e50 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73  nction arguments
23e60 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a   to VXPrintf */.
23e70 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
23e80 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30  RINTF_MALLOCED 0
23e90 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20  x04  /* True if 
23ea0 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63 61 74  xText is allocat
23eb0 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65  ed space */..#de
23ec0 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28  fine isMalloced(
23ed0 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69 6e 74  X)  (((X)->print
23ee0 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  fFlags & SQLITE_
23ef0 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29  PRINTF_MALLOCED)
23f00 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70  !=0).../*.** A p
23f10 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
23f20 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
23f30 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20   to communicate 
23f40 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66  information.** f
23f50 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20  rom sqlite3Init 
23f60 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65  and OP_ParseSche
23f70 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69  ma into the sqli
23f80 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e  te3InitCallback.
23f90 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
23fa0 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ct {.  sqlite3 *
23fb0 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
23fc0 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67  e database being
23fd0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
23fe0 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73    char **pzErrMs
23ff0 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d  g;    /* Error m
24000 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65  essage stored he
24010 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  re */.  int iDb;
24020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
24030 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61   for main databa
24040 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c  se.  1 for TEMP,
24050 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65   2.. for ATTACHe
24060 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  d */.  int rc;  
24070 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
24080 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64  sult code stored
24090 20 68 65 72 65 20 2a 2f 0a 20 20 75 33 32 20 6d   here */.  u32 m
240a0 49 6e 69 74 46 6c 61 67 73 3b 20 20 20 20 20 2f  InitFlags;     /
240b0 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 6c  * Flags controll
240c0 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ing error messag
240d0 65 73 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61  es */.} InitData
240e0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
240f0 20 76 61 6c 75 65 73 20 66 6f 72 20 6d 49 6e 69   values for mIni
24100 74 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e  tFlags.*/.#defin
24110 65 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72  e INITFLAG_Alter
24120 54 61 62 6c 65 20 20 20 30 78 30 30 30 31 20 20  Table   0x0001  
24130 2f 2a 20 54 68 69 73 20 69 73 20 61 20 72 65 70  /* This is a rep
24140 61 72 73 65 20 61 66 74 65 72 20 41 4c 54 45 52  arse after ALTER
24150 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   TABLE */../*.**
24160 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
24170 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
24180 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
24190 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
241a0 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
241b0 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
241c0 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
241d0 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
241e0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
241f0 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
24200 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
24210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24220 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
24230 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
24240 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d   */.  int bCoreM
24250 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
24260 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24270 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
24280 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
24290 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
242a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
242b0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
242c0 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
242d0 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69  /.  int bOpenUri
242e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
242f0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
24300 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e   interpret filen
24310 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a  ames as URIs */.
24320 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20    int bUseCis;  
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24340 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72      /* Use cover
24350 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20  ing indices for 
24360 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20  full-scans */.  
24370 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63  int bSmallMalloc
24380 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24390 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67 65    /* Avoid large
243a0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
243b0 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  ons if true */. 
243c0 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20   int mxStrlen;  
243d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243e0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74     /* Maximum st
243f0 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
24400 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70   int neverCorrup
24410 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24420 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69     /* Database i
24430 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f  s always well-fo
24440 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  rmed */.  int sz
24450 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
24460 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
24470 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
24480 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a   buffer size */.
24490 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65    int nLookaside
244a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
244b0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
244c0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
244d0 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  count */.  int n
244e0 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20  StmtSpill;      
244f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24500 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69  Stmt-journal spi
24510 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73  ll-to-disk thres
24520 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65  hold */.  sqlite
24530 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b  3_mem_methods m;
24540 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
24550 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20  ow-level memory 
24560 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72  allocation inter
24570 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
24580 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
24590 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c  mutex;      /* L
245a0 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69  ow-level mutex i
245b0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
245c0 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
245d0 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20  hods2 pcache2;  
245e0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67  /* Low-level pag
245f0 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63  e-cache interfac
24600 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65  e */.  void *pHe
24610 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
24620 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70           /* Heap
24630 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a   storage space *
24640 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20  /.  int nHeap;  
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24660 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
24670 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e   pHeap[] */.  in
24680 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20  t mnReq, mxReq; 
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246a0 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68  /* Min and max h
246b0 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a  eap requests siz
246c0 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  es */.  sqlite3_
246d0 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20  int64 szMmap;   
246e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61            /* mma
246f0 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70  p() space per op
24700 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c  en file */.  sql
24710 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61  ite3_int64 mxMma
24720 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
24730 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  * Maximum value 
24740 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20  for szMmap */.  
24750 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20  void *pPage;    
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24770 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
24780 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
24790 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  szPage;         
247a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
247b0 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61   Size of each pa
247c0 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  ge in pPage[] */
247d0 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20  .  int nPage;   
247e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
24800 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65  f pages in pPage
24810 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61  [] */.  int mxPa
24820 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20  rserStack;      
24830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78            /* max
24840 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68  imum depth of th
24850 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a  e parser stack *
24860 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61  /.  int sharedCa
24870 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  cheEnabled;     
24880 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66        /* true if
24890 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
248a0 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  de enabled */.  
248b0 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20  u32 szPma;      
248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248d0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72    /* Maximum Sor
248e0 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a  ter PMA size */.
248f0 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
24900 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
24910 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
24920 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
24930 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
24940 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
24950 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
24960 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24980 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
24990 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
249a0 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
249b0 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
249c0 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
249d0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
249e0 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
249f0 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
24a00 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
24a10 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
24a20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24a30 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
24a40 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
24a50 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
24a60 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
24a70 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
24a80 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
24a90 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
24aa0 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
24ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ac0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
24ad0 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
24ae0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  zed */.  int nRe
24af0 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
24b00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
24b10 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
24b20 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
24b30 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
24b40 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
24b50 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
24b60 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
24b70 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f  ialize() */.  vo
24b80 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
24b90 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
24ba0 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
24bb0 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
24bc0 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
24bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24be0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
24bf0 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
24c00 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
24c10 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
24c20 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
24c30 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
24c40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
24c50 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
24c60 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69  ogArg;.#endif.#i
24c70 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
24c80 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54  _COVERAGE.  /* T
24c90 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
24ca0 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55  lback (if not NU
24cb0 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f  LL) is invoked o
24cc0 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61  n every VDBE bra
24cd0 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  nch.  ** operati
24ce0 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c  on.  Set the cal
24cf0 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49  lback using SQLI
24d00 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
24d10 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a  _COVERAGE..  */.
24d20 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72    void (*xVdbeBr
24d30 61 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73 69  anch)(void*,unsi
24d40 67 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c 75 38  gned iSrcLine,u8
24d50 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20   eThis,u8 eMx); 
24d60 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a   /* Callback */.
24d70 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61    void *pVdbeBra
24d80 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  nchArg;         
24d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24da0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
24db0 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23  st argument */.#
24dc0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
24dd0 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
24de0 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c    int (*xTestCal
24df0 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20  lback)(int);    
24e00 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62      /* Invoked b
24e10 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  y sqlite3FaultSi
24e20 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  m() */.#endif.  
24e30 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61  int bLocaltimeFa
24e40 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ult;            
24e50 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69    /* True to fai
24e60 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61  l localtime() ca
24e70 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e  lls */.  int iOn
24e80 63 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64  ceResetThreshold
24e90 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
24ea0 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f  en to reset OP_O
24eb0 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  nce counters */.
24ec0 20 20 75 33 32 20 73 7a 53 6f 72 74 65 72 52 65    u32 szSorterRe
24ed0 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f;              
24ee0 20 20 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20      /* Min size 
24ef0 69 6e 20 62 79 74 65 73 20 74 6f 20 75 73 65 20  in bytes to use 
24f00 73 6f 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a 7d  sorter-refs */.}
24f10 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  ;../*.** This ma
24f20 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
24f30 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  de of assert() s
24f40 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64  tatements to ind
24f50 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68  icate that.** th
24f60 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79  e assert is only
24f70 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c   valid on a well
24f80 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
24f90 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a  .  Instead of:.*
24fa0 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
24fb0 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20   X );.**.** One 
24fc0 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  writes:.**.**   
24fd0 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43    assert( X || C
24fe0 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a  ORRUPT_DB );.**.
24ff0 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  ** CORRUPT_DB is
25000 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72   true during nor
25010 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  mal operation.  
25020 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20  CORRUPT_DB does 
25030 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20  not indicate.** 
25040 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
25050 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  e is definitely 
25060 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68  corrupt, only th
25070 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63  at it might be c
25080 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d  orrupt..** For m
25090 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20  ost test cases, 
250a0 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65  CORRUPT_DB is se
250b0 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67  t to false using
250c0 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71   a special.** sq
250d0 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
250e0 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62  ol().  This enab
250f0 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61  les assert() sta
25100 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65  tements to prove
25110 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20  .** things that 
25120 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20  are always true 
25130 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  for well-formed 
25140 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64  databases..*/.#d
25150 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42  efine CORRUPT_DB
25160 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67    (sqlite3Config
25170 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30  .neverCorrupt==0
25180 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  )../*.** Context
25190 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
251a0 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
251b0 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
251c0 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
251d0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
25200 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
25210 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  /.  int (*xExprC
25220 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
25230 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
25240 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
25250 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
25260 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
25270 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
25280 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
25290 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
252a0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65   */.  void (*xSe
252b0 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57  lectCallback2)(W
252c0 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
252d0 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61  /* Second callba
252e0 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
252f0 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
25300 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25320 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
25330 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43  eries */.  u8 eC
25340 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25360 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20       /* A small 
25370 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20  processing code 
25380 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
25390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
253b0 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
253c0 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
253d0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
253e0 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
253f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
25400 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
25410 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20      int n;      
25420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25440 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20   A counter */.  
25450 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20    int iCur;     
25460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25470 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
25480 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
25490 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70  /.    SrcList *p
254a0 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20  SrcList;        
254b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254c0 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  /* FROM clause *
254d0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63  /.    struct Src
254e0 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74  Count *pSrcCount
254f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25500 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
25510 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
25520 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72  .    struct CCur
25530 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b  Hint *pCCurHint;
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25550 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75  * Used by codeCu
25560 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20  rsorHint() */.  
25570 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20    int *aiCol;   
25580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25590 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61              /* a
255a0 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  rray of column i
255b0 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74  ndexes */.    st
255c0 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70  ruct IdxCover *p
255d0 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20  IdxCover;       
255e0 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b          /* Check
255f0 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72   for index cover
25600 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  age */.    struc
25610 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a  t IdxExprTrans *
25620 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20  pIdxTrans;      
25630 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20       /* Convert 
25640 69 64 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f  idxed expr to co
25650 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  lumn */.    Expr
25660 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
25670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25680 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42        /* GROUP B
25690 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  Y clause */.    
256a0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
256b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56            /* HAV
256d0 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61  ING to WHERE cla
256e0 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 20 20 73  use ctx */.    s
256f0 74 72 75 63 74 20 57 69 6e 64 6f 77 52 65 77 72  truct WindowRewr
25700 69 74 65 20 2a 70 52 65 77 72 69 74 65 3b 20 20  ite *pRewrite;  
25710 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69 6e 64           /* Wind
25720 6f 77 20 72 65 77 72 69 74 65 20 63 6f 6e 74 65  ow rewrite conte
25730 78 74 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  xt */.    struct
25740 20 57 68 65 72 65 43 6f 6e 73 74 20 2a 70 43 6f   WhereConst *pCo
25750 6e 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nst;            
25760 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
25770 75 73 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  use constants */
25780 0a 20 20 20 20 73 74 72 75 63 74 20 52 65 6e 61  .    struct Rena
25790 6d 65 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b 20  meCtx *pRename; 
257a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
257b0 2a 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20  * RENAME COLUMN 
257c0 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75  context */.  } u
257d0 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64  ;.};../* Forward
257e0 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f   declarations */
257f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
25800 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Expr(Walker*, Ex
25810 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
25820 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61  3WalkExprList(Wa
25830 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lker*, ExprList*
25840 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
25850 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a  lkSelect(Walker*
25860 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
25870 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
25880 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53  tExpr(Walker*, S
25890 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
258a0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72  ite3WalkSelectFr
258b0 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  om(Walker*, Sele
258c0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
258d0 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61  3ExprWalkNoop(Wa
258e0 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
258f0 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
25900 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a  WalkNoop(Walker*
25910 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
25920 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
25930 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53  kFail(Walker*, S
25940 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20  elect*);.#ifdef 
25950 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69  SQLITE_DEBUG.voi
25960 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
25970 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65  alkAssert2(Walke
25980 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65  r*, Select*);.#e
25990 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
259a0 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  rn code from the
259b0 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b   parse-tree walk
259c0 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61  ing primitives a
259d0 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c  nd their.** call
259e0 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  backs..*/.#defin
259f0 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20  e WRC_Continue  
25a00 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75    0   /* Continu
25a10 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c  e down into chil
25a20 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  dren */.#define 
25a30 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20  WRC_Prune       
25a40 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c  1   /* Omit chil
25a50 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75  dren but continu
25a60 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e  e walking siblin
25a70 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  gs */.#define WR
25a80 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20  C_Abort       2 
25a90 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65    /* Abandon the
25aa0 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f   tree walk */../
25ab0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
25ac0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
25ad0 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  re represents a 
25ae0 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f  set of one or mo
25af0 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d  re CTEs.** (comm
25b00 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
25b10 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79  ions) created by
25b20 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   a single WITH c
25b30 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
25b40 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43   With {.  int nC
25b50 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
25b60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
25b70 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74  ber of CTEs in t
25b80 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a  he WITH clause *
25b90 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72  /.  With *pOuter
25ba0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25bb0 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e      /* Containin
25bc0 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  g WITH clause, o
25bd0 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75  r NULL */.  stru
25be0 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20  ct Cte {        
25bf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
25c00 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74  or each CTE in t
25c10 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e  he WITH clause..
25c20 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  .. */.    char *
25c30 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
25c40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
25c50 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  e of this CTE */
25c60 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
25c70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cols;           
25c80 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
25c90 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20  explicit column 
25ca0 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a  names, or NULL *
25cb0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
25cc0 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20  elect;          
25cd0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
25ce0 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  inition of this 
25cf0 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74  CTE */.    const
25d00 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20   char *zCteErr; 
25d10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72             /* Er
25d20 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20  ror message for 
25d30 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e  circular referen
25d40 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  ces */.  } a[1];
25d50 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
25d60 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41  TE_DEBUG./*.** A
25d70 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
25d80 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63  e TreeView objec
25d90 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72  t is used for pr
25da0 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65  inting the conte
25db0 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74  nt of.** data st
25dc0 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69  ructures on sqli
25dd0 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29  te3DebugPrintf()
25de0 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69   using a tree-li
25df0 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75  ke view..*/.stru
25e00 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20  ct TreeView {.  
25e10 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
25e20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
25e30 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72   level of the tr
25e40 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a  ee we are on */.
25e50 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d    u8  bLine[100]
25e60 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61  ;         /* Dra
25e70 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f  w vertical in co
25e80 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b  lumn i if bLine[
25e90 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b  i] is true */.};
25ea0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
25eb0 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a  E_DEBUG */../*.*
25ec0 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73  * This object is
25ed0 20 75 73 65 64 20 69 6e 20 76 61 72 69 6f 69 75   used in varioiu
25ee0 73 20 77 61 79 73 2c 20 61 6c 6c 20 72 65 6c 61  s ways, all rela
25ef0 74 65 64 20 74 6f 20 77 69 6e 64 6f 77 20 66 75  ted to window fu
25f00 6e 63 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20  nctions.**.**   
25f10 28 31 29 20 41 20 73 69 6e 67 6c 65 20 69 6e 73  (1) A single ins
25f20 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
25f30 72 75 63 74 75 72 65 20 69 73 20 61 74 74 61 63  ructure is attac
25f40 68 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20  hed to the.**   
25f50 20 20 20 20 74 68 65 20 45 78 70 72 2e 70 57 69      the Expr.pWi
25f60 6e 20 66 69 65 6c 64 20 66 6f 72 20 65 61 63 68  n field for each
25f70 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
25f80 20 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f   in an expressio
25f90 6e 20 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20  n tree..**      
25fa0 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c   This object hol
25fb0 64 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  ds the informati
25fc0 6f 6e 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  on contained in 
25fd0 74 68 65 20 4f 56 45 52 20 63 6c 61 75 73 65 2c  the OVER clause,
25fe0 0a 2a 2a 20 20 20 20 20 20 20 70 6c 75 73 20 61  .**       plus a
25ff0 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73  dditional fields
26000 20 75 73 65 64 20 64 75 72 69 6e 67 20 63 6f 64   used during cod
26010 65 20 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a  e generation..**
26020 0a 2a 2a 20 20 20 28 32 29 20 41 6c 6c 20 77 69  .**   (2) All wi
26030 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 69  ndow functions i
26040 6e 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  n a single SELEC
26050 54 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d  T form a linked-
26060 6c 69 73 74 0a 2a 2a 20 20 20 20 20 20 20 61 74  list.**       at
26070 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74  tached to Select
26080 2e 70 57 69 6e 2e 20 20 54 68 65 20 57 69 6e 64  .pWin.  The Wind
26090 6f 77 2e 70 46 75 6e 63 20 61 6e 64 20 57 69 6e  ow.pFunc and Win
260a0 64 6f 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20  dow.pExpr.**    
260b0 20 20 20 66 69 65 6c 64 73 20 70 6f 69 6e 74 20     fields point 
260c0 62 61 63 6b 20 74 6f 20 74 68 65 20 65 78 70 72  back to the expr
260d0 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 74  ession that is t
260e0 68 65 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  he window functi
260f0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20  on..**.**   (3) 
26100 54 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  The terms of the
26110 20 57 49 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f   WINDOW clause o
26120 66 20 61 20 53 45 4c 45 43 54 20 61 72 65 20 69  f a SELECT are i
26130 6e 73 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73  nstances of this
26140 0a 2a 2a 20 20 20 20 20 20 20 6f 62 6a 65 63 74  .**       object
26150 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   on a linked lis
26160 74 20 61 74 74 61 63 68 65 64 20 74 6f 20 53 65  t attached to Se
26170 6c 65 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a  lect.pWinDefn..*
26180 2a 0a 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31  *.** The uses (1
26190 29 20 61 6e 64 20 28 32 29 20 61 72 65 20 72 65  ) and (2) are re
261a0 61 6c 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69  ally the same Wi
261b0 6e 64 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74  ndow object that
261c0 20 6a 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a   just happens.**
261d0 20 74 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c   to be accessibl
261e0 65 20 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65  e in two differe
261f0 6e 74 20 77 61 79 73 2e 20 20 55 73 65 20 28 33  nt ways.  Use (3
26200 29 20 69 73 20 61 72 65 20 73 65 70 61 72 61 74  ) is are separat
26210 65 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  e objects..*/.st
26220 72 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20  ruct Window {.  
26230 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
26240 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
26250 6f 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62  of window (may b
26260 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70  e NULL) */.  Exp
26270 72 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f  rList *pPartitio
26280 6e 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f  n;   /* PARTITIO
26290 4e 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  N BY clause */. 
262a0 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
262b0 72 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45  rBy;     /* ORDE
262c0 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  R BY clause */. 
262d0 20 75 38 20 65 54 79 70 65 3b 20 20 20 20 20 20   u8 eType;      
262e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
262f0 41 4e 47 45 20 6f 72 20 54 4b 5f 52 4f 57 53 20  ANGE or TK_ROWS 
26300 2a 2f 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20  */.  u8 eStart; 
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26320 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45  UNBOUNDED, CURRE
26330 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72  NT, PRECEDING or
26340 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20   FOLLOWING */.  
26350 75 38 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20  u8 eEnd;        
26360 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55          /* UNBOU
26370 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50  NDED, CURRENT, P
26380 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c  RECEDING or FOLL
26390 4f 57 49 4e 47 20 2a 2f 0a 20 20 45 78 70 72 20  OWING */.  Expr 
263a0 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
263b0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
263c0 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45   for "<expr> PRE
263d0 43 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70  CEDING" */.  Exp
263e0 72 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  r *pEnd;        
263f0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
26400 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46  on for "<expr> F
26410 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57  OLLOWING" */.  W
26420 69 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b  indow *pNextWin;
26430 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77         /* Next w
26440 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62  indow function b
26450 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69 73  elonging to this
26460 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70   SELECT */.  Exp
26470 72 20 2a 70 46 69 6c 74 65 72 3b 20 20 20 20 20  r *pFilter;     
26480 20 20 20 20 20 2f 2a 20 54 68 65 20 46 49 4c 54       /* The FILT
26490 45 52 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  ER expression */
264a0 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e  .  FuncDef *pFun
264b0 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
264c0 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
264d0 69 6e 74 20 69 45 70 68 43 73 72 3b 20 20 20 20  int iEphCsr;    
264e0 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74 69          /* Parti
264f0 74 69 6f 6e 20 62 75 66 66 65 72 20 6f 72 20 50  tion buffer or P
26500 65 65 72 20 62 75 66 66 65 72 20 2a 2f 0a 20 20  eer buffer */.  
26510 69 6e 74 20 72 65 67 41 63 63 75 6d 3b 0a 20 20  int regAccum;.  
26520 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 0a 20  int regResult;. 
26530 20 69 6e 74 20 63 73 72 41 70 70 3b 20 20 20 20   int csrApp;    
26540 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63           /* Func
26550 74 69 6f 6e 20 63 75 72 73 6f 72 20 28 75 73 65  tion cursor (use
26560 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f  d by min/max) */
26570 0a 20 20 69 6e 74 20 72 65 67 41 70 70 3b 20 20  .  int regApp;  
26580 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
26590 6e 63 74 69 6f 6e 20 72 65 67 69 73 74 65 72 20  nction register 
265a0 28 61 6c 73 6f 20 75 73 65 64 20 62 79 20 6d 69  (also used by mi
265b0 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20  n/max) */.  int 
265c0 72 65 67 50 61 72 74 3b 20 20 20 20 20 20 20 20  regPart;        
265d0 20 20 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 20      /* First in 
265e0 61 20 73 65 74 20 6f 66 20 72 65 67 69 73 74 65  a set of registe
265f0 72 73 20 68 6f 6c 64 69 6e 67 20 50 41 52 54 49  rs holding PARTI
26600 54 49 4f 4e 20 42 59 0a 20 20 20 20 20 20 20 20  TION BY.        
26610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26620 20 20 2a 2a 20 61 6e 64 20 4f 52 44 45 52 20 42    ** and ORDER B
26630 59 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  Y values for the
26640 20 77 69 6e 64 6f 77 20 2a 2f 0a 20 20 45 78 70   window */.  Exp
26650 72 20 2a 70 4f 77 6e 65 72 3b 20 20 20 20 20 20  r *pOwner;      
26660 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
26670 6f 6e 20 6f 62 6a 65 63 74 20 74 68 69 73 20 77  on object this w
26680 69 6e 64 6f 77 20 69 73 20 61 74 74 61 63 68 65  indow is attache
26690 64 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  d to */.  int nB
266a0 75 66 66 65 72 43 6f 6c 3b 20 20 20 20 20 20 20  ufferCol;       
266b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
266c0 6f 6c 75 6d 6e 73 20 69 6e 20 62 75 66 66 65 72  olumns in buffer
266d0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
266e0 69 41 72 67 43 6f 6c 3b 20 20 20 20 20 20 20 20  iArgCol;        
266f0 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 6f 66      /* Offset of
26700 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
26710 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f  for this functio
26720 6e 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65 66  n */.};..#ifndef
26730 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e   SQLITE_OMIT_WIN
26740 44 4f 57 46 55 4e 43 0a 76 6f 69 64 20 73 71 6c  DOWFUNC.void sql
26750 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65  ite3WindowDelete
26760 28 73 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64 6f  (sqlite3*, Windo
26770 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  w*);.void sqlite
26780 33 57 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74  3WindowListDelet
26790 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57  e(sqlite3 *db, W
267a0 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f  indow *p);.Windo
267b0 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  w *sqlite3Window
267c0 41 6c 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e  Alloc(Parse*, in
267d0 74 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69  t, int, Expr*, i
267e0 6e 74 20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  nt , Expr*);.voi
267f0 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41  d sqlite3WindowA
26800 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
26810 70 72 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 69  pr*, Window*);.i
26820 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  nt sqlite3Window
26830 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 20  Compare(Parse*, 
26840 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a  Window*, Window*
26850 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
26860 69 6e 64 6f 77 43 6f 64 65 49 6e 69 74 28 50 61  indowCodeInit(Pa
26870 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a  rse*, Window*);.
26880 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
26890 6f 77 43 6f 64 65 53 74 65 70 28 50 61 72 73 65  owCodeStep(Parse
268a0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 57 68 65 72  *, Select*, Wher
268b0 65 49 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74  eInfo*, int, int
268c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69  );.int sqlite3Wi
268d0 6e 64 6f 77 52 65 77 72 69 74 65 28 50 61 72 73  ndowRewrite(Pars
268e0 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  e*, Select*);.in
268f0 74 20 73 71 6c 69 74 65 33 45 78 70 61 6e 64 53  t sqlite3ExpandS
26900 75 62 71 75 65 72 79 28 50 61 72 73 65 2a 2c 20  ubquery(Parse*, 
26910 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
26920 74 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  tem*);.void sqli
26930 74 65 33 57 69 6e 64 6f 77 55 70 64 61 74 65 28  te3WindowUpdate(
26940 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c  Parse*, Window*,
26950 20 57 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65   Window*, FuncDe
26960 66 2a 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c  f*);.Window *sql
26970 69 74 65 33 57 69 6e 64 6f 77 44 75 70 28 73 71  ite3WindowDup(sq
26980 6c 69 74 65 33 20 2a 64 62 2c 20 45 78 70 72 20  lite3 *db, Expr 
26990 2a 70 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20  *pOwner, Window 
269a0 2a 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c  *p);.Window *sql
269b0 69 74 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 75  ite3WindowListDu
269c0 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57  p(sqlite3 *db, W
269d0 69 6e 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20  indow *p);.void 
269e0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e  sqlite3WindowFun
269f0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 23 65  ctions(void);.#e
26a00 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
26a10 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65  ite3WindowDelete
26a20 28 61 2c 62 29 0a 23 20 64 65 66 69 6e 65 20 73  (a,b).# define s
26a30 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63  qlite3WindowFunc
26a40 74 69 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e 65  tions().# define
26a50 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74   sqlite3WindowAt
26a60 74 61 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64  tach(a,b,c).#end
26a70 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69  if../*.** Assumi
26a80 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f  ng zIn points to
26a90 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
26aa0 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61  of a UTF-8 chara
26ab0 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65  cter,.** advance
26ac0 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f   zIn to point to
26ad0 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
26ae0 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d  of the next UTF-
26af0 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a  8 character..*/.
26b00 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
26b10 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20  KIP_UTF8(zIn) { 
26b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b30 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28         \.  if( (
26b40 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20  *(zIn++))>=0xc0 
26b50 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ){              
26b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b70 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a  \.    while( (*z
26b80 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30  In & 0xc0)==0x80
26b90 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20   ){ zIn++; }    
26ba0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20           \.  }  
26bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26be0 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65    \.}../*.** The
26bf0 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d   SQLITE_*_BKPT m
26c00 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69  acros are substi
26c10 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72  tutes for the er
26c20 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a  ror codes with.*
26c30 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  * the same name 
26c40 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20  but without the 
26c50 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54  _BKPT suffix.  T
26c60 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f  hese macros invo
26c70 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74  ke.** routines t
26c80 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c  hat report the l
26c90 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68  ine-number on wh
26ca0 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72  ich the error or
26cb0 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e  iginated.** usin
26cc0 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e  g sqlite3_log().
26cd0 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61    The routines a
26ce0 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f  lso provide a co
26cf0 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a  nvenient place.*
26d00 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67  * to set a debug
26d10 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a  ger breakpoint..
26d20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  */.int sqlite3Re
26d30 70 6f 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45  portError(int iE
26d40 72 72 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20  rr, int lineno, 
26d50 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
26d60 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  e);.int sqlite3C
26d70 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29  orruptError(int)
26d80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73  ;.int sqlite3Mis
26d90 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  useError(int);.i
26da0 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  nt sqlite3Cantop
26db0 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64  enError(int);.#d
26dc0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
26dd0 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65  RUPT_BKPT sqlite
26de0 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f  3CorruptError(__
26df0 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
26e00 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
26e10 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  PT sqlite3Misuse
26e20 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
26e30 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
26e40 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c  ANTOPEN_BKPT sql
26e50 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
26e60 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64  r(__LINE__).#ifd
26e70 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
26e80 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d    int sqlite3Nom
26e90 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20  emError(int);.  
26ea0 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72  int sqlite3Ioerr
26eb0 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b  nomemError(int);
26ec0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  .  int sqlite3Co
26ed0 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69  rruptPgnoError(i
26ee0 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69  nt,Pgno);.# defi
26ef0 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f  ne SQLITE_NOMEM_
26f00 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65  BKPT sqlite3Nome
26f10 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
26f20 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
26f30 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50  _IOERR_NOMEM_BKP
26f40 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  T sqlite3Ioerrno
26f50 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  memError(__LINE_
26f60 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
26f70 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28  TE_CORRUPT_PGNO(
26f80 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  P) sqlite3Corrup
26f90 74 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e  tPgnoError(__LIN
26fa0 45 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23  E__,(P)).#else.#
26fb0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
26fc0 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45  OMEM_BKPT SQLITE
26fd0 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20  _NOMEM.# define 
26fe0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
26ff0 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49  EM_BKPT SQLITE_I
27000 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66  OERR_NOMEM.# def
27010 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
27020 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74  PT_PGNO(P) sqlit
27030 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
27040 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a  _LINE__).#endif.
27050 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20  ./*.** FTS3 and 
27060 46 54 53 34 20 62 6f 74 68 20 72 65 71 75 69 72  FTS4 both requir
27070 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
27080 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64  support.*/.#if d
27090 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
270a0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
270b0 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
270c0 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e  ENABLE_FTS3.# un
270d0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
270e0 45 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f  E_FTS4.#endif../
270f0 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61  *.** FTS4 is rea
27100 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e  lly an extension
27110 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69   for FTS3.  It i
27120 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20  s enabled using 
27130 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  the.** SQLITE_EN
27140 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e  ABLE_FTS3 macro.
27150 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63    But to avoid c
27160 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f  onfusion we also
27170 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c   call.** the SQL
27180 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20  ITE_ENABLE_FTS4 
27190 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61  macro to serve a
271a0 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53  s an alias for S
271b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
271c0 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  3..*/.#if define
271d0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
271e0 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65  FTS4) && !define
271f0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
27200 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53  FTS3).# define S
27210 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
27220 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  3 1.#endif../*.*
27230 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65  * The ctype.h he
27240 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66  ader is needed f
27250 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73  or non-ASCII sys
27260 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73  tems.  It is als
27270 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46  o.** needed by F
27280 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73  TS3 when FTS3 is
27290 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
272a0 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a   amalgamation..*
272b0 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
272c0 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20  QLITE_ASCII) || 
272d0 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
272e0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
272f0 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  3) && defined(SQ
27300 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
27310 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63  N)).# include <c
27320 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  type.h>.#endif..
27330 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
27340 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63  ing macros mimic
27350 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69   the standard li
27360 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20  brary functions 
27370 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73  toupper(),.** is
27380 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d  space(), isalnum
27390 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e  (), isdigit() an
273a0 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65  d isxdigit(), re
273b0 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a  spectively. The.
273c0 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f  ** sqlite versio
273d0 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72  ns only work for
273e0 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
273f0 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
27400 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64   locale..*/.#ifd
27410 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a  ef SQLITE_ASCII.
27420 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27430 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29  Toupper(x)  ((x)
27440 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d  &~(sqlite3CtypeM
27450 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
27460 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20  r)(x)]&0x20)).# 
27470 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
27480 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69  space(x)   (sqli
27490 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
274a0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
274b0 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73  0x01).# define s
274c0 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
274d0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
274e0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
274f0 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20  ar)(x)]&0x06).# 
27500 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
27510 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69  alpha(x)   (sqli
27520 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
27530 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
27540 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73  0x02).# define s
27550 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
27560 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
27570 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
27580 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20  ar)(x)]&0x04).# 
27590 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
275a0 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69  xdigit(x)  (sqli
275b0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
275c0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
275d0 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73  0x08).# define s
275e0 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
275f0 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72     (sqlite3Upper
27600 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65  ToLower[(unsigne
27610 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64  d char)(x)]).# d
27620 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71  efine sqlite3Isq
27630 75 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69 74  uote(x)   (sqlit
27640 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
27650 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
27660 78 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  x80).#else.# def
27670 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
27680 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28  er(x)   toupper(
27690 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
276a0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
276b0 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
276c0 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e   isspace((unsign
276d0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
276e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
276f0 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75  lnum(x)   isalnu
27700 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  m((unsigned char
27710 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
27720 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
27730 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69     isalpha((unsi
27740 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
27750 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
27760 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69  sdigit(x)   isdi
27770 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
27780 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
27790 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
277a0 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75  (x)  isxdigit((u
277b0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
277c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
277d0 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74  e3Tolower(x)   t
277e0 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64  olower((unsigned
277f0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
27800 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f  ine sqlite3Isquo
27810 74 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22  te(x)   ((x)=='"
27820 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78  '||(x)=='\''||(x
27830 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27  )=='['||(x)=='`'
27840 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
27850 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29  ite3IsIdChar(u8)
27860 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  ;../*.** Interna
27870 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
27880 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c  types.*/.int sql
27890 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73  ite3StrICmp(cons
278a0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
278b0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
278c0 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20  3Strlen30(const 
278d0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
278e0 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28  lite3ColumnType(
278f0 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a  Column*,char*);.
27900 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
27910 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  trNICmp sqlite3_
27920 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71  strnicmp..int sq
27930 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28  lite3MallocInit(
27940 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
27950 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69  te3MallocEnd(voi
27960 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  d);.void *sqlite
27970 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f  3Malloc(u64);.vo
27980 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
27990 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64  cZero(u64);.void
279a0 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
279b0 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20  cZero(sqlite3*, 
279c0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
279d0 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73  te3DbMallocRaw(s
279e0 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
279f0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
27a00 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65  llocRawNN(sqlite
27a10 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  3*, u64);.char *
27a20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
27a30 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
27a40 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
27a50 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
27a60 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
27a70 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  r*, u64);.char *
27a80 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75 70  sqlite3DbSpanDup
27a90 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
27aa0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
27ab0 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
27ac0 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
27ad0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
27ae0 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
27af0 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
27b00 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
27b10 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
27b20 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
27b30 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
27b40 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
27b50 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
27b60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
27b70 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20  reeNN(sqlite3*, 
27b80 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
27b90 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
27ba0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
27bb0 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
27bc0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
27bd0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
27be0 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
27bf0 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
27c00 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
27c10 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
27c20 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e  ault(void);.#ifn
27c30 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
27c40 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
27c50 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
27c60 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
27c70 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
27c80 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d));.#endif.int 
27c90 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
27ca0 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
27cb0 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
27cc0 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
27cd0 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
27ce0 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
27cf0 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
27d00 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
27d10 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
27d20 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
27d30 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
27d40 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
27d50 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
27d60 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
27d70 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
27d80 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
27d90 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
27da0 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
27db0 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
27dc0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
27dd0 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
27de0 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
27df0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
27e00 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
27e10 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
27e20 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
27e30 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
27e40 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
27e50 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
27e60 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
27e70 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
27e80 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
27e90 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  (D,P).#else.# de
27ea0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
27eb0 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
27ec0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
27ed0 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
27ee0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
27ef0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
27f00 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
27f10 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
27f20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
27f30 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
27f40 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
27f50 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74  endif../* Do not
27f60 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53   allow both MEMS
27f70 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20  YS5 and MEMSYS3 
27f80 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f  to be defined to
27f90 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79  gether.  If they
27fa0 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65  .** are, disable
27fb0 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64   MEMSYS3.*/.#ifd
27fc0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
27fd0 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
27fe0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
27ff0 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
28000 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
28010 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #undef SQLITE_EN
28020 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e  ABLE_MEMSYS3.#en
28030 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
28040 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
28050 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
28060 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
28070 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
28080 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
28090 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
280a0 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
280b0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
280c0 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
280d0 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
280e0 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
280f0 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
28100 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
28110 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
28120 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
28130 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
28140 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
28150 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
28160 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
28170 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
28180 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
28190 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
281a0 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  _OMIT) && !defin
281b0 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
281c0 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c  NOOP).  void sql
281d0 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
281e0 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23  r(void);.#else.#
281f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
28200 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23  emoryBarrier().#
28210 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69  endif..sqlite3_i
28220 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74  nt64 sqlite3Stat
28230 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
28240 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
28250 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  Up(int, int);.vo
28260 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
28270 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  Down(int, int);.
28280 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
28290 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c  usHighwater(int,
282a0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
282b0 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28  e3LookasideUsed(
282c0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a  sqlite3*,int*);.
282d0 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75  ./* Access to mu
282e0 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71  texes used by sq
282f0 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a  lite3_status() *
28300 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  /.sqlite3_mutex 
28310 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d  *sqlite3Pcache1M
28320 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69  utex(void);.sqli
28330 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
28340 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f  e3MallocMutex(vo
28350 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  id);..#if define
28360 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
28370 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43 48  MULTITHREADED_CH
28380 45 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e 65  ECKS) && !define
28390 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  d(SQLITE_MUTEX_O
283a0 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  MIT).void sqlite
283b0 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74  3MutexWarnOnCont
283c0 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d  ention(sqlite3_m
283d0 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  utex*);.#else.# 
283e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 75  define sqlite3Mu
283f0 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74  texWarnOnContent
28400 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  ion(x).#endif..#
28410 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28420 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
28430 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
28440 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
28450 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
28460 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
28470 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
28480 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
28490 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
284a0 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
284b0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
284c0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
284d0 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
284e0 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
284f0 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
28500 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
28510 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
28520 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
28530 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
28540 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
28550 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
28560 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
28570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
28580 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
28590 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
285a0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
285b0 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
285c0 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
285d0 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20  ues */.};..char 
285e0 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
285f0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28600 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
28610 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
28620 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
28630 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
28640 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
28650 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
28660 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
28670 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76  VE_OS_TRACE).  v
28680 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
28690 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
286a0 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
286b0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
286c0 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
286d0 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
286e0 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
286f0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
28700 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
28710 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
28720 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
28730 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  r(TreeView*, con
28740 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  st Expr*, u8);. 
28750 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
28760 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73  eViewBareExprLis
28770 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
28780 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  st ExprList*, co
28790 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
287a0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
287b0 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
287c0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
287d0 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
287e0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
287f0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
28800 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c  elect(TreeView*,
28810 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20   const Select*, 
28820 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
28830 74 65 33 54 72 65 65 56 69 65 77 57 69 74 68 28  te3TreeViewWith(
28840 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
28850 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 69 66   With*, u8);.#if
28860 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28870 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 76 6f  _WINDOWFUNC.  vo
28880 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
28890 65 77 57 69 6e 64 6f 77 28 54 72 65 65 56 69 65  ewWindow(TreeVie
288a0 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77  w*, const Window
288b0 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73  *, u8);.  void s
288c0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69  qlite3TreeViewWi
288d0 6e 46 75 6e 63 28 54 72 65 65 56 69 65 77 2a 2c  nFunc(TreeView*,
288e0 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20   const Window*, 
288f0 75 38 29 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64  u8);.#endif.#end
28900 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  if...void sqlite
28910 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20  3SetString(char 
28920 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f  **, sqlite3*, co
28930 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
28940 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
28950 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
28960 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
28970 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
28980 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
28990 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f  ite3TokenInit(To
289a0 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74  ken*,char*);.int
289b0 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43   sqlite3KeywordC
289c0 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ode(const unsign
289d0 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  ed char*, int);.
289e0 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61  int sqlite3RunPa
289f0 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rser(Parse*, con
28a00 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a  st char*, char *
28a10 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28a20 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72  FinishCoding(Par
28a30 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
28a40 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73  3GetTempReg(Pars
28a50 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
28a60 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28  3ReleaseTempReg(
28a70 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Parse*,int);.int
28a80 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
28a90 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  ange(Parse*,int)
28aa0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
28ab0 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50  leaseTempRange(P
28ac0 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
28ad0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61  void sqlite3Clea
28ae0 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61  rTempRegCache(Pa
28af0 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  rse*);.#ifdef SQ
28b00 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
28b10 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52  qlite3NoTempsInR
28b20 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
28b30 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70  int);.#endif.Exp
28b40 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c  r *sqlite3ExprAl
28b50 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
28b60 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e  ,const Token*,in
28b70 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
28b80 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69  3Expr(sqlite3*,i
28b90 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
28ba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28bb0 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28  rAttachSubtrees(
28bc0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45  sqlite3*,Expr*,E
28bd0 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
28be0 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28  r *sqlite3PExpr(
28bf0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Parse*, int, Exp
28c00 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
28c10 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64   sqlite3PExprAdd
28c20 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  Select(Parse*, E
28c30 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xpr*, Select*);.
28c40 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
28c50 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
28c60 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
28c70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
28c80 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
28c90 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
28ca0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28cb0 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72  te3ExprAssignVar
28cc0 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45  Number(Parse*, E
28cd0 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  xpr*, u32);.void
28ce0 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65   sqlite3ExprDele
28cf0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
28d00 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  r*);.ExprList *s
28d10 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70  qlite3ExprListAp
28d20 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72  pend(Parse*,Expr
28d30 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  List*,Expr*);.Ex
28d40 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
28d50 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56 65 63  xprListAppendVec
28d60 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  tor(Parse*,ExprL
28d70 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70  ist*,IdList*,Exp
28d80 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
28d90 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74  3ExprListSetSort
28da0 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c  Order(ExprList*,
28db0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28dc0 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d  e3ExprListSetNam
28dd0 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  e(Parse*,ExprLis
28de0 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  t*,Token*,int);.
28df0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28e00 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73  ListSetSpan(Pars
28e10 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 63 6f 6e  e*,ExprList*,con
28e20 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
28e30 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
28e40 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
28e50 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
28e60 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69  List*);.u32 sqli
28e70 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73  te3ExprListFlags
28e80 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a  (const ExprList*
28e90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
28ea0 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  it(sqlite3*, cha
28eb0 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r**);.int sqlite
28ec0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f  3InitCallback(vo
28ed0 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a  id*, int, char**
28ee0 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
28ef0 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28 73 71  qlite3InitOne(sq
28f00 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 68 61  lite3*, int, cha
28f10 72 2a 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  r**, u32);.void 
28f20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61  sqlite3Pragma(Pa
28f30 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
28f40 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  n*,Token*,int);.
28f50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
28f60 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
28f70 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33  .Module *sqlite3
28f80 50 72 61 67 6d 61 56 74 61 62 52 65 67 69 73 74  PragmaVtabRegist
28f90 65 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  er(sqlite3*,cons
28fa0 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a  t char *zName);.
28fb0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
28fc0 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
28fd0 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73  asOfConnection(s
28fe0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
28ff0 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
29000 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e  hema(sqlite3*,in
29010 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29020 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65  CollapseDatabase
29030 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b  Array(sqlite3*);
29040 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
29050 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67  mitInternalChang
29060 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  es(sqlite3*);.vo
29070 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
29080 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69  ColumnNames(sqli
29090 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e  te3*,Table*);.in
290a0 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73  t sqlite3Columns
290b0 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72  FromExprList(Par
290c0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31  se*,ExprList*,i1
290d0 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f  6*,Column**);.vo
290e0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
290f0 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64  AddColumnTypeAnd
29100 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a  Collation(Parse*
29110 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29  ,Table*,Select*)
29120 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
29130 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63  ResultSetOfSelec
29140 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a  t(Parse*,Select*
29150 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
29160 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50  penMasterTable(P
29170 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e  arse *, int);.In
29180 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d  dex *sqlite3Prim
29190 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c  aryKeyIndex(Tabl
291a0 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33  e*);.i16 sqlite3
291b0 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e  ColumnOfIndex(In
291c0 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64  dex*, i16);.void
291d0 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
291e0 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
291f0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
29200 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51  int,int);.#if SQ
29210 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
29220 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69  EN_COLUMNS.  voi
29230 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50  d sqlite3ColumnP
29240 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d  ropertiesFromNam
29250 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e  e(Table*, Column
29260 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
29270 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  ne sqlite3Column
29280 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61  PropertiesFromNa
29290 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70  me(T,C) /* no-op
292a0 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20   */.#endif.void 
292b0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
292c0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
292d0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
292e0 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50  ite3AddNotNull(P
292f0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
29300 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d  d sqlite3AddPrim
29310 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  aryKey(Parse*, E
29320 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
29330 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
29340 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f  qlite3AddCheckCo
29350 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
29360 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
29370 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
29380 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
29390 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
293a0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
293b0 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61   sqlite3AddColla
293c0 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  teType(Parse*, T
293d0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
293e0 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72  ite3EndTable(Par
293f0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
29400 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69  *,u8,Select*);.i
29410 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55  nt sqlite3ParseU
29420 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  ri(const char*,c
29430 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67  onst char*,unsig
29440 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20  ned int*,.      
29450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
29460 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72  lite3_vfs**,char
29470 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72  **,char **);.Btr
29480 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d  ee *sqlite3DbNam
29490 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33  eToBtree(sqlite3
294a0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
294b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
294c0 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69  NTESTABLE.# defi
294d0 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  ne sqlite3FaultS
294e0 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  im(X) SQLITE_OK.
294f0 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69  #else.  int sqli
29500 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29  te3FaultSim(int)
29510 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63  ;.#endif..Bitvec
29520 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43   *sqlite3BitvecC
29530 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20  reate(u32);.int 
29540 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
29550 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
29560 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
29570 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69  ecTestNotNull(Bi
29580 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
29590 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65   sqlite3BitvecSe
295a0 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
295b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
295c0 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a  vecClear(Bitvec*
295d0 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76  , u32, void*);.v
295e0 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
295f0 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a  cDestroy(Bitvec*
29600 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69  );.u32 sqlite3Bi
29610 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a  tvecSize(Bitvec*
29620 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
29630 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74  E_UNTESTABLE.int
29640 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75   sqlite3BitvecBu
29650 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e  iltinTest(int,in
29660 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77  t*);.#endif..Row
29670 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53  Set *sqlite3RowS
29680 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29  etInit(sqlite3*)
29690 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
296a0 77 53 65 74 44 65 6c 65 74 65 28 76 6f 69 64 2a  wSetDelete(void*
296b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
296c0 6f 77 53 65 74 43 6c 65 61 72 28 76 6f 69 64 2a  owSetClear(void*
296d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
296e0 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
296f0 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
29700 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
29710 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42  (RowSet*, int iB
29720 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20  atch, i64);.int 
29730 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
29740 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29  t(RowSet*, i64*)
29750 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  ;..void sqlite3C
29760 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a  reateView(Parse*
29770 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
29780 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
29790 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
297a0 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
297b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
297c0 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
297d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
297e0 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
297f0 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
29800 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
29810 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
29820 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
29830 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
29840 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
29850 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
29860 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74  TTACHED>30.  int
29870 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
29880 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a  lZero(yDbMask);.
29890 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
298a0 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
298b0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
298c0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
298d0 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
298e0 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
298f0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
29900 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
29910 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
29920 20 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73   Table*);.void s
29930 71 6c 69 74 65 33 46 72 65 65 49 6e 64 65 78 28  qlite3FreeIndex(
29940 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
29950 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
29960 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
29970 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  MENT.  void sqli
29980 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
29990 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61  Begin(Parse *pPa
299a0 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  rse);.  void sql
299b0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
299c0 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72  tEnd(Parse *pPar
299d0 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  se);.#else.# def
299e0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
299f0 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29  ncrementBegin(X)
29a00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29a10 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
29a20 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  d(X).#endif.void
29a30 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50   sqlite3Insert(P
29a40 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
29a50 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74   Select*, IdList
29a60 2a 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a 29  *, int, Upsert*)
29a70 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
29a80 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
29a90 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
29aa0 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
29ab0 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
29ac0 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 20  tAppend(Parse*, 
29ad0 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  IdList*, Token*)
29ae0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c  ;.int sqlite3IdL
29af0 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a  istIndex(IdList*
29b00 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53  ,const char*);.S
29b10 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
29b20 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71  rcListEnlarge(sq
29b30 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
29b40 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63  , int, int);.Src
29b50 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
29b60 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
29b70 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  e3*, SrcList*, T
29b80 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
29b90 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
29ba0 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f  SrcListAppendFro
29bb0 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72  mTerm(Parse*, Sr
29bc0 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
29bd0 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
29be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f                To
29c00 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  ken*, Select*, E
29c10 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  xpr*, IdList*);.
29c20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
29c30 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72  istIndexedBy(Par
29c40 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  se *, SrcList *,
29c50 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20   Token *);.void 
29c60 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75  sqlite3SrcListFu
29c70 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53  ncArgs(Parse*, S
29c80 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
29c90 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
29ca0 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28  IndexedByLookup(
29cb0 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20  Parse *, struct 
29cc0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
29cd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
29ce0 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
29cf0 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  e(SrcList*);.voi
29d00 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
29d10 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61  AssignCursors(Pa
29d20 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
29d30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c  .void sqlite3IdL
29d40 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
29d50 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  3*, IdList*);.vo
29d60 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
29d70 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
29d80 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64  , SrcList*);.Ind
29d90 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63  ex *sqlite3Alloc
29da0 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73  ateIndexObject(s
29db0 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c  qlite3*,i16,int,
29dc0 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
29dd0 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78  lite3CreateIndex
29de0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
29df0 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  oken*,SrcList*,E
29e00 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b  xprList*,int,Tok
29e10 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
29e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
29e30 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  xpr*, int, int, 
29e40 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
29e50 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65  3DropIndex(Parse
29e60 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
29e70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
29e80 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c  lect(Parse*, Sel
29e90 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
29ea0 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
29eb0 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72  te3SelectNew(Par
29ec0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72  se*,ExprList*,Sr
29ed0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
29ee0 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  rList*,.        
29ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f00 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a   Expr*,ExprList*
29f10 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ,u32,Expr*);.voi
29f20 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
29f30 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
29f40 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
29f50 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
29f60 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
29f70 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
29f80 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
29f90 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
29fa0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29fb0 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
29fc0 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
29fd0 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
29fe0 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
29ff0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
2a000 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
2a010 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
2a020 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
2a030 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74  ERY).Expr *sqlit
2a040 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72  e3LimitWhere(Par
2a050 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
2a060 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
2a070 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  r*,char*);.#endi
2a080 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  f.void sqlite3De
2a090 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c  leteFrom(Parse*,
2a0a0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a   SrcList*, Expr*
2a0b0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  , ExprList*, Exp
2a0c0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2a0d0 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
2a0e0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
2a0f0 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78  st*,Expr*,int,Ex
2a100 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a 20  prList*,Expr*,. 
2a110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a120 20 20 55 70 73 65 72 74 2a 29 3b 0a 57 68 65 72    Upsert*);.Wher
2a130 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68  eInfo *sqlite3Wh
2a140 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c  ereBegin(Parse*,
2a150 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
2a160 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  xprList*,ExprLis
2a170 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69  t*,u16,int);.voi
2a180 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e  d sqlite3WhereEn
2a190 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c  d(WhereInfo*);.L
2a1a0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57 68 65  ogEst sqlite3Whe
2a1b0 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74  reOutputRowCount
2a1c0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2a1d0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
2a1e0 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e  Distinct(WhereIn
2a1f0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2a200 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28  3WhereIsOrdered(
2a210 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2a220 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64   sqlite3WhereOrd
2a230 65 72 42 79 4c 69 6d 69 74 4f 70 74 4c 61 62 65  erByLimitOptLabe
2a240 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
2a250 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
2a260 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66  sSorted(WhereInf
2a270 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2a280 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
2a290 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
2a2a0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
2a2b0 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
2a2c0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
2a2d0 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
2a2e0 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e  s(WhereInfo*, in
2a2f0 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45  t*);.#define ONE
2a300 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20  PASS_OFF      0 
2a310 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66         /* Use of
2a320 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c   ONEPASS not all
2a330 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
2a340 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20  ONEPASS_SINGLE  
2a350 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   1        /* ONE
2a360 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61  PASS valid for a
2a370 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61   single row upda
2a380 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  te */.#define ON
2a390 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32  EPASS_MULTI    2
2a3a0 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
2a3b0 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20  SS is valid for 
2a3c0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
2a3d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a3e0 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f  rCodeLoadIndexCo
2a3f0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64  lumn(Parse*, Ind
2a400 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
2a410 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a420 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
2a430 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  n(Parse*, Table*
2a440 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
2a450 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2a460 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
2a470 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a  umnOfTable(Vdbe*
2a480 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
2a490 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2a4a0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f  qlite3ExprCodeMo
2a4b0 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
2a4c0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2a4d0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28  sqlite3ExprCode(
2a4e0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2a4f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2a500 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61  3ExprCodeCopy(Pa
2a510 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a520 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a530 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c  xprCodeFactorabl
2a540 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
2a550 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2a560 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74  e3ExprCodeAtInit
2a570 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2a580 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a590 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61  3ExprCodeTemp(Pa
2a5a0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a5b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2a5c0 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61  xprCodeTarget(Pa
2a5d0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a5e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a5f0 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28  xprCodeAndCache(
2a600 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2a610 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a620 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74  ExprCodeExprList
2a630 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2a640 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  t*, int, int, u8
2a650 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
2a660 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20  E_ECEL_DUP      
2a670 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e  0x01  /* Deep, n
2a680 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65  ot shallow copie
2a690 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
2a6a0 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20  ITE_ECEL_FACTOR 
2a6b0 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f    0x02  /* Facto
2a6c0 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74  r out constant t
2a6d0 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  erms */.#define 
2a6e0 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20  SQLITE_ECEL_REF 
2a6f0 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73       0x04  /* Us
2a700 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69  e ExprList.u.x.i
2a710 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64  OrderByCol */.#d
2a720 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
2a730 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20  L_OMITREF  0x08 
2a740 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72   /* Omit if Expr
2a750 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42  List.u.x.iOrderB
2a760 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  yCol */.void sql
2a770 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
2a780 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a790 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2a7a0 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
2a7b0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2a7c0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2a7d0 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
2a7e0 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78  seDup(Parse*, Ex
2a7f0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
2a800 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69  Table *sqlite3Fi
2a810 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  ndTable(sqlite3*
2a820 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
2a830 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
2a840 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20  ine LOCATE_VIEW 
2a850 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20     0x01.#define 
2a860 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30  LOCATE_NOERR   0
2a870 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  x02.Table *sqlit
2a880 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61  e3LocateTable(Pa
2a890 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63  rse*,u32 flags,c
2a8a0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2a8b0 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
2a8c0 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
2a8d0 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75  bleItem(Parse*,u
2a8e0 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20  32 flags,struct 
2a8f0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
2a900 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46  .Index *sqlite3F
2a910 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33  indIndex(sqlite3
2a920 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
2a930 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2a940 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
2a950 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  ndDeleteTable(sq
2a960 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
2a970 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2a980 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2a990 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65  leteIndex(sqlite
2a9a0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
2a9b0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2a9c0 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54  3Vacuum(Parse*,T
2a9d0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2a9e0 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61  te3RunVacuum(cha
2a9f0 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69  r**, sqlite3*, i
2aa00 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  nt);.char *sqlit
2aa10 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
2aa20 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
2aa30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2aa40 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a  prCompare(Parse*
2aa50 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  ,Expr*, Expr*, i
2aa60 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2aa70 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69 70 28  ExprCompareSkip(
2aa80 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
2aa90 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2aaa0 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
2aab0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
2aac0 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
2aad0 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
2aae0 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45 78 70  sExpr(Parse*,Exp
2aaf0 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
2ab00 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2ab10 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f  ImpliesNonNullRo
2ab20 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f  w(Expr*,int);.vo
2ab30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
2ab40 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28  alyzeAggregates(
2ab50 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2ab60 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2ab70 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
2ab80 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74  List(NameContext
2ab90 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
2aba0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 76  t sqlite3ExprCov
2abb0 65 72 65 64 42 79 49 6e 64 65 78 28 45 78 70 72  eredByIndex(Expr
2abc0 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 49 6e 64  *, int iCur, Ind
2abd0 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73  ex *pIdx);.int s
2abe0 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73  qlite3FunctionUs
2abf0 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c  esThisSrc(Expr*,
2ac00 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65   SrcList*);.Vdbe
2ac10 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65   *sqlite3GetVdbe
2ac20 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65  (Parse*);.#ifnde
2ac30 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2ac40 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  BLE.void sqlite3
2ac50 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
2ac60 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
2ac70 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
2ac80 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  e(void);.#endif.
2ac90 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
2aca0 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a  backAll(sqlite3*
2acb0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2acc0 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
2acd0 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ema(Parse*, int)
2ace0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
2acf0 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68  deVerifyNamedSch
2ad00 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ema(Parse*, cons
2ad10 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f  t char *zDb);.vo
2ad20 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
2ad30 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
2ad40 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2ad50 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61 63 74  lite3EndTransact
2ad60 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  ion(Parse*,int);
2ad70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76  .void sqlite3Sav
2ad80 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  epoint(Parse*, i
2ad90 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  nt, Token*);.voi
2ada0 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61  d sqlite3CloseSa
2adb0 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33  vepoints(sqlite3
2adc0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2add0 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c  3LeaveMutexAndCl
2ade0 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65  oseZombie(sqlite
2adf0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2ae00 45 78 70 72 49 64 54 6f 54 72 75 65 46 61 6c 73  ExprIdToTrueFals
2ae10 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
2ae20 6c 69 74 65 33 45 78 70 72 54 72 75 74 68 56 61  lite3ExprTruthVa
2ae30 6c 75 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  lue(const Expr*)
2ae40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2ae50 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  rIsConstant(Expr
2ae60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2ae70 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74  xprIsConstantNot
2ae80 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  Join(Expr*);.int
2ae90 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
2aea0 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e  nstantOrFunction
2aeb0 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74  (Expr*, u8);.int
2aec0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
2aed0 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28  nstantOrGroupBy(
2aee0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Parse*, Expr*, E
2aef0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2af00 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62 6c  qlite3ExprIsTabl
2af10 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c  eConstant(Expr*,
2af20 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
2af30 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f  ITE_ENABLE_CURSO
2af40 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69  R_HINTS.int sqli
2af50 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53  te3ExprContainsS
2af60 75 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a  ubquery(Expr*);.
2af70 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2af80 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28  e3ExprIsInteger(
2af90 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
2afa0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e  t sqlite3ExprCan
2afb0 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70  BeNull(const Exp
2afc0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2afd0 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e  ExprNeedsNoAffin
2afe0 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20  ityChange(const 
2aff0 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e  Expr*, char);.in
2b000 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64  t sqlite3IsRowid
2b010 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
2b020 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
2b030 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20  ateRowDelete(.  
2b040 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c    Parse*,Table*,
2b050 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74  Trigger*,int,int
2b060 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75  ,int,i16,u8,u8,u
2b070 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  8,int);.void sql
2b080 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49  ite3GenerateRowI
2b090 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65  ndexDelete(Parse
2b0a0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2b0b0 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
2b0c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
2b0d0 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
2b0e0 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
2b0f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
2b100 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Index*,int);.vo
2b110 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
2b120 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61  ePartIdxLabel(Pa
2b130 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
2b140 71 6c 69 74 65 33 45 78 70 72 52 65 66 65 72 65  qlite3ExprRefere
2b150 6e 63 65 73 55 70 64 61 74 65 64 43 6f 6c 75 6d  ncesUpdatedColum
2b160 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c 69 6e 74  n(Expr*,int*,int
2b170 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
2b180 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
2b190 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
2b1a0 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69  able*,int*,int,i
2b1b0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  nt,int,int,.    
2b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1e0 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c   u8,u8,int,int*,
2b1f0 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 23  int*,Upsert*);.#
2b200 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2b210 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20  BLE_NULL_TRIM.  
2b220 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d  void sqlite3SetM
2b230 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62 65  akeRecordP5(Vdbe
2b240 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  *,Table*);.#else
2b250 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2b260 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35  3SetMakeRecordP5
2b270 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69  (A,B).#endif.voi
2b280 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
2b290 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
2b2a0 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
2b2b0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
2b2c0 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
2b2d0 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
2b2e0 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
2b2f0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20  able*, int, u8, 
2b300 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20  int, u8*, int*, 
2b310 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
2b320 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
2b330 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
2b340 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2b350 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
2b360 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
2b370 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
2b380 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
2b390 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
2b3a0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
2b3b0 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20  int, char*, i8, 
2b3c0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2b3d0 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e  3UniqueConstrain
2b3e0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49  t(Parse*, int, I
2b3f0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
2b400 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61  ite3RowidConstra
2b410 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
2b420 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a   Table*);.Expr *
2b430 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
2b440 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
2b450 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
2b460 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
2b470 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
2b480 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
2b490 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
2b4a0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
2b4b0 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
2b4c0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
2b4d0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
2b4e0 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
2b4f0 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
2b500 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
2b510 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t*,int);.void sq
2b520 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74  lite3InsertBuilt
2b530 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a  inFuncs(FuncDef*
2b540 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a  ,int);.FuncDef *
2b550 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74  sqlite3FindFunct
2b560 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ion(sqlite3*,con
2b570 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c  st char*,int,u8,
2b580 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2b590 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
2b5a0 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
2b5b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2b5c0 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
2b5d0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
2b5e0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
2b5f0 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42  erPerConnectionB
2b600 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
2b610 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2b620 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
2b630 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
2b640 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
2b650 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
2b660 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2b670 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
2b680 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
2b690 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2b6a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
2b6b0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2b6c0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
2b6d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
2b6e0 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
2b6f0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
2b700 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78  r*, ExprList*,Ex
2b710 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  pr*,int);.#endif
2b720 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2b730 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
2b740 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
2b750 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
2b760 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
2b770 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
2b780 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
2b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7a0 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
2b7b0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2b7c0 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
2b7d0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
2b7e0 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
2b7f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
2b800 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
2b810 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
2b820 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2b830 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
2b840 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
2b850 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
2b860 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
2b870 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
2b880 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
2b890 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
2b8a0 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
2b8b0 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
2b8c0 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
2b8d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2b8e0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
2b8f0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
2b900 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
2b910 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
2b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b930 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
2b940 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
2b950 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
2b960 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
2b970 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
2b980 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
2b990 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
2b9a0 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
2b9b0 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
2b9c0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
2b9d0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
2b9e0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2b9f0 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
2ba00 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
2ba10 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
2ba20 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2ba30 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
2ba40 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a  lite3*,Select*,.
2ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba70 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2ba80 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2ba90 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2baa0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49  *sqlite3TriggerI
2bab0 6e 73 65 72 74 53 74 65 70 28 50 61 72 73 65 2a  nsertStep(Parse*
2bac0 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
2bad0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2baf0 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74            Select
2bb00 2a 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20 20  *,u8,Upsert*,.  
2bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb30 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2bb40 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2bb50 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
2bb60 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
2bb70 61 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54  ateStep(Parse*,T
2bb80 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
2bb90 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20   Expr*, u8,.    
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbc0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2bbd0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2bbe0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2bbf0 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74  ite3TriggerDelet
2bc00 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b  eStep(Parse*,Tok
2bc10 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20  en*, Expr*,.    
2bc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc40 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2bc50 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2bc60 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2bc70 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
2bc80 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  3*, Trigger*);. 
2bc90 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c   void sqlite3Unl
2bca0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
2bcb0 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ger(sqlite3*,int
2bcc0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2bcd0 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67   u32 sqlite3Trig
2bce0 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65  gerColmask(Parse
2bcf0 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c  *,Trigger*,ExprL
2bd00 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62  ist*,int,int,Tab
2bd10 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69  le*,int);.# defi
2bd20 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
2bd30 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
2bd40 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29  >pToplevel ? (p)
2bd50 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70  ->pToplevel : (p
2bd60 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
2bd70 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29  te3IsToplevel(p)
2bd80 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
2bd90 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
2bda0 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
2bdb0 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45  ersExist(B,C,D,E
2bdc0 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
2bdd0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
2bde0 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
2bdf0 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
2be00 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
2be10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
2be20 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
2be30 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
2be40 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
2be50 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
2be60 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64  D,E,F,G,H,I).# d
2be70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
2be80 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
2be90 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23  t(A,B,C,D,E,F).#
2bea0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
2beb0 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29  riggerList(X, Y)
2bec0 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
2bed0 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
2bee0 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73  (p) p.# define s
2bef0 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c  qlite3IsToplevel
2bf00 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73  (p) 1.# define s
2bf10 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
2bf20 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  mask(A,B,C,D,E,F
2bf30 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e  ,G) 0.#endif..in
2bf40 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70  t sqlite3JoinTyp
2bf50 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2bf60 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2bf70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2bf80 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28  reateForeignKey(
2bf90 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2bfa0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  *, Token*, ExprL
2bfb0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
2bfc0 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72   sqlite3DeferFor
2bfd0 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
2bfe0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
2bff0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
2c000 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73  IZATION.  void s
2c010 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50  qlite3AuthRead(P
2c020 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65  arse*,Expr*,Sche
2c030 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20  ma*,SrcList*);. 
2c040 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
2c050 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74  Check(Parse*,int
2c060 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2c070 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2c080 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
2c090 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2c0a0 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20  extPush(Parse*, 
2c0b0 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f  AuthContext*, co
2c0c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2c0d0 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
2c0e0 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e  ntextPop(AuthCon
2c0f0 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  text*);.  int sq
2c100 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c  lite3AuthReadCol
2c110 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2c120 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
2c130 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  r *, int);.#else
2c140 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2c150 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c  3AuthRead(a,b,c,
2c160 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  d).# define sqli
2c170 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62  te3AuthCheck(a,b
2c180 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54  ,c,d,e)    SQLIT
2c190 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71  E_OK.# define sq
2c1a0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
2c1b0 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65  Push(a,b,c).# de
2c1c0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
2c1d0 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28  ContextPop(a)  (
2c1e0 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69  (void)(a)).#endi
2c1f0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74  f.void sqlite3At
2c200 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
2c210 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  r*, Expr*, Expr*
2c220 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2c230 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  etach(Parse*, Ex
2c240 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2c250 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65  e3FixInit(DbFixe
2c260 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c  r*, Parse*, int,
2c270 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2c280 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  nst Token*);.int
2c290 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69   sqlite3FixSrcLi
2c2a0 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63  st(DbFixer*, Src
2c2b0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2c2c0 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46  te3FixSelect(DbF
2c2d0 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ixer*, Select*);
2c2e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
2c2f0 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78  xpr(DbFixer*, Ex
2c300 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2c310 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46  3FixExprList(DbF
2c320 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ixer*, ExprList*
2c330 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2c340 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46  xTriggerStep(DbF
2c350 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74  ixer*, TriggerSt
2c360 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ep*);.int sqlite
2c370 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
2c380 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e   *z, double*, in
2c390 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
2c3a0 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73  te3GetInt32(cons
2c3b0 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b  t char *, int*);
2c3c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
2c3d0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
2c3e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c3f0 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c  IT_UTF16.int sql
2c400 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
2c410 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
2c420 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
2c430 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2c440 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
2c450 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
2c460 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
2c470 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
2c480 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f  (const u8**);.Lo
2c490 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2c4a0 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20  st(u64);.LogEst 
2c4b0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64  sqlite3LogEstAdd
2c4c0 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b  (LogEst,LogEst);
2c4d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c4e0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2c4f0 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  E.LogEst sqlite3
2c500 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65  LogEstFromDouble
2c510 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66  (double);.#endif
2c520 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2c530 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
2c540 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c  SCANSTATUS) || \
2c550 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
2c560 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
2c570 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a  _OR_STAT4) || \.
2c580 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
2c590 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d  TE_EXPLAIN_ESTIM
2c5a0 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73  ATED_ROWS).u64 s
2c5b0 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
2c5c0 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69  t(LogEst);.#endi
2c5d0 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  f.VList *sqlite3
2c5e0 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33  VListAdd(sqlite3
2c5f0 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  *,VList*,const c
2c600 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63  har*,int,int);.c
2c610 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2c620 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65  e3VListNumToName
2c630 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e  (VList*,int);.in
2c640 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61  t sqlite3VListNa
2c650 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63  meToNum(VList*,c
2c660 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2c670 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
2c680 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69   to read and wri
2c690 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  te variable-leng
2c6a0 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68  th integers.  Th
2c6b0 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ese used to.** b
2c6c0 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c  e defined locall
2c6d0 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73  y, but now we us
2c6e0 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75  e the varint rou
2c6f0 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69  tines in the uti
2c700 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a  l.c.** file..*/.
2c710 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
2c720 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  rint(unsigned ch
2c730 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71  ar*, u64);.u8 sq
2c740 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63  lite3GetVarint(c
2c750 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2c760 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38  ar *, u64 *);.u8
2c770 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2c780 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  t32(const unsign
2c790 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a  ed char *, u32 *
2c7a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
2c7b0 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a  rintLen(u64 v);.
2c7c0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f  ./*.** The commo
2c7d0 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20  n case is for a 
2c7e0 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73  varint to be a s
2c7f0 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65  ingle byte.  The
2c800 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d  y following.** m
2c810 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65  acros handle the
2c820 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74   common case wit
2c830 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65  hout a procedure
2c840 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20   call, but then 
2c850 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63  call.** the proc
2c860 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72  edure for larger
2c870 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65   varints..*/.#de
2c880 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32  fine getVarint32
2c890 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
2c8a0 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f  (*(A)<(u8)0x80)?
2c8b0 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c  ((B)=(u32)*(A)),
2c8c0 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  1:sqlite3GetVari
2c8d0 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29  nt32((A),(u32 *)
2c8e0 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70  &(B))).#define p
2c8f0 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  utVarint32(A,B) 
2c900 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29   \.  (u8)(((u32)
2c910 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28  (B)<(u32)0x80)?(
2c920 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63  *(A)=(unsigned c
2c930 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73  har)(B)),1:\.  s
2c940 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
2c950 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e  (A),(B))).#defin
2c960 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73  e getVarint    s
2c970 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a  qlite3GetVarint.
2c980 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
2c990 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56  t    sqlite3PutV
2c9a0 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68  arint...const ch
2c9b0 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  ar *sqlite3Index
2c9c0 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69  AffinityStr(sqli
2c9d0 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76  te3*, Index*);.v
2c9e0 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
2c9f0 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20  Affinity(Vdbe*, 
2ca00 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68  Table*, int);.ch
2ca10 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
2ca20 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
2ca30 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
2ca40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2ca50 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
2ca60 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
2ca70 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
2ca80 68 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65  har sqlite3Table
2ca90 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54  ColumnAffinity(T
2caa0 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72  able*,int);.char
2cab0 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69   sqlite3ExprAffi
2cac0 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
2cad0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2cae0 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oi64(const char*
2caf0 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29  , i64*, int, u8)
2cb00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63  ;.int sqlite3Dec
2cb10 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74  OrHexToI64(const
2cb20 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76   char*, i64*);.v
2cb30 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
2cb40 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a  WithMsg(sqlite3*
2cb50 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2cb60 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  r*,...);.void sq
2cb70 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74  lite3Error(sqlit
2cb80 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
2cb90 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f  qlite3SystemErro
2cba0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  r(sqlite3*,int);
2cbb0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
2cbc0 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
2cbd0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
2cbe0 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
2cbf0 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
2cc00 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
2cc10 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
2cc20 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
2cc30 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
2cc40 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
2cc50 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
2cc60 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  ME).const char *
2cc70 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69  sqlite3ErrName(i
2cc80 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
2cc90 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2cca0 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e  E_DESERIALIZE.in
2ccb0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e  t sqlite3MemdbIn
2ccc0 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  it(void);.#endif
2ccd0 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
2cce0 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
2ccf0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
2cd00 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
2cd10 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
2cd20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
2cd30 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
2cd40 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
2cd50 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
2cd60 65 33 49 73 42 69 6e 61 72 79 28 63 6f 6e 73 74  e3IsBinary(const
2cd70 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c   CollSeq*);.Coll
2cd80 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
2cd90 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
2cda0 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
2cdb0 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
2cdc0 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
2cdd0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2cde0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
2cdf0 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  pr);.CollSeq *sq
2ce00 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53  lite3ExprNNCollS
2ce10 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2ce20 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
2ce30 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2ce40 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72 73  ollSeqMatch(Pars
2ce50 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  e*,Expr*,Expr*);
2ce60 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2ce70 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
2ce80 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
2ce90 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
2cea0 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  ken*, int);.Expr
2ceb0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
2cec0 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
2ced0 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
2cee0 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
2cef0 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
2cf00 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
2cf10 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
2cf20 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
2cf30 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
2cf40 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
2cf50 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
2cf60 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
2cf70 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
2cf80 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
2cf90 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
2cfa0 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
2cfb0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2cfc0 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
2cfd0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
2cfe0 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
2cff0 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
2d000 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
2d010 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2d020 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
2d030 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
2d040 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
2d050 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
2d060 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2d070 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
2d080 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
2d090 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
2d0a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38  const char *z,u8
2d0b0 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
2d0c0 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
2d0d0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
2d0e0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2d0f0 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
2d100 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
2d110 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2d120 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
2d130 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
2d140 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20  nst void *,u8,. 
2d150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d160 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76         void(*)(v
2d170 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
2d180 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c  ite3ValueSetNull
2d190 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2d1a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2d1b0 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
2d1c0 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33  value*);.sqlite3
2d1d0 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56  _value *sqlite3V
2d1e0 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20  alueNew(sqlite3 
2d1f0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2d200 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 68  TE_OMIT_UTF16.ch
2d210 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36  ar *sqlite3Utf16
2d220 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  to8(sqlite3 *, c
2d230 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
2d240 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74   u8);.#endif.int
2d250 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
2d260 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
2d270 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
2d280 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2d290 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d2a0 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2d2b0 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
2d2c0 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
2d2d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
2d2e0 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
2d2f0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2d300 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
2d310 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
2d320 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20 73  ern const char s
2d330 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59 5b  qlite3StrBINARY[
2d340 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
2d350 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
2d360 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
2d370 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  r[];.extern cons
2d380 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2d390 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
2d3a0 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
2d3b0 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74  Token sqlite3Int
2d3c0 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e  Tokens[];.extern
2d3d0 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75   SQLITE_WSD stru
2d3e0 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
2d3f0 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a   sqlite3Config;.
2d400 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48 61  extern FuncDefHa
2d410 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69  sh sqlite3Builti
2d420 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  nFunctions;.#ifn
2d430 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d440 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
2d450 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
2d460 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
2d470 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
2d480 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71 6c 69  FILE.extern sqli
2d490 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c 69 74  te3_uint64 sqlit
2d4a0 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b 0a 23  e3NProfileCnt;.#
2d4b0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2d4c0 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2d4d0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2d4e0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2d4f0 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61  qlite3Reindex(Pa
2d500 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2d510 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2d520 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e  te3AlterFunction
2d530 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
2d540 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65  lite3AlterRename
2d550 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2d560 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  cList*, Token*);
2d570 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2d580 65 72 52 65 6e 61 6d 65 43 6f 6c 75 6d 6e 28 50  erRenameColumn(P
2d590 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2d5a0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2d5b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
2d5c0 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69  Token(const unsi
2d5d0 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74  gned char *, int
2d5e0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2d5f0 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72  3NestedParse(Par
2d600 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
2d610 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
2d620 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
2d630 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c  edStatements(sql
2d640 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  ite3*, int);.int
2d650 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73   sqlite3CodeSubs
2d660 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78  elect(Parse*, Ex
2d670 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  pr *, int, int);
2d680 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
2d690 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20  ectPrep(Parse*, 
2d6a0 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
2d6b0 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  text*);.void sql
2d6c0 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e  ite3SelectWrongN
2d6d0 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72  umTermsError(Par
2d6e0 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65  se *pParse, Sele
2d6f0 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69  ct *p);.int sqli
2d700 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65  te3MatchSpanName
2d710 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  (const char*, co
2d720 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2d730 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2d740 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
2d750 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65  3ResolveExprName
2d760 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
2d770 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2d780 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69  te3ResolveExprLi
2d790 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  stNames(NameCont
2d7a0 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ext*, ExprList*)
2d7b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2d7c0 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73  solveSelectNames
2d7d0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
2d7e0 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
2d7f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2d800 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63  olveSelfReferenc
2d810 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  e(Parse*,Table*,
2d820 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  int,Expr*,ExprLi
2d830 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2d840 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f  3ResolveOrderGro
2d850 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c  upBy(Parse*, Sel
2d860 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ect*, ExprList*,
2d870 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
2d880 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
2d890 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c  nDefault(Vdbe *,
2d8a0 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
2d8b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2d8c0 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43  3AlterFinishAddC
2d8d0 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54  olumn(Parse *, T
2d8e0 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
2d8f0 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41  lite3AlterBeginA
2d900 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
2d910 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 76 6f  , SrcList *);.vo
2d920 69 64 20 2a 73 71 6c 69 74 65 33 52 65 6e 61 6d  id *sqlite3Renam
2d930 65 54 6f 6b 65 6e 4d 61 70 28 50 61 72 73 65 2a  eTokenMap(Parse*
2d940 2c 20 76 6f 69 64 2a 2c 20 54 6f 6b 65 6e 2a 29  , void*, Token*)
2d950 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2d960 6e 61 6d 65 54 6f 6b 65 6e 52 65 6d 61 70 28 50  nameTokenRemap(P
2d970 61 72 73 65 2a 2c 20 76 6f 69 64 20 2a 70 54 6f  arse*, void *pTo
2d980 2c 20 76 6f 69 64 20 2a 70 46 72 6f 6d 29 3b 0a  , void *pFrom);.
2d990 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61  void sqlite3Rena
2d9a0 6d 65 45 78 70 72 55 6e 6d 61 70 28 50 61 72 73  meExprUnmap(Pars
2d9b0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
2d9c0 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 45 78   sqlite3RenameEx
2d9d0 70 72 6c 69 73 74 55 6e 6d 61 70 28 50 61 72 73  prlistUnmap(Pars
2d9e0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  e*, ExprList*);.
2d9f0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2da00 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  GetCollSeq(Parse
2da10 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a  *, u8, CollSeq *
2da20 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2da30 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69  char sqlite3Affi
2da40 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63  nityType(const c
2da50 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a  har*, Column*);.
2da60 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
2da70 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  yze(Parse*, Toke
2da80 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
2da90 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75   sqlite3InvokeBu
2daa0 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61  syHandler(BusyHa
2dab0 6e 64 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33 5f  ndler*, sqlite3_
2dac0 66 69 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  file*);.int sqli
2dad0 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65  te3FindDb(sqlite
2dae0 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
2daf0 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61   sqlite3FindDbNa
2db00 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  me(sqlite3 *, co
2db10 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
2db20 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
2db30 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Load(sqlite3*,in
2db40 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c  t iDB);.void sql
2db50 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53  ite3DeleteIndexS
2db60 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c  amples(sqlite3*,
2db70 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
2db80 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45  lite3DefaultRowE
2db90 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  st(Index*);.void
2dba0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
2dbb0 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71  LikeFunctions(sq
2dbc0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e  lite3*, int);.in
2dbd0 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46  t sqlite3IsLikeF
2dbe0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
2dbf0 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72  ,Expr*,int*,char
2dc00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2dc10 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64  SchemaClear(void
2dc20 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c   *);.Schema *sql
2dc30 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71  ite3SchemaGet(sq
2dc40 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a  lite3 *, Btree *
2dc50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63  );.int sqlite3Sc
2dc60 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69  hemaToIndex(sqli
2dc70 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20  te3 *db, Schema 
2dc80 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
2dc90 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63  ite3KeyInfoAlloc
2dca0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e  (sqlite3*,int,in
2dcb0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2dcc0 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79  KeyInfoUnref(Key
2dcd0 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
2dce0 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52  *sqlite3KeyInfoR
2dcf0 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
2dd00 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
2dd10 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72  yInfoOfIndex(Par
2dd20 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b 65  se*, Index*);.Ke
2dd30 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
2dd40 79 49 6e 66 6f 46 72 6f 6d 45 78 70 72 4c 69 73  yInfoFromExprLis
2dd50 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  t(Parse*, ExprLi
2dd60 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
2dd70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2dd80 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33  EBUG.int sqlite3
2dd90 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62  KeyInfoIsWriteab
2dda0 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65  le(KeyInfo*);.#e
2ddb0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2ddc0 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
2ddd0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
2dde0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
2ddf0 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29  id *,.  void (*)
2de00 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2de10 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2de20 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
2de30 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2de40 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
2de50 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 76  _value **), .  v
2de60 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2de70 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69  context*),.  voi
2de80 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2de90 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20  ntext*),.  void 
2dea0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2deb0 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
2dec0 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 46  _value **), .  F
2ded0 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
2dee0 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f  Destructor.);.vo
2def0 69 64 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44 65  id sqlite3NoopDe
2df00 73 74 72 75 63 74 6f 72 28 76 6f 69 64 2a 29 3b  structor(void*);
2df10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d  .void sqlite3Oom
2df20 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b  Fault(sqlite3*);
2df30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d  .void sqlite3Oom
2df40 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b  Clear(sqlite3*);
2df50 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45  .int sqlite3ApiE
2df60 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  xit(sqlite3 *db,
2df70 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2df80 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
2df90 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f  se(Parse *);..vo
2dfa0 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
2dfb0 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a  umInit(StrAccum*
2dfc0 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  , sqlite3*, char
2dfd0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63 68  *, int, int);.ch
2dfe0 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63  ar *sqlite3StrAc
2dff0 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63  cumFinish(StrAcc
2e000 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
2e010 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
2e020 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
2e030 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
2e040 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e  ite3CreateColumn
2e050 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
2e060 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20  SrcList *, int, 
2e070 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  int);..void sqli
2e080 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74  te3BackupRestart
2e090 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
2e0a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e0b0 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c  BackupUpdate(sql
2e0c0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50  ite3_backup *, P
2e0d0 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29  gno, const u8 *)
2e0e0 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
2e0f0 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a  E_OMIT_SUBQUERY.
2e100 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2e110 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45  heckIN(Parse*, E
2e120 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  xpr*);.#else.# d
2e130 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
2e140 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51  rCheckIN(x,y) SQ
2e150 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a  LITE_OK.#endif..
2e160 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2e170 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
2e180 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  AT4.void sqlite3
2e190 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73  AnalyzeFunctions
2e1a0 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
2e1b0 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74  te3Stat4ProbeSet
2e1c0 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65  Value(.    Parse
2e1d0 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65  *,Index*,Unpacke
2e1e0 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c  dRecord**,Expr*,
2e1f0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69  int,int,int*);.i
2e200 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56  nt sqlite3Stat4V
2e210 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72  alueFromExpr(Par
2e220 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20  se*, Expr*, u8, 
2e230 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2e240 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
2e250 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70  at4ProbeFree(Unp
2e260 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69  ackedRecord*);.i
2e270 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43  nt sqlite3Stat4C
2e280 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20  olumn(sqlite3*, 
2e290 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2e2a0 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
2e2b0 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71  alue**);.char sq
2e2c0 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e  lite3IndexColumn
2e2d0 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
2e2e0 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b  *, Index*, int);
2e2f0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2e300 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
2e310 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61  the LEMON-genera
2e320 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69  ted parser.*/.#i
2e330 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
2e340 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64  LGAMATION.  void
2e350 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41   *sqlite3ParserA
2e360 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36  lloc(void*(*)(u6
2e370 34 29 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20 76  4), Parse*);.  v
2e380 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2e390 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69  rFree(void*, voi
2e3a0 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65  d(*)(void*));.#e
2e3b0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2e3c0 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69  3Parser(void*, i
2e3d0 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74 20  nt, Token);.int 
2e3e0 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 61 6c  sqlite3ParserFal
2e3f0 6c 62 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66 64  lback(int);.#ifd
2e400 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
2e410 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
2e420 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
2e430 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
2e440 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
2e450 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
2e460 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
2e470 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e480 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
2e490 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
2e4a0 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
2e4b0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
2e4c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2e4d0 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
2e4e0 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
2e4f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e500 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
2e510 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
2e520 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
2e530 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
2e540 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
2e550 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2e560 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
2e570 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
2e580 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
2e590 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
2e5a0 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
2e5b0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
2e5c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
2e5d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2e5e0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2e5f0 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
2e600 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2e610 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
2e620 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
2e630 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
2e640 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
2e650 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
2e660 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
2e670 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
2e680 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
2e690 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
2e6a0 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2e6b0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2e6c0 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2e6d0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2e6e0 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e  List(X).#  defin
2e6f0 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  e sqlite3VtabSav
2e700 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20  epoint(X, Y, Z) 
2e710 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
2e720 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54  ine sqlite3GetVT
2e730 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61  able(X,Y)  ((VTa
2e740 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20  ble*)0).#else.  
2e750 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2e760 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a  bClear(sqlite3 *
2e770 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  db, Table*);.   
2e780 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2e790 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74  Disconnect(sqlit
2e7a0 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70  e3 *db, Table *p
2e7b0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2e7c0 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65  3VtabSync(sqlite
2e7d0 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20  3 *db, Vdbe*);. 
2e7e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2e7f0 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65  bRollback(sqlite
2e800 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73  3 *db);.   int s
2e810 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
2e820 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2e830 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2e840 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  abLock(VTable *)
2e850 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2e860 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62  3VtabUnlock(VTab
2e870 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
2e880 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2e890 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  List(sqlite3*);.
2e8a0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2e8b0 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69  abSavepoint(sqli
2e8c0 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  te3 *, int, int)
2e8d0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2e8e0 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
2e8f0 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33  g(Vdbe*, sqlite3
2e900 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62  _vtab*);.   VTab
2e910 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
2e920 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
2e930 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c  able*);.   Modul
2e940 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72  e *sqlite3VtabCr
2e950 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20  eateModule(.    
2e960 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20   sqlite3*,.     
2e970 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
2e980 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2e990 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f  module*,.     vo
2e9a0 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a  id*,.     void(*
2e9b0 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23  )(void*).   );.#
2e9c0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2e9d0 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28  VtabInSync(db) (
2e9e0 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20  (db)->nVTrans>0 
2e9f0 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73  && (db)->aVTrans
2ea00 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ==0).#endif.int 
2ea10 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79  sqlite3VtabEpony
2ea20 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61  mousTableInit(Pa
2ea30 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  rse*,Module*);.v
2ea40 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45  oid sqlite3VtabE
2ea50 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65  ponymousTableCle
2ea60 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75  ar(sqlite3*,Modu
2ea70 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2ea80 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62  e3VtabMakeWritab
2ea90 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  le(Parse*,Table*
2eaa0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2eab0 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61  tabBeginParse(Pa
2eac0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2ead0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ken*, Token*, in
2eae0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2eaf0 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
2eb00 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
2eb10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2eb20 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
2eb30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2eb40 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
2eb50 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
2eb60 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2eb70 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
2eb80 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2eb90 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
2eba0 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2ebb0 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
2ebc0 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
2ebd0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
2ebe0 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
2ebf0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
2ec00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2ec10 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
2ec20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
2ec30 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
2ec40 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
2ec50 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
2ec60 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
2ec70 20 45 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33   Expr*);.sqlite3
2ec80 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
2ec90 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71  mtCurrentTime(sq
2eca0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
2ecb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
2ecc0 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
2ecd0 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
2ece0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2ecf0 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
2ed00 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
2ed10 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
2ed20 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
2ed30 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61  e3ParserReset(Pa
2ed40 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
2ed50 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
2ed60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ed70 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
2ed80 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
2ed90 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
2eda0 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
2edb0 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
2edc0 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
2edd0 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
2ede0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
2edf0 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
2ee00 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
2ee10 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2ee20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
2ee30 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
2ee40 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2ee50 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2ee60 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
2ee70 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
2ee80 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
2ee90 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
2eea0 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
2eeb0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2eec0 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  t);.#endif.#ifnd
2eed0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
2eee0 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74  TE.  With *sqlit
2eef0 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a  e3WithAdd(Parse*
2ef00 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  ,With*,Token*,Ex
2ef10 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29  prList*,Select*)
2ef20 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2ef30 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74  WithDelete(sqlit
2ef40 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f  e3*,With*);.  vo
2ef50 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  id sqlite3WithPu
2ef60 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a  sh(Parse*, With*
2ef70 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65  , u8);.#else.#de
2ef80 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
2ef90 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66  Push(x,y,z).#def
2efa0 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44  ine sqlite3WithD
2efb0 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69  elete(x,y).#endi
2efc0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2efd0 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20 20 55  _OMIT_UPSERT.  U
2efe0 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70  psert *sqlite3Up
2eff0 73 65 72 74 4e 65 77 28 73 71 6c 69 74 65 33 2a  sertNew(sqlite3*
2f000 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
2f010 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
2f020 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2f030 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 73 71  3UpsertDelete(sq
2f040 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b  lite3*,Upsert*);
2f050 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74  .  Upsert *sqlit
2f060 65 33 55 70 73 65 72 74 44 75 70 28 73 71 6c 69  e3UpsertDup(sqli
2f070 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20  te3*,Upsert*);. 
2f080 20 69 6e 74 20 73 71 6c 69 74 65 33 55 70 73 65   int sqlite3Upse
2f090 72 74 41 6e 61 6c 79 7a 65 54 61 72 67 65 74 28  rtAnalyzeTarget(
2f0a0 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
2f0b0 55 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64  Upsert*);.  void
2f0c0 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 6f   sqlite3UpsertDo
2f0d0 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 55 70  Update(Parse*,Up
2f0e0 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64  sert*,Table*,Ind
2f0f0 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  ex*,int);.#else.
2f100 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55  #define sqlite3U
2f110 70 73 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79  psertNew(v,w,x,y
2f120 2c 7a 29 20 28 28 55 70 73 65 72 74 2a 29 30 29  ,z) ((Upsert*)0)
2f130 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2f140 55 70 73 65 72 74 44 65 6c 65 74 65 28 78 2c 79  UpsertDelete(x,y
2f150 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
2f160 33 55 70 73 65 72 74 44 75 70 28 78 2c 79 29 20  3UpsertDup(x,y) 
2f170 20 20 20 20 20 20 28 28 55 70 73 65 72 74 2a 29        ((Upsert*)
2f180 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44  0).#endif.../* D
2f190 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
2f1a0 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65  functions in fke
2f1b0 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73  y.c. All of thes
2f1c0 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  e are replaced b
2f1d0 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f  y.** no-op macro
2f1e0 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47  s if OMIT_FOREIG
2f1f0 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64  N_KEY is defined
2f200 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e  . In this case n
2f210 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  o foreign.** key
2f220 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
2f230 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20  s available. If 
2f240 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20  OMIT_TRIGGER is 
2f250 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f  defined but.** O
2f260 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
2f270 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d  is not, only som
2f280 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
2f290 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20  ns are no-oped. 
2f2a0 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20  In.** this case 
2f2b0 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65  foreign keys are
2f2c0 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20   parsed, but no 
2f2d0 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c  other functional
2f2e0 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64  ity is.** provid
2f2f0 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
2f300 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
2f310 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
2f320 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
2f330 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
2f340 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2f350 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
2f360 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2f370 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
2f380 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
2f390 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
2f3a0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
2f3b0 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
2f3c0 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
2f3d0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
2f3e0 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
2f3f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2f400 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
2f410 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
2f420 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
2f430 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
2f440 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
2f450 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2f460 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
2f470 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
2f480 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2f490 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
2f4a0 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
2f4b0 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
2f4c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2f4d0 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
2f4e0 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
2f4f0 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
2f500 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
2f510 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
2f520 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
2f530 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2f540 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
2f550 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
2f560 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
2f570 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
2f580 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2f590 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
2f5a0 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e  (a)        0.#en
2f5b0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
2f5c0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2f5d0 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
2f5e0 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
2f5f0 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
2f600 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
2f610 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
2f620 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
2f630 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
2f640 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2f650 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
2f660 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
2f670 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2f680 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
2f690 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
2f6a0 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
2f6b0 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
2f6c0 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
2f6d0 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
2f6e0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
2f6f0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
2f700 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
2f710 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
2f720 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
2f730 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
2f740 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
2f750 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
2f760 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
2f770 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
2f780 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
2f790 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
2f7a0 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
2f7b0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69  _UNTESTABLE.** i
2f7c0 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
2f7d0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2f7e0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f  _UNTESTABLE.  vo
2f7f0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
2f800 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
2f810 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2f820 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
2f830 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
2f840 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
2f850 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
2f860 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
2f870 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
2f880 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  loc().#endif../*
2f890 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  .** Allowed retu
2f8a0 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
2f8b0 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2f8c0 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  x().*/.#define I
2f8d0 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20  N_INDEX_ROWID   
2f8e0 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72       1   /* Sear
2f8f0 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ch the rowid of 
2f900 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  the table */.#de
2f910 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50  fine IN_INDEX_EP
2f920 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f  H          2   /
2f930 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65  * Search an ephe
2f940 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a  meral b-tree */.
2f950 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2f960 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20  _INDEX_ASC    3 
2f970 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
2f980 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f  dex ASCENDING */
2f990 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2f9a0 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34  X_INDEX_DESC   4
2f9b0 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2f9c0 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20  ndex DESCENDING 
2f9d0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2f9e0 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20  DEX_NOOP        
2f9f0 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65   5   /* No table
2fa00 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20   available. Use 
2fa10 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f  comparisons */./
2fa20 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61  *.** Allowed fla
2fa30 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70  gs for the 3rd p
2fa40 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
2fa50 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
2fa60 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ..*/.#define IN_
2fa70 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20  INDEX_NOOP_OK   
2fa80 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20    0x0001  /* OK 
2fa90 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44  to return IN_IND
2faa0 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69  EX_NOOP */.#defi
2fab0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42  ne IN_INDEX_MEMB
2fac0 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20  ERSHIP  0x0002  
2fad0 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2fae0 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68  sed for membersh
2faf0 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69  ip test */.#defi
2fb00 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50  ne IN_INDEX_LOOP
2fb10 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
2fb20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2fb30 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f  sed as a loop */
2fb40 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
2fb50 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
2fb60 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e   Expr *, u32, in
2fb70 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20  t*, int*);..int 
2fb80 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70  sqlite3JournalOp
2fb90 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
2fba0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2fbb0 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20  sqlite3_file *, 
2fbc0 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
2fbd0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
2fbe0 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29  e(sqlite3_vfs *)
2fbf0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
2fc00 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
2fc10 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20  IC_WRITE) \. || 
2fc20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2fc30 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
2fc40 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20  IC_WRITE).  int 
2fc50 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
2fc60 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
2fc70 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e *);.#endif..in
2fc80 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2fc90 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74  IsInMemory(sqlit
2fca0 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69  e3_file *p);.voi
2fcb0 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
2fcc0 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
2fcd0 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  file *);..void s
2fce0 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69  qlite3ExprSetHei
2fcf0 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73  ghtAndFlags(Pars
2fd00 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2fd10 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  *p);.#if SQLITE_
2fd20 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
2fd30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
2fd40 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
2fd50 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
2fd60 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2fd70 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
2fd80 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
2fd90 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
2fda0 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20  ctExprHeight(x) 
2fdb0 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
2fdc0 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
2fdd0 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  ht(x,y).#endif..
2fde0 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62  u32 sqlite3Get4b
2fdf0 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a  yte(const u8*);.
2fe00 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34  void sqlite3Put4
2fe10 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a  byte(u8*, u32);.
2fe20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2fe30 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
2fe40 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  IFY.  void sqlit
2fe50 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
2fe60 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73  ked(sqlite3 *, s
2fe70 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69  qlite3 *);.  voi
2fe80 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2fe90 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69  ionUnlocked(sqli
2fea0 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64  te3 *db);.  void
2feb0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2fec0 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33  onClosed(sqlite3
2fed0 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23   *db);.#else.  #
2fee0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2fef0 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
2ff00 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73  x,y).  #define s
2ff10 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2ff20 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64  Unlocked(x).  #d
2ff30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
2ff40 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29  nectionClosed(x)
2ff50 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2ff60 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76  SQLITE_DEBUG.  v
2ff70 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2ff80 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68  rTrace(FILE*, ch
2ff90 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ar *);.#endif.#i
2ffa0 66 20 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45  f defined(YYCOVE
2ffb0 52 41 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  RAGE).  int sqli
2ffc0 74 65 33 50 61 72 73 65 72 43 6f 76 65 72 61 67  te3ParserCoverag
2ffd0 65 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66  e(FILE*);.#endif
2ffe0 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ../*.** If the S
2fff0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54  QLITE_ENABLE IOT
30000 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e  RACE exists then
30010 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
30020 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49  able.** sqlite3I
30030 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e  oTrace is a poin
30040 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d  ter to a printf-
30050 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65  like routine use
30060 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f  d to.** print I/
30070 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67  O tracing messag
30080 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  es..*/.#ifdef SQ
30090 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
300a0 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  ACE.# define IOT
300b0 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c  RACE(A)  if( sql
300c0 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73  ite3IoTrace ){ s
300d0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b  qlite3IoTrace A;
300e0 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65   }.  void sqlite
300f0 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
30100 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41  Vdbe*);.SQLITE_A
30110 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e  PI SQLITE_EXTERN
30120 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44   void (SQLITE_CD
30130 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72  ECL *sqlite3IoTr
30140 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
30150 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ,...);.#else.# d
30160 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
30170 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
30180 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
30190 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
301a0 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20   These routines 
301b0 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  are available fo
301c0 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62  r the mem2.c deb
301d0 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c  ugging memory al
301e0 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e  locator.** only.
301f0 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20    They are used 
30200 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64  to verify that d
30210 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22  ifferent "types"
30220 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c   of memory.** al
30230 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72  locations are pr
30240 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62  operly tracked b
30250 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a  y the system..**
30260 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
30270 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74  bugSetType() set
30280 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20  s the "type" of 
30290 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f  an allocation to
302a0 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d   one of.** the M
302b0 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20  EMTYPE_* macros 
302c0 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20  defined below.  
302d0 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65  The type must be
302e0 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a   a bitmask with.
302f0 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20  ** a single bit 
30300 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  set..**.** sqlit
30310 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
30320 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
30330 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62   if any of the b
30340 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
30350 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
30360 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
30370 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
30380 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30390 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71  SetType()..** sq
303a0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
303b0 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64  Type() is intend
303c0 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64  ed for use insid
303d0 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
303e0 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ments..**.** sql
303f0 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
30400 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
30410 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  e if none of the
30420 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
30430 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
30440 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
30450 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
30460 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
30470 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a  ugSetType()..**.
30480 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d  ** Perhaps the m
30490 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f  ost important po
304a0 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65  int is the diffe
304b0 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45  rence between ME
304c0 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e  MTYPE_HEAP.** an
304d0 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  d MEMTYPE_LOOKAS
304e0 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f  IDE.  If an allo
304f0 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50  cation is MEMTYP
30500 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61  E_LOOKASIDE, tha
30510 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69  t means.** it mi
30520 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c  ght have been al
30530 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61  located by looka
30540 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65  side, except the
30550 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a   allocation was.
30560 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20  ** too large or 
30570 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c  lookaside was al
30580 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20  ready full.  It 
30590 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
305a0 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61  verify.** that a
305b0 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20  llocations that 
305c0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
305d0 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f  satisfied by loo
305e0 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a  kaside are not.*
305f0 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f  * passed back to
30600 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
30610 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20  ree() routines. 
30620 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73   Asserts such as
30630 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20   the.** example 
30640 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64  above are placed
30650 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b   on the non-look
30660 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
30670 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a  tines to verify.
30680 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69  ** this constrai
30690 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  nt..**.** All of
306a0 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66   this is no-op f
306b0 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20  or a production 
306c0 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20  build.  It only 
306d0 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c  comes into.** pl
306e0 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49  ay when the SQLI
306f0 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70  TE_MEMDEBUG comp
30700 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
30710 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64  is used..*/.#ifd
30720 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
30730 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
30740 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
30750 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
30760 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
30770 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75  gHasType(void*,u
30780 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
30790 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
307a0 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65  void*,u8);.#else
307b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
307c0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
307d0 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20  (X,Y)  /* no-op 
307e0 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  */.# define sqli
307f0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
30800 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66  pe(X,Y)  1.# def
30810 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
30820 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20  bugNoType(X,Y)  
30830 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e   1.#endif.#defin
30840 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20  e MEMTYPE_HEAP  
30850 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65       0x01  /* Ge
30860 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63  neral heap alloc
30870 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
30880 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  e MEMTYPE_LOOKAS
30890 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65  IDE  0x02  /* He
308a0 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ap that might ha
308b0 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64  ve been lookasid
308c0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  e */.#define MEM
308d0 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20  TYPE_PCACHE     
308e0 30 78 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61  0x04  /* Page ca
308f0 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  che allocations 
30900 2a 2f 0a 0a 23 69 66 20 28 53 51 4c 49 54 45 5f  */..#if (SQLITE_
30910 45 4e 41 42 4c 45 5f 41 50 50 4c 45 5f 53 50 49  ENABLE_APPLE_SPI
30920 3e 30 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f  >0) && defined(_
30930 5f 41 50 50 4c 45 5f 5f 29 0a 0a 2f 2a 0a 2a 2a  _APPLE__)../*.**
30940 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
30950 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
30960 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
30970 74 6f 20 68 6f 6c 64 20 74 68 65 20 70 72 6f 63  to hold the proc
30980 65 73 73 20 49 44 0a 2a 2a 20 61 6e 64 20 72 65  ess ID.** and re
30990 74 75 72 6e 2d 62 79 2d 72 65 66 65 72 65 6e 63  turn-by-referenc
309a0 65 20 6c 6f 63 6b 73 74 61 74 65 20 76 61 6c 75  e lockstate valu
309b0 65 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 46  e.  The SQLITE_F
309c0 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 5f 50  CNTL_LOCKSTATE_P
309d0 49 44 0a 2a 2a 20 72 65 71 75 69 72 65 73 20 74  ID.** requires t
309e0 68 65 20 34 74 68 20 61 72 67 75 6d 65 6e 74 20  he 4th argument 
309f0 74 6f 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f  to sqlite3_file_
30a00 63 6f 6e 74 72 6f 6c 20 74 6f 20 62 65 20 61 20  control to be a 
30a10 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 0a 2a 2a  pointer to an.**
30a20 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 4c 6f 63   instance of Loc
30a30 6b 73 74 61 74 65 50 49 44 20 69 6e 69 74 69 61  kstatePID initia
30a40 6c 69 7a 65 64 20 77 69 74 68 20 61 20 4c 6f 63  lized with a Loc
30a50 6b 73 74 61 74 65 50 49 44 2e 70 69 64 20 76 61  kstatePID.pid va
30a60 6c 75 65 20 65 71 75 61 6c 0a 2a 2a 20 74 6f 20  lue equal.** to 
30a70 61 20 70 72 6f 63 65 73 73 20 49 44 20 74 6f 20  a process ID to 
30a80 62 65 20 74 65 73 74 65 64 2c 20 6f 72 20 74 68  be tested, or th
30a90 65 20 73 70 65 63 69 61 6c 20 76 61 6c 75 65 20  e special value 
30aa0 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45  SQLITE_LOCKSTATE
30ab0 5f 41 4e 59 50 49 44 0a 2a 2a 20 54 68 65 20 4c  _ANYPID.** The L
30ac0 6f 63 6b 73 74 61 74 65 2e 73 74 61 74 65 20 76  ockstate.state v
30ad0 61 6c 75 65 20 69 73 20 61 6c 77 61 79 73 20 73  alue is always s
30ae0 65 74 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  et to one of the
30af0 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
30b00 73 0a 2a 2a 20 77 68 65 6e 20 73 71 6c 69 74 65  s.** when sqlite
30b10 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20 72  3_file_control r
30b20 65 74 75 72 6e 73 3a 0a 2a 2a 20 0a 2a 2a 20 20  eturns:.** .**  
30b30 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54   SQLITE_LOCKSTAT
30b40 45 5f 4f 46 46 20 20 20 20 6e 6f 20 61 63 74 69  E_OFF    no acti
30b50 76 65 20 73 71 6c 69 74 65 20 66 69 6c 65 20 6c  ve sqlite file l
30b60 6f 63 6b 73 20 6d 61 74 63 68 20 74 68 65 20 73  ocks match the s
30b70 70 65 63 69 66 69 65 64 20 70 69 64 0a 2a 2a 20  pecified pid.** 
30b80 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41    SQLITE_LOCKSTA
30b90 54 45 5f 4f 4e 20 20 20 20 20 61 63 74 69 76 65  TE_ON     active
30ba0 20 73 71 6c 69 74 65 20 66 69 6c 65 20 6c 6f 63   sqlite file loc
30bb0 6b 73 20 6d 61 74 63 68 20 74 68 65 20 73 70 65  ks match the spe
30bc0 63 69 66 69 65 64 20 70 69 64 0a 2a 2a 20 20 20  cified pid.**   
30bd0 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45  SQLITE_LOCKSTATE
30be0 5f 4e 4f 54 41 44 42 20 70 61 74 68 20 70 6f 69  _NOTADB path poi
30bf0 6e 74 73 20 74 6f 20 61 20 66 69 6c 65 20 74 68  nts to a file th
30c00 61 74 20 69 73 20 6e 6f 74 20 61 6e 20 73 71 6c  at is not an sql
30c10 69 74 65 20 64 62 20 66 69 6c 65 0a 2a 2a 20 20  ite db file.**  
30c20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54   SQLITE_LOCKSTAT
30c30 45 5f 45 52 52 4f 52 20 20 70 61 74 68 20 77 61  E_ERROR  path wa
30c40 73 20 6e 6f 74 20 76 61 69 6c 64 20 6f 72 20 77  s not vaild or w
30c50 61 73 20 75 6e 72 65 61 64 61 62 6c 65 0a 2a 2f  as unreadable.*/
30c60 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
30c70 4c 6f 63 6b 73 74 61 74 65 50 49 44 20 4c 6f 63  LockstatePID Loc
30c80 6b 73 74 61 74 65 50 49 44 3b 0a 73 74 72 75 63  kstatePID;.struc
30c90 74 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 20 7b  t LockstatePID {
30ca0 0a 20 20 70 69 64 5f 74 20 70 69 64 3b 20 20 20  .  pid_t pid;   
30cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
30cc0 20 50 72 6f 63 65 73 73 20 49 44 20 74 6f 20 74   Process ID to t
30cd0 65 73 74 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61  est */.  int sta
30ce0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
30cf0 20 20 20 20 2f 2a 20 54 68 65 20 73 74 61 74 65      /* The state
30d00 20 6f 66 20 74 68 65 20 6c 6f 63 6b 20 28 72 65   of the lock (re
30d10 74 75 72 6e 20 76 61 6c 75 65 29 20 2a 2f 0a 7d  turn value) */.}
30d20 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 28 53 51  ;..#endif /* (SQ
30d30 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 50 4c  LITE_ENABLE_APPL
30d40 45 5f 53 50 49 3e 30 29 20 26 26 20 64 65 66 69  E_SPI>0) && defi
30d50 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 2a  ned(__APPLE__) *
30d60 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69  /../*.** Threadi
30d70 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a  ng interface.*/.
30d80 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  #if SQLITE_MAX_W
30d90 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a  ORKER_THREADS>0.
30da0 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
30db0 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68  dCreate(SQLiteTh
30dc0 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28  read**,void*(*)(
30dd0 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69  void*),void*);.i
30de0 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
30df0 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61  Join(SQLiteThrea
30e00 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e  d*, void**);.#en
30e10 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
30e20 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44  (SQLITE_ENABLE_D
30e30 42 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64  BPAGE_VTAB) || d
30e40 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
30e50 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  ST).int sqlite3D
30e60 62 70 61 67 65 52 65 67 69 73 74 65 72 28 73 71  bpageRegister(sq
30e70 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a  lite3*);.#endif.
30e80 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
30e90 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54  TE_ENABLE_DBSTAT
30ea0 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65  _VTAB) || define
30eb0 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69  d(SQLITE_TEST).i
30ec0 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74  nt sqlite3Dbstat
30ed0 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
30ee0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
30ef0 73 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f  sqlite3ExprVecto
30f00 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70  rSize(Expr *pExp
30f10 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  r);.int sqlite3E
30f20 78 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72  xprIsVector(Expr
30f30 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
30f40 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65  sqlite3VectorFie
30f50 6c 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c  ldSubexpr(Expr*,
30f60 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
30f70 69 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f  ite3ExprForVecto
30f80 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78  rField(Parse*,Ex
30f90 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  pr*,int);.void s
30fa0 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f  qlite3VectorErro
30fb0 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70  rMsg(Parse*, Exp
30fc0 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  r*);..#ifndef SQ
30fd0 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c  LITE_OMIT_COMPIL
30fe0 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f  EOPTION_DIAGS.co
30ff0 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74  nst char **sqlit
31000 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73  e3CompileOptions
31010 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65  (int *pnOpt);.#e
31020 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  ndif..#endif /* 
31030 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a     SQLITEINT_H */.