/ Hex Artifact Content
Login

Artifact b3212ce855a590787bc091721a2e65148947f83e1faaa0394eaa3217ef44b048:


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 23 64 65 66 69 6e 65 20 53 51 4c 49  _H..#define SQLI
01e0: 54 45 5f 45 4e 41 42 4c 45 5f 4f 53 49 4e 53 54  TE_ENABLE_OSINST
01f0: 20 31 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43   1../* Special C
0200: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
0210: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0220: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0230: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0240: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0250: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0260: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0280: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0290: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
02a0: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
02b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02c0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02d0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02e0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02f0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0310: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0320: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0330: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0360: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0370: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0380: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0390: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
03a0: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
03b0: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03c0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03d0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03f0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
0400: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
0410: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0420: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0440: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0450: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0460: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0470: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0480: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0490: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
04a0: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
04b0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04d0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04e0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04f0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
0500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0520: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0530: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0540: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0550: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0560: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0570: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0580: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
05b0: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05c0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05d0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
0600: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
0610: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0620: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0630: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0640: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0650: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0660: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0670: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0680: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0690: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
06a0: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
06b0: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06c0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06d0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06e0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06f0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
0700: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
0710: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0720: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0730: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0740: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0750: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0760: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0770: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0780: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0790: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
07a0: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
07b0: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07c0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07d0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07e0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07f0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
0800: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
0810: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0820: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0830: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0840: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0850: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0860: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0870: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0880: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0890: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
08a0: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
08b0: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08c0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08d0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08e0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08f0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
0900: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
0910: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0920: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0930: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0940: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0950: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0960: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0970: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0980: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0990: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
09a0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
09b0: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09c0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09d0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09e0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09f0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
0a00: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
0a10: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a20: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a30: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a40: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a50: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a60: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a70: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a80: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a90: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0aa0: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0ab0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0ac0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ad0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ae0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0af0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0b00: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0b10: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b20: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b30: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b40: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b50: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b60: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b70: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b80: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b90: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0ba0: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0bb0: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0bc0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bd0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0be0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bf0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0c00: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0c10: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c20: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c30: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c40: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c50: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c60: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c70: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c80: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c90: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0ca0: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0cb0: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0cc0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cd0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0ce0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cf0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0d00: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0d10: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d20: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d30: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d40: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d50: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d60: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d70: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d80: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d90: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0da0: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0db0: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0dc0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0dd0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0de0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0df0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0e00: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0e10: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e20: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e30: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e40: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e50: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e60: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e70: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e80: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e90: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0ea0: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0eb0: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ec0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0ed0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ee0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ef0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0f00: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0f10: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f20: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f30: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f40: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f50: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f60: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f70: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f80: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f90: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0fa0: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0fb0: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fc0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fd0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fe0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0ff0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
1000: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
1010: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1020: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1030: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1040: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1050: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1060: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1070: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1080: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1090: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
10a0: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
10b0: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10c0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10d0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10e0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10f0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
1100: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
1110: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1120: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1130: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1140: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1150: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1160: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1170: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1180: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1190: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
11a0: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
11b0: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11c0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11d0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11e0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11f0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1200: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1210: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1220: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1230: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1240: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1250: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1260: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1270: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1280: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1290: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
12a0: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
12b0: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12c0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12d0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12e0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12f0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
1300: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
1310: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1320: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1330: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1340: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1350: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1360: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1370: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1380: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1390: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
13a0: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
13b0: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13c0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13d0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13e0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13f0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
1400: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
1410: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1420: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1430: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1440: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1450: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1460: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1470: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1480: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1490: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
14a0: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
14b0: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14c0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14d0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14e0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14f0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
1500: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
1510: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1520: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1530: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1540: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1550: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1560: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1570: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1580: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1590: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
15a0: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
15b0: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15c0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15d0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15e0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15f0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
1600: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
1610: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1620: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1630: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1640: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1650: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1660: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1670: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1680: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1690: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
16a0: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
16b0: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16c0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16d0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16e0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16f0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
1700: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
1710: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1720: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1730: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1740: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1750: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1760: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1770: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1780: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1790: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
17a0: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
17b0: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17c0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17d0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17e0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17f0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
1800: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
1810: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1820: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1830: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1840: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1850: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1860: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1870: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1880: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1890: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
18a0: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
18b0: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18c0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18d0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18e0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18f0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
1900: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
1910: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1920: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1930: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1940: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1950: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1960: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1970: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1980: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1990: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
19a0: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
19b0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19c0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19d0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19e0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19f0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
1a00: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
1a10: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a20: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a30: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a40: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a50: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a60: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a70: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a80: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a90: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1aa0: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1ab0: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1ac0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ad0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ae0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1af0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1b00: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1b10: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b20: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b30: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b40: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b50: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b60: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b70: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b80: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b90: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1ba0: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1bb0: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1bc0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bd0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1be0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bf0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1c00: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1c10: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c20: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c30: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c40: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c50: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c60: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c70: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c80: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c90: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1ca0: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1cb0: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1cc0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cd0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1ce0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cf0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1d00: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1d10: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d20: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d30: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d40: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d50: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d60: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d70: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d80: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d90: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1da0: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1db0: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1dc0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1dd0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1de0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1df0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1e00: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1e10: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e20: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e30: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e40: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e50: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e60: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e70: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e80: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e90: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1ea0: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1eb0: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ec0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1ed0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ee0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ef0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1f00: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1f10: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f20: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f30: 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48  ed(HAVE_STDINT_H
1f40: 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  )   /* Use this 
1f50: 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20  case if we have 
1f60: 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a  ANSI headers */.
1f70: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1f80: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1f90: 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74  (void*)(intptr_t
1fa0: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
1fb0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1fc0: 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70  (X)  ((int)(intp
1fd0: 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 69 66 20  tr_t)(X)).#elif 
1fe0: 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46  defined(__PTRDIF
1ff0: 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68  F_TYPE__)  /* Th
2000: 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77  is case should w
2010: 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23  ork for GCC */.#
2020: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2030: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2040: 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46  void*)(__PTRDIFF
2050: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64  _TYPE__)(X)).# d
2060: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
2070: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
2080: 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  t)(__PTRDIFF_TYP
2090: 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21  E__)(X)).#elif !
20a0: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
20b0: 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73  )       /* Works
20c0: 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f   for compilers o
20d0: 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a  ther than LLVM *
20e0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
20f0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
2100: 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72   ((void*)&((char
2110: 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e  *)0)[X]).# defin
2120: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2130: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28  INT(X)  ((int)((
2140: 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a  (char*)X)-(char*
2150: 29 30 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  )0)).#else      
2160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2170: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2180: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2190: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
21a0: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
21b0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21c0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21d0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21e0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21f0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
2200: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
2210: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2220: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2230: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2240: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2250: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2260: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2270: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2280: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2290: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
22a0: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
22b0: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22c0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22e0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22f0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
2300: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
2310: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2320: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2330: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2340: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2350: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2360: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2370: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2380: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2390: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
23a0: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
23b0: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23c0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23d0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23e0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23f0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
2400: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
2410: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2420: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2430: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2440: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2450: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2460: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2470: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2480: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2490: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
24a0: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
24b0: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24c0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24d0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24e0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24f0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
2500: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
2510: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2520: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2530: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2540: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2550: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2560: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2570: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2580: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2590: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
25a0: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
25b0: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25c0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25d0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25e0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25f0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
2600: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
2610: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2620: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2630: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2640: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2650: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2660: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2670: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2680: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2690: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
26a0: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
26b0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26c0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26d0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26e0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26f0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
2700: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
2710: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2720: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2730: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2740: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2750: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2760: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2770: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2780: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2790: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
27a0: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
27b0: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27c0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27d0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27e0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27f0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
2800: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
2810: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2820: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2830: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2840: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2850: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2860: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2870: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2880: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2890: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
28a0: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
28b0: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28c0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28d0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28e0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28f0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
2900: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
2910: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2920: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2930: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2940: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2950: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2960: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2970: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2980: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2990: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
29a0: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
29b0: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29d0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29e0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29f0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
2a00: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
2a10: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a20: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a30: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a40: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a50: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a60: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a70: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a80: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a90: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2aa0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2ab0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2ac0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ad0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ae0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2af0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2b00: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2b10: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b20: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b30: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b40: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b50: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b60: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b70: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b80: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b90: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2ba0: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2bb0: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2bc0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bd0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2be0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bf0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2c00: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2c10: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c20: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c30: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c40: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c70: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c80: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c90: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2ca0: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2cb0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2cc0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cd0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2ce0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cf0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2d00: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2d10: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d20: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d30: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d40: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d50: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d60: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d70: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d80: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d90: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2da0: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2db0: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2dc0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2dd0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2de0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2df0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2e00: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2e10: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e20: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e30: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e40: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e50: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e60: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e70: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e80: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e90: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2ea0: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2eb0: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ec0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2ed0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ee0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ef0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2f00: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2f10: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f20: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f30: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f40: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f50: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f60: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f70: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f80: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f90: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2fa0: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2fb0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fc0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fd0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fe0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2ff0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
3000: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
3010: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3020: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3030: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3040: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3050: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3060: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3070: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3080: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3090: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
30a0: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
30b0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30c0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30d0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30e0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30f0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
3100: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
3110: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3120: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3130: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3140: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3150: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3160: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3170: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3180: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3190: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
31a0: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
31b0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31c0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31d0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31e0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31f0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
3200: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
3210: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3220: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3230: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3240: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3250: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3260: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3270: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3280: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3290: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
32a0: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
32b0: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32c0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32d0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32e0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32f0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
3300: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
3310: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3320: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3330: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3340: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3350: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3360: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3370: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3380: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3390: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
33a0: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
33b0: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33c0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33d0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33e0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33f0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
3400: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
3410: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3420: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3430: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3440: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3450: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3460: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3470: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3480: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3490: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
34a0: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
34b0: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34c0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34d0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34e0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34f0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3500: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
3510: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3520: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3530: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3540: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3550: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3560: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3570: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3580: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3590: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
35a0: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
35b0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35c0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35d0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35e0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35f0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
3600: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
3610: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3620: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3630: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3640: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3650: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3660: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3670: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3680: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3690: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
36a0: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
36b0: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36c0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36d0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36e0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36f0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
3700: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
3710: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3720: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3730: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3740: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3750: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3760: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3770: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3780: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3790: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
37a0: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
37b0: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37c0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37d0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37e0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37f0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
3800: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
3810: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3820: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3830: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3840: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3850: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3860: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3870: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3880: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3890: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
38a0: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
38b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38c0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38d0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38e0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38f0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
3900: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
3910: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3920: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3930: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3940: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3950: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3960: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3970: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3980: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3990: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
39a0: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
39b0: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39c0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39e0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39f0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
3a00: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
3a10: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a20: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a30: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a40: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a50: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a60: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a70: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a80: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a90: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3aa0: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3ab0: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3ac0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ad0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ae0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3af0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3b00: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3b10: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b20: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b30: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b40: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b50: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b60: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b70: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b80: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b90: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3ba0: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3bb0: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3bc0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bd0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3be0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bf0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3c00: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3c10: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c20: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c30: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c40: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c50: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c60: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c70: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c80: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c90: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3ca0: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3cb0: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3cc0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cd0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3ce0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cf0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3d00: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3d10: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d20: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d30: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d40: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d50: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d60: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d70: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d80: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d90: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3da0: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3db0: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3dc0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3dd0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3de0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3df0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3e00: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3e10: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e20: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e30: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e40: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e50: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e60: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e70: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e80: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e90: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3ea0: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3eb0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ec0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3ed0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ee0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ef0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3f00: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3f10: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f20: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f30: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f40: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f50: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f60: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f70: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f80: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f90: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3fa0: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3fb0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fc0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fd0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fe0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3ff0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
4000: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
4010: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4020: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4030: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4040: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4050: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4060: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4070: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4080: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4090: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
40a0: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
40b0: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40c0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40d0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40e0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40f0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
4100: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
4110: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4120: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4130: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4140: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4150: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4160: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4170: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4180: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4190: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
41a0: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
41b0: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41c0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41d0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41e0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41f0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
4200: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
4210: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4220: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4230: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4240: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4250: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4260: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4270: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4280: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4290: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
42a0: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
42b0: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42c0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42d0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42e0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42f0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
4300: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
4310: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4320: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4330: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4340: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4350: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4360: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4370: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4380: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4390: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
43a0: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
43b0: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43c0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43d0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43e0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43f0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
4400: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
4410: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4420: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4430: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4440: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4450: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4460: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4470: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4480: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4490: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
44a0: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
44b0: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44c0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44d0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44e0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44f0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
4500: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
4510: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4520: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4530: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4540: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4550: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4560: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4570: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4580: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4590: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
45a0: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
45b0: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45c0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45d0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45e0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45f0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
4600: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
4610: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4620: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4630: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4640: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4650: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4660: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4670: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4680: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4690: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
46a0: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
46b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46c0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46d0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46e0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46f0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
4700: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
4710: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4720: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4730: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4740: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4750: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4760: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4770: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4780: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4790: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
47a0: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
47b0: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47c0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47d0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47e0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47f0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
4800: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
4810: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4820: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4830: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4840: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4850: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4860: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4870: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4880: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4890: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
48a0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
48b0: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48c0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48d0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48e0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48f0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
4900: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
4910: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4920: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4930: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4940: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4950: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4960: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4970: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4980: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4990: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
49a0: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
49b0: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49c0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49d0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49e0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49f0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
4a00: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
4a10: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a20: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a30: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a40: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a50: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a60: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a70: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a80: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a90: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4aa0: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4ab0: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4ac0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ad0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ae0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4af0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4b00: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4b10: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b20: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b30: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b40: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b50: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b60: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b70: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b80: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b90: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4ba0: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4bb0: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4bc0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bd0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4be0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bf0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4c00: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4c10: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c20: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c30: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c50: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c60: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c70: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c80: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c90: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4ca0: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4cb0: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4cc0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cd0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4ce0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cf0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4d00: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4d10: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d20: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d30: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d40: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d50: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d60: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d70: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d80: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d90: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4da0: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4db0: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4dc0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4dd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4de0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4df0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4e00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4e10: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e20: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e30: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e40: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e50: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e60: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e70: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e80: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e90: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4ea0: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4eb0: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ec0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4ed0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ee0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ef0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4f00: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4f10: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f20: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f30: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f40: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f50: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f60: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f80: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f90: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4fa0: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4fb0: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fc0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fd0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fe0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4ff0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
5000: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
5010: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5020: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5030: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5040: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5050: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5060: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5070: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5080: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5090: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
50a0: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
50b0: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50c0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50d0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50e0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50f0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
5100: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
5110: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5120: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5130: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5140: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5150: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5160: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5170: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5180: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5190: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
51a0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
51b0: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51c0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51d0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51e0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51f0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
5200: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
5210: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5220: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5230: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5240: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5250: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5260: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5270: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5280: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5290: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
52a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
52b0: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52c0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52d0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52e0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52f0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
5300: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
5310: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5320: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5330: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5340: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5350: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5360: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5370: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5380: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5390: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
53a0: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
53b0: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53c0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53d0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53e0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53f0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
5400: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
5410: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5420: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5430: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5440: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5450: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5460: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5470: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5480: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5490: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
54a0: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
54b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54e0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54f0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
5500: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
5510: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5520: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5530: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5540: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5550: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5560: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5570: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5580: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5590: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
55a0: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
55b0: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55c0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55d0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55e0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55f0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
5600: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
5610: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5620: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5630: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5640: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5650: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5660: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5670: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5680: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5690: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
56a0: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
56b0: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56c0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56d0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56e0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
5700: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
5710: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5720: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5730: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5740: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5750: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5760: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5770: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5780: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5790: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
57a0: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
57b0: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57c0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57d0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57e0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57f0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
5800: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
5810: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5820: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5830: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5840: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5850: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5860: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5870: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5880: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5890: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
58a0: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
58b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58c0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58d0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58e0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58f0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
5900: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
5910: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5920: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5930: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5940: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5950: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5960: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5970: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5980: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5990: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
59a0: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
59b0: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59c0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59d0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59e0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59f0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
5a00: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
5a10: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a20: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a30: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a40: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a50: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a60: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a70: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a80: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a90: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5aa0: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5ab0: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5ac0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ad0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ae0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5af0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5b00: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5b10: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b20: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b30: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b40: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b50: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b60: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b70: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b80: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b90: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5ba0: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5bb0: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5bc0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bd0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5be0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bf0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5c00: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5c10: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c20: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c30: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c40: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c50: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c60: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c70: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c80: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c90: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5ca0: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5cb0: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5cc0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cd0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5ce0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cf0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5d00: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5d10: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d20: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d30: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d40: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d50: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d60: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d70: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d80: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d90: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5da0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5db0: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5dc0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5dd0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5de0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5df0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5e00: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5e10: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e20: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e30: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e40: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e50: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e60: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e70: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e80: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e90: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5ea0: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5eb0: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ec0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5ed0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ee0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ef0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5f00: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5f10: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f20: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f30: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f40: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f50: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f60: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f70: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f80: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f90: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5fa0: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5fb0: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fc0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fd0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fe0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5ff0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
6000: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
6010: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6020: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6030: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6040: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6050: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6060: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6070: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6080: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6090: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
60a0: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
60b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60c0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60d0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60e0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60f0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
6100: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6110: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6120: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6130: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6140: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6150: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6160: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6170: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6180: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6190: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
61a0: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
61b0: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61c0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61d0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61e0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61f0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
6200: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
6210: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6220: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6230: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6240: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6250: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6260: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6270: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6280: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6290: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
62a0: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
62b0: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62c0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62d0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62e0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62f0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
6300: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
6310: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6320: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6330: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6340: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6350: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6360: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6370: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6380: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6390: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
63a0: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
63b0: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63c0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63d0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63e0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63f0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
6400: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
6410: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6420: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6430: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6440: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6450: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6460: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6470: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6480: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6490: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
64a0: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
64b0: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64c0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64d0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64e0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64f0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
6500: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
6510: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6520: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6530: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6540: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6550: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6560: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6570: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6580: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6590: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
65a0: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
65b0: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65c0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65d0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65e0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65f0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
6600: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
6610: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6620: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6630: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6640: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6650: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6660: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6670: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6680: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6690: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
66a0: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
66b0: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66c0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66d0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66e0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66f0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
6700: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
6710: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6720: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6730: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6740: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6750: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6760: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6770: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6780: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6790: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
67a0: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
67b0: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67c0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67d0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67e0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67f0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
6800: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
6810: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6820: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6830: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6840: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6850: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6860: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6870: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6880: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6890: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
68a0: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
68b0: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68c0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68d0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68e0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68f0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
6900: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
6910: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6920: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6930: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6940: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6950: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6960: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6970: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6980: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6990: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
69a0: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
69b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69c0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69d0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69e0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69f0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
6a00: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
6a10: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a20: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a30: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a40: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a50: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a60: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a70: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a80: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a90: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6aa0: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6ab0: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6ac0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ad0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ae0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6af0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6b00: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6b10: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b20: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b30: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b40: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b50: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b60: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b70: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b80: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b90: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6ba0: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6bb0: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6bc0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bd0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6be0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bf0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6c00: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6c10: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c20: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c30: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c40: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c50: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c60: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c70: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c80: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c90: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6ca0: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6cb0: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6cc0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cd0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6ce0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cf0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6d00: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6d10: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d20: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d30: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d40: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d50: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d60: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d70: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d80: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d90: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6da0: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6db0: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6dc0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6dd0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6de0: 64 28 69 33 38 36 29 20 20 20 20 20 20 7c 7c 20  d(i386)      || 
6df0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
6e00: 29 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  )      || define
6e10: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6e20: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6e30: 5f 5f 78 38 36 5f 36 34 29 20 20 7c 7c 20 64 65  __x86_64)  || de
6e40: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
6e50: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
6e60: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
6e70: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
6e80: 5f 41 4d 44 36 34 29 20 20 7c 7c 20 64 65 66 69  _AMD64)  || defi
6e90: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6ea0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6eb0: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6ec0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6ed0: 4d 45 4c 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEL__) || define
6ee0: 64 28 5f 5f 41 41 52 43 48 36 34 45 4c 5f 5f 29  d(__AARCH64EL__)
6ef0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
6f00: 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e 65  RM64).#   define
6f10: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
6f20: 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69 66  R    1234.# elif
6f30: 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20   defined(sparc) 
6f40: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6f50: 5f 70 70 63 5f 5f 29 20 7c 7c 20 5c 0a 20 20 20  _ppc__) || \.   
6f60: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6f70: 4d 45 42 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEB__) || define
6f80: 64 28 5f 5f 41 41 52 43 48 36 34 45 42 5f 5f 29  d(__AARCH64EB__)
6f90: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6fa0: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
6fb0: 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20  4321.# else.#   
6fc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6fd0: 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69  TEORDER 0.# endi
6fe0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  f.#endif.#if SQL
6ff0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34  ITE_BYTEORDER==4
7000: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
7010: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
7020: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
7030: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
7040: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
7050: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
7060: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
7070: 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  lif SQLITE_BYTEO
7080: 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66  RDER==1234.# def
7090: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
70a0: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
70b0: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
70c0: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
70d0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
70e0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
70f0: 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64  16LE.#else.# ifd
7100: 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
7110: 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69  MATION.  const i
7120: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
7130: 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65  1;.# else.  exte
7140: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
7150: 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66  ite3one;.# endif
7160: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7170: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
7180: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7190: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
71a0: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
71b0: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
71c0: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
71d0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
71e0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
71f0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
7200: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
7210: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
7220: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
7230: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
7240: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
7250: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
7260: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
7270: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
7280: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
7290: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
72a0: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
72b0: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
72c0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
72d0: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
72e0: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
72f0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
7300: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
7310: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
7320: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
7330: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
7340: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20  ./*.** Round up 
7350: 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20  a number to the 
7360: 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74  next larger mult
7370: 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73  iple of 8.  This
7380: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66   is used.** to f
7390: 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67  orce 8-byte alig
73a0: 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20  nment on 64-bit 
73b0: 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a  architectures..*
73c0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38  /.#define ROUND8
73d0: 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29  (x)     (((x)+7)
73e0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e  &~7)../*.** Roun
73f0: 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65  d down to the ne
7400: 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f  arest multiple o
7410: 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  f 8.*/.#define R
7420: 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78  OUNDDOWN8(x) ((x
7430: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  )&~7)../*.** Ass
7440: 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69  ert that the poi
7450: 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65  nter X is aligne
7460: 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62  d to an 8-byte b
7470: 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a  oundary.  This.*
7480: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
7490: 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65  only within asse
74a0: 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74  rt() to verify t
74b0: 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74  hat the code get
74c0: 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65  s.** all alignme
74d0: 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  nt restrictions 
74e0: 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45  correct..**.** E
74f0: 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45  xcept, if SQLITE
7500: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
7510: 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65  MALLOC is define
7520: 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75  d, then the.** u
7530: 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63  nderlying malloc
7540: 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  () implementatio
7550: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
7560: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
7570: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
7580: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
7590: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
75a0: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
75b0: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
75c0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
75d0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
75e0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
75f0: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
7600: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
7610: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
7620: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
7630: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
7640: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
7650: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
7660: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
7670: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
7680: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
7690: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
76a0: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
76b0: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
76c0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
76d0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
76e0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
76f0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
7700: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7710: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
7720: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
7730: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
7740: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
7750: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
7760: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
7770: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
7780: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
7790: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e  ditionals.h>.#en
77a0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
77b0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
77c0: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
77d0: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
77e0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
77f0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
7800: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
7810: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
7820: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7830: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
7840: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
7850: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
7860: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
7870: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
7880: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7890: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
78a0: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
78b0: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
78c0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
78d0: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
78e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
78f0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
7900: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
7910: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
7920: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
7930: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
7940: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
7950: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
7960: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
7970: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
7980: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
7990: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
79a0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
79b0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
79c0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
79d0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
79e0: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
79f0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
7a00: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
7a10: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7a20: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
7a30: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7a40: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
7a50: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7a60: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
7a70: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
7a80: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
7a90: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
7aa0: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
7ab0: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
7ac0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
7ad0: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
7ae0: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
7af0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
7b00: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
7b10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
7b20: 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
7b30: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  E).# define SELE
7b40: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
7b50: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
7b60: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7b70: 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  BLED 0.#endif../
7b80: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7b90: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7ba0: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
7bb0: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
7bc0: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7bd0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
7be0: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
7bf0: 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  dle..**.** The s
7c00: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
7c10: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
7c20: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
7c30: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
7c40: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
7c50: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
7c60: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
7c70: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
7c80: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
7c90: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
7ca0: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
7cb0: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
7cc0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7cd0: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
7ce0: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
7cf0: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
7d00: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
7d10: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
7d20: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
7d30: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
7d40: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
7d50: 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69  BusyHandler)(voi
7d60: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
7d70: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
7d80: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79  */.  void *pBusy
7d90: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7da0: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
7db0: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
7dc0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
7dd0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7de0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
7df0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7e00: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
7e10: 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c  /.  u8 bExtraFil
7e20: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7e30: 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65        /* Include
7e40: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73   sqlite3_file as
7e50: 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f   callback arg */
7e60: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
7e70: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7e80: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
7e90: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7ea0: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
7eb0: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
7ec0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
7ed0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
7ee0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
7ef0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
7f00: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
7f10: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
7f20: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
7f30: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
7f40: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
7f50: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7f60: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
7f70: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
7f80: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
7f90: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
7fa0: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
7fb0: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
7fc0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
7fd0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
7fe0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
7ff0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
8000: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
8010: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
8020: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
8030: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
8040: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
8050: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
8060: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
8070: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
8080: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
8090: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
80a0: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
80b0: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
80c0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
80d0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
80e0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
80f0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
8100: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
8110: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
8120: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
8130: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
8140: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
8150: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
8160: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
8170: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
8180: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
8190: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
81a0: 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61   the.** one para
81b0: 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72  meter that destr
81c0: 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20  uctors normally 
81d0: 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76  want.  So we hav
81e0: 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a  e to introduce.*
81f0: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
8200: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
8210: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
8220: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
8230: 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  ny.** pointer wi
8240: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
8250: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
8260: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
8270: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
8280: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
8290: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
82a0: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
82b0: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
82c0: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
82d0: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
82e0: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
82f0: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
8300: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
8310: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
8320: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
8330: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
8340: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
8350: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
8360: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
8370: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
8380: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
8390: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
83a0: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
83b0: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
83c0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
83d0: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
83e0: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
83f0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
8400: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
8410: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
8420: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
8430: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
8440: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
8450: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
8460: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
8470: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
8480: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
8490: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
84a0: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
84b0: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
84c0: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
84d0: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
84e0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
84f0: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
8500: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
8510: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
8520: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
8530: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
8540: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
8550: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
8560: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
8570: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
8580: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
8590: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
85a0: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
85b0: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
85c0: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
85d0: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
85e0: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
85f0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
8600: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
8610: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
8620: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8630: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
8640: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
8650: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
8660: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
8670: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
8680: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
8690: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
86a0: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
86b0: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
86c0: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
86d0: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
86e0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
86f0: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
8700: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
8710: 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  ITE_WSD.  #defin
8720: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
8730: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8740: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
8750: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
8760: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
8770: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
8780: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
8790: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
87a0: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
87b0: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
87c0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
87d0: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
87e0: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
87f0: 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74  berately.** left
8800: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
8810: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
8820: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
8830: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
8840: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
8850: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
8860: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
8870: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
8880: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
8890: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
88a0: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
88b0: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
88c0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
88d0: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
88e0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
88f0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
8900: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
8910: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
8920: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
8930: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
8940: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
8950: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
8960: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
8970: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8980: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
8990: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
89a0: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
89b0: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
89c0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
89d0: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
89e0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
89f0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
8a00: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
8a10: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
8a20: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
8a30: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
8a40: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
8a50: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
8a60: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
8a70: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
8a80: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
8a90: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
8aa0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
8ab0: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
8ac0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
8ad0: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
8ae0: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
8af0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
8b00: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
8b10: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
8b20: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
8b30: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b40: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
8b50: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
8b60: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
8b70: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
8b80: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
8b90: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
8ba0: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
8bb0: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
8bc0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
8bd0: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
8be0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8bf0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
8c00: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
8c10: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
8c20: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
8c30: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
8c40: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
8c50: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
8c60: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
8c70: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
8c80: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
8c90: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
8ca0: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
8cb0: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
8cc0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
8cd0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
8ce0: 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a  ruct FKey FKey;.
8cf0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8d00: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75  uncDestructor Fu
8d10: 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79  ncDestructor;.ty
8d20: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d30: 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79  cDef FuncDef;.ty
8d40: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d50: 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66  cDefHash FuncDef
8d60: 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74  Hash;.typedef st
8d70: 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69  ruct IdList IdLi
8d80: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
8d90: 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a  ct Index Index;.
8da0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
8db0: 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78  ndexSample Index
8dc0: 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20  Sample;.typedef 
8dd0: 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20  struct KeyClass 
8de0: 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65  KeyClass;.typede
8df0: 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  f struct KeyInfo
8e00: 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65   KeyInfo;.typede
8e10: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
8e20: 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79  de Lookaside;.ty
8e30: 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f  pedef struct Loo
8e40: 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61  kasideSlot Looka
8e50: 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65  sideSlot;.typede
8e60: 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  f struct Module 
8e70: 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20  Module;.typedef 
8e80: 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
8e90: 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a  xt NameContext;.
8ea0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8eb0: 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65  arse Parse;.type
8ec0: 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70  def struct PreUp
8ed0: 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a  date PreUpdate;.
8ee0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8ef0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50  rintfArguments P
8f00: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a  rintfArguments;.
8f10: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52  typedef struct R
8f20: 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61 6d  enameToken Renam
8f30: 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20  eToken;.typedef 
8f40: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
8f50: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
8f60: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
8f70: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
8f80: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
8f90: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
8fa0: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
8fb0: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
8fc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8fd0: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
8fe0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
8ff0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
9000: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
9010: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73  struct sqlite3_s
9020: 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a 20  tr StrAccum; /* 
9030: 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20 66  Internal alias f
9040: 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20 2a  or sqlite3_str *
9050: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
9060: 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79   Table Table;.ty
9070: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
9080: 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b  leLock TableLock
9090: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
90a0: 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79   Token Token;.ty
90b0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65  pedef struct Tre
90c0: 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a  eView TreeView;.
90d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90e0: 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a  rigger Trigger;.
90f0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
9100: 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65  riggerPrg Trigge
9110: 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74  rPrg;.typedef st
9120: 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
9130: 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79   TriggerStep;.ty
9140: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70  pedef struct Unp
9150: 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61  ackedRecord Unpa
9160: 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65  ckedRecord;.type
9170: 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65 72  def struct Upser
9180: 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64 65  t Upsert;.typede
9190: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
91a0: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
91b0: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
91c0: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
91d0: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
91e0: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
91f0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
9200: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
9210: 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20  f struct Window 
9220: 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66 20  Window;.typedef 
9230: 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68  struct With With
9240: 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  ;.../*.** The bi
9250: 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
9260: 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
9270: 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
9280: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
9290: 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
92a0: 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
92b0: 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
92c0: 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
92d0: 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
92e0: 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
92f0: 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
9300: 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
9310: 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
9320: 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
9330: 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
9340: 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66   ix86..*/.#ifdef
9350: 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
9360: 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20 53  TYPE.  typedef S
9370: 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59  QLITE_BITMASK_TY
9380: 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73  PE Bitmask;.#els
9390: 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20  e.  typedef u64 
93a0: 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  Bitmask;.#endif.
93b0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
93c0: 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
93d0: 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
93e0: 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
93f0: 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
9400: 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
9410: 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
9420: 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
9430: 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
9440: 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
9450: 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
9460: 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41  <(n)).#define MA
9470: 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e  SKBIT32(n) (((un
9480: 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28  signed int)1)<<(
9490: 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42  n)).#define ALLB
94a0: 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d 61  ITS      ((Bitma
94b0: 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c 69  sk)-1)../* A VLi
94c0: 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72 64  st object record
94d0: 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74 77  s a mapping betw
94e0: 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f 76  een parameters/v
94f0: 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61 72  ariables/wildcar
9500: 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51 4c  ds.** in the SQL
9510: 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63 68   statement (such
9520: 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c 20   as $abc, @pqr, 
9530: 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68 65  or :xyz) and the
9540: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72 69   integer.** vari
9550: 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73 6f  able number asso
9560: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
9570: 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65 65   parameter.  See
9580: 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73 63   the format desc
9590: 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74 68  ription.** on th
95a0: 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64  e sqlite3VListAd
95b0: 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20  d() routine for 
95c0: 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  more information
95d0: 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72 65  .  A VList is re
95e0: 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e 20  ally.** just an 
95f0: 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72  array of integer
9600: 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69 6e  s..*/.typedef in
9610: 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20  t VList;../*.** 
9620: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
9630: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
9640: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
9650: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
9660: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
9670: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
9680: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
9690: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
96a0: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
96b0: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
96c0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
96d0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
96e0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
96f0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
9700: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
9710: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69 6e  e "pcache.h".#in
9720: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
9730: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
9740: 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45  ./* The SQLITE_E
9750: 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d  XTRA_DURABLE com
9760: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
9770: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
9780: 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63   default.** sync
9790: 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20  hronous setting 
97a0: 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69 73  to EXTRA.  It is
97b0: 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f   no longer suppo
97c0: 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rted..*/.#ifdef 
97d0: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
97e0: 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55  ABLE.# warning U
97f0: 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  se SQLITE_DEFAUL
9800: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20  T_SYNCHRONOUS=3 
9810: 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54  instead of SQLIT
9820: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
9830: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9840: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9850: 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OUS 3.#endif../*
9860: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63  .** Default sync
9870: 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a  hronous levels..
9880: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
9890: 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72  (for historcal r
98a0: 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45  easons) the PAGE
98b0: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20  R_SYNCHRONOUS_* 
98c0: 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a  macros differ.**
98d0: 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
98e0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
98f0: 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e  NOUS value by 1.
9900: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
9910: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
9920: 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c 54  US       DEFAULT
9930: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20  _SYNCHRONOUS.** 
9940: 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20 20    OFF           
9950: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
9960: 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20            0.**  
9970: 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32   NORMAL        2
9980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9990: 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20           1.**   
99a0: 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20  FULL          3 
99b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99c0: 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45          2.**   E
99d0: 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20 20  XTRA         4  
99e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99f0: 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54         3.**.** T
9a00: 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  he "PRAGMA synch
9a10: 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e  ronous" statemen
9a20: 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20  t also uses the 
9a30: 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65  zero-based numbe
9a40: 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  rs..** In other 
9a50: 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d  words, the zero-
9a60: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72  based numbers ar
9a70: 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65  e used for all e
9a80: 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63  xternal interfac
9a90: 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e  es.** and the on
9aa0: 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20 61  e-based values a
9ab0: 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  re used internal
9ac0: 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ly..*/.#ifndef S
9ad0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9ae0: 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69  NCHRONOUS.# defi
9af0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
9b00: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32 0a  T_SYNCHRONOUS 2.
9b10: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
9b20: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
9b30: 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20  L_SYNCHRONOUS.# 
9b40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
9b50: 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52  FAULT_WAL_SYNCHR
9b60: 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45 46  ONOUS SQLITE_DEF
9b70: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9b80: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
9b90: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
9ba0: 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64  e to be accessed
9bb0: 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69   by the system i
9bc0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
9bd0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9be0: 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  g structure.  Th
9bf0: 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ere are normally
9c00: 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74   two of these st
9c10: 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74  ructures.** in t
9c20: 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20  he sqlite.aDb[] 
9c30: 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69  array.  aDb[0] i
9c40: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
9c50: 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20  ase file and.** 
9c60: 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61  aDb[1] is the da
9c70: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
9c80: 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61   to hold tempora
9c90: 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69  ry tables.  Addi
9ca0: 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61  tional.** databa
9cb0: 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63  ses may be attac
9cc0: 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44  hed..*/.struct D
9cd0: 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62 53  b {.  char *zDbS
9ce0: 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
9cf0: 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  me of this datab
9d00: 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d  ase. (schema nam
9d10: 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29  e, not filename)
9d20: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
9d30: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
9d40: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
9d50: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
9d60: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
9d70: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
9d80: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
9d90: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
9da0: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
9db0: 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20  .  u8 bSyncSet; 
9dc0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
9dd0: 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  if "PRAGMA synch
9de0: 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65  ronous=N" has be
9df0: 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65  en run */.  Sche
9e00: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
9e10: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
9e20: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
9e30: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
9e40: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
9e50: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
9e60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9e70: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
9e80: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
9e90: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
9ea0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
9eb0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
9ec0: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
9ed0: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
9ee0: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
9ef0: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
9f00: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
9f10: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
9f20: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
9f30: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
9f40: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
9f50: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
9f60: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
9f70: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
9f80: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
9f90: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
9fa0: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a  red object..**.*
9fb0: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
9fc0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
9fd0: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
9fe0: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
9ff0: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
a000: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
a010: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
a020: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
a030: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
a040: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
a050: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
a060: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
a070: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a080: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
a090: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
a0a0: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
a0b0: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
a0c0: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
a0d0: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
a0e0: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
a0f0: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
a100: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
a110: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
a120: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
a130: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
a140: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
a150: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
a160: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
a170: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
a180: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
a190: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
a1a0: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
a1b0: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
a1c0: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
a1d0: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
a1e0: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
a1f0: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
a200: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
a210: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
a220: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
a230: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
a240: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
a250: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
a260: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
a270: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
a280: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a290: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
a2a0: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
a2b0: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
a2c0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
a2d0: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
a2e0: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
a2f0: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
a300: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
a310: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
a320: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
a330: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
a340: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
a350: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
a360: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
a370: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
a380: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
a390: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
a3a0: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
a3b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
a3c0: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
a3d0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
a3e0: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
a3f0: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
a400: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
a410: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
a420: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
a430: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
a440: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
a450: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
a460: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
a470: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
a480: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
a490: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
a4a0: 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53   in the.** Db.pS
a4b0: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
a4c0: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ld..*/.#define D
a4d0: 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49  bHasProperty(D,I
a4e0: 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61  ,P)     (((D)->a
a4f0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a500: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d  chemaFlags&(P))=
a510: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
a520: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
a530: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
a540: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
a550: 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d  hemaFlags&(P))!=
a560: 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74  0).#define DbSet
a570: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a580: 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e      (D)->aDb[I].
a590: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a5a0: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
a5b0: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
a5c0: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
a5d0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a5e0: 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50  schemaFlags&=~(P
a5f0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  )../*.** Allowed
a600: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
a610: 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  DB.pSchema->flag
a620: 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  s field..**.** T
a630: 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  he DB_SchemaLoad
a640: 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61  ed flag is set a
a650: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
a660: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a670: 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69  n.** read into i
a680: 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62  nternal hash tab
a690: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e  les..**.** DB_Un
a6a0: 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73  resetViews means
a6b0: 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72   that one or mor
a6c0: 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c  e views have col
a6d0: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a  umn names that.*
a6e0: 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c  * have been fill
a6f0: 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20  ed out.  If the 
a700: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
a710: 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  these column nam
a720: 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e  es might.** chan
a730: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76  ges and so the v
a740: 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  iew will need to
a750: 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64   be reset..*/.#d
a760: 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c  efine DB_SchemaL
a770: 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20  oaded    0x0001 
a780: 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68   /* The schema h
a790: 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a  as been loaded *
a7a0: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72  /.#define DB_Unr
a7b0: 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30  esetViews    0x0
a7c0: 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65  002  /* Some vie
a7d0: 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20  ws have defined 
a7e0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a  column names */.
a7f0: 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79  #define DB_Empty
a800: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
a810: 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69  4  /* The file i
a820: 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20  s empty (length 
a830: 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65 66  0 bytes) */.#def
a840: 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e 74  ine DB_ResetWant
a850: 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20 2f  ed     0x0008  /
a860: 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68 65  * Reset the sche
a870: 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61 4c  ma when nSchemaL
a880: 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ock==0 */../*.**
a890: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
a8a0: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
a8b0: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
a8c0: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
a8d0: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
a8e0: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
a8f0: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
a900: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
a910: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
a920: 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a  KER_THREADS+1)..
a930: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
a940: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
a950: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
a960: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
a970: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
a980: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
a990: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
a9a0: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
a9b0: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
a9c0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a9d0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
a9e0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
a9f0: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
aa00: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
aa10: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
aa20: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
aa30: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
aa40: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
aa50: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
aa60: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
aa70: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
aa80: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
aa90: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
aaa0: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
aab0: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
aac0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
aad0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
aae0: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
aaf0: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
ab00: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
ab10: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
ab20: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
ab30: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
ab40: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
ab50: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
ab60: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
ab70: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
ab80: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
ab90: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
aba0: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
abb0: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
abc0: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
abd0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
abe0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
abf0: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
ac00: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
ac10: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
ac20: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
ac30: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
ac40: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
ac50: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
ac60: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
ac70: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
ac80: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
ac90: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
aca0: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
acb0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
acc0: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
acd0: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
ace0: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
acf0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
ad00: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
ad10: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
ad20: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
ad30: 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  jects..*/.struct
ad40: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
ad50: 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20  32 bDisable;    
ad60: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f         /* Only o
ad70: 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61  perate the looka
ad80: 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a  side when zero *
ad90: 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  /.  u16 sz;     
ada0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
adb0: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
adc0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
add0: 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20   u8 bMalloced;  
ade0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
adf0: 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69   if pStart obtai
ae00: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
ae10: 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 75  _malloc() */.  u
ae20: 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20 20  32 nSlot;       
ae30: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ae40: 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73 6c   of lookaside sl
ae50: 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ots allocated */
ae60: 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33 5d  .  u32 anStat[3]
ae70: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
ae80: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
ae90: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
aea0: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
aeb0: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e 69  kasideSlot *pIni
aec0: 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  t;   /* List of 
aed0: 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65 76  buffers not prev
aee0: 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a 20  iously used */. 
aef0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
af00: 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74  pFree;   /* List
af10: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75   of available bu
af20: 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
af30: 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
af40: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
af50: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65   of available me
af60: 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20  mory space */.  
af70: 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20  void *pEnd;     
af80: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
af90: 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f   byte past end o
afa0: 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  f available spac
afb0: 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c  e */.};.struct L
afc0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20  ookasideSlot {. 
afd0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
afe0: 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78  pNext;    /* Nex
aff0: 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20  t buffer in the 
b000: 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75 66  list of free buf
b010: 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  fers */.};../*.*
b020: 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20 66  * A hash table f
b030: 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  or built-in func
b040: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
b050: 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e 2d  .  (Application-
b060: 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63 74  defined.** funct
b070: 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75 6c  ions use a regul
b080: 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20 66  ar table table f
b090: 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a  rom hash.h.).**.
b0a0: 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e  ** Hash each Fun
b0b0: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69  cDef structure i
b0c0: 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  nto one of the F
b0d0: 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73  uncDefHash.a[] s
b0e0: 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69  lots..** Collisi
b0f0: 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46  ons are on the F
b100: 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20 63  uncDef.u.pHash c
b110: 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20 53  hain.  Use the S
b120: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28  QLITE_FUNC_HASH(
b130: 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63 6f  ).** macro to co
b140: 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e 20  mpute a hash on 
b150: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d  the function nam
b160: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
b170: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
b180: 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e 63  Z 23.struct Func
b190: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
b1a0: 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55  Def *a[SQLITE_FU
b1b0: 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20  NC_HASH_SZ];    
b1c0: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
b1d0: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
b1e0: 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  /.};.#define SQL
b1f0: 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43 2c  ITE_FUNC_HASH(C,
b200: 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53 51  L) (((C)+(L))%SQ
b210: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
b220: 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  Z)..#ifdef SQLIT
b230: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b240: 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f  ATION./*.** Info
b250: 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20  rmation held in 
b260: 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61  the "sqlite3" da
b270: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
b280: 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65  n object and use
b290: 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75  d.** to manage u
b2a0: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
b2b0: 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  on..*/.typedef s
b2c0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
b2d0: 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75  erauth sqlite3_u
b2e0: 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20  serauth;.struct 
b2f0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
b300: 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65   {.  u8 authLeve
b310: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
b320: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75     /* Current au
b330: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76  thentication lev
b340: 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74  el */.  int nAut
b350: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
b360: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
b370: 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20   the zAuthPW in 
b380: 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  bytes */.  char 
b390: 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20  *zAuthPW;       
b3a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73           /* Pass
b3b0: 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74  word used to aut
b3c0: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63  henticate */.  c
b3d0: 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20  har *zAuthUser; 
b3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b3f0: 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74  User name used t
b400: 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a  o authenticate *
b410: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
b420: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
b430: 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74  te3_userauth.aut
b440: 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e  hLevel */.#defin
b450: 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20  e UAUTH_Unknown 
b460: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74      0     /* Aut
b470: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20  hentication not 
b480: 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23  yet checked */.#
b490: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69  define UAUTH_Fai
b4a0: 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f  l        1     /
b4b0: 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63  * User authentic
b4c0: 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a  ation failed */.
b4d0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73  #define UAUTH_Us
b4e0: 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20  er        2     
b4f0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
b500: 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65   as a normal use
b510: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  r */.#define UAU
b520: 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33  TH_Admin       3
b530: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
b540: 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69  cated as an admi
b550: 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a  nistrator */../*
b560: 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20   Functions used 
b570: 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74  only by user aut
b580: 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63  horization logic
b590: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55   */.int sqlite3U
b5a0: 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e  serAuthTable(con
b5b0: 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
b5c0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68  qlite3UserAuthCh
b5d0: 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33  eckLogin(sqlite3
b5e0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38  *,const char*,u8
b5f0: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
b600: 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c  UserAuthInit(sql
b610: 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
b620: 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71  ite3CryptFunc(sq
b630: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
b640: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
b650: 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  **);..#endif /* 
b660: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
b670: 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f  ENTICATION */../
b680: 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72  *.** typedef for
b690: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
b6a0: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  on callback func
b6b0: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  tion..*/.#ifdef 
b6c0: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
b6d0: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70  ENTICATION.  typ
b6e0: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
b6f0: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
b700: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
b710: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b720: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
b730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b740: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
b750: 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
b760: 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  );.#else.  typed
b770: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
b780: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
b790: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
b7a0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b7b0: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
b7e0: 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  *);.#endif..#ifn
b7f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b800: 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68  DEPRECATED./* Th
b810: 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20 53  is is an extra S
b820: 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72  QLITE_TRACE macr
b830: 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  o that indicates
b840: 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e   "legacy" tracin
b850: 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c  g.** in the styl
b860: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61  e of sqlite3_tra
b870: 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ce().*/.#define 
b880: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47  SQLITE_TRACE_LEG
b890: 41 43 59 20 20 20 20 20 20 20 20 20 20 30 78 34  ACY          0x4
b8a0: 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65  0     /* Use the
b8b0: 20 6c 65 67 61 63 79 20 78 54 72 61 63 65 20 2a   legacy xTrace *
b8c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b8d0: 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45 20  _TRACE_XPROFILE 
b8e0: 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20 20         0x80     
b8f0: 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61 63  /* Use the legac
b900: 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a 23 65  y xProfile */.#e
b910: 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  lse.#define SQLI
b920: 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20  TE_TRACE_LEGACY 
b930: 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66 69           0.#defi
b940: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
b950: 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20 20  XPROFILE        
b960: 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  0.#endif /* SQLI
b970: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
b980: 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ED */.#define SQ
b990: 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 4c 45  LITE_TRACE_NONLE
b9a0: 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30 66 20  GACY_MASK  0x0f 
b9b0: 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 66 6c      /* Normal fl
b9c0: 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45  ags */.../*.** E
b9d0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
b9e0: 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e  nection is an in
b9f0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
ba00: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
ba10: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c  e..*/.struct sql
ba20: 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  ite3 {.  sqlite3
ba30: 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20  _vfs *pVfs;     
ba40: 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74         /* OS Int
ba50: 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75  erface */.  stru
ba60: 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  ct Vdbe *pVdbe; 
ba70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
ba80: 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74  t of active virt
ba90: 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a  ual machines */.
baa0: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74    CollSeq *pDflt
bab0: 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  Coll;           
bac0: 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63  /* The default c
bad0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
bae0: 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20  e (BINARY) */.  
baf0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d  sqlite3_mutex *m
bb00: 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  utex;         /*
bb10: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   Connection mute
bb20: 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20  x */.  Db *aDb; 
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb40: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b       /* All back
bb50: 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44  ends */.  int nD
bb60: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
bb70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
bb80: 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75  r of backends cu
bb90: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
bba0: 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67 73  /.  u32 mDbFlags
bbb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bbc0: 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f 72    /* flags recor
bbd0: 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73 74  ding internal st
bbe0: 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c 61  ate */.  u64 fla
bbf0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bc00: 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20         /* flags 
bc10: 73 65 74 74 61 62 6c 65 20 62 79 20 70 72 61 67  settable by prag
bc20: 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a  mas. See below *
bc30: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
bc40: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
bc50: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
bc60: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
bc70: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
bc80: 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20    i64 szMmap;   
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f  /* Default mmap_
bcb0: 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  size setting */.
bcc0: 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f 63    u32 nSchemaLoc
bcd0: 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
bce0: 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74 20  /* Do not reset 
bcf0: 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20  the schema when 
bd00: 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75 6e  non-zero */.  un
bd10: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
bd20: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
bd30: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
bd40: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
bd50: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
bd60: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
bd70: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
bd80: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
bd90: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
bda0: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
bdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bdc0: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
bdd0: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
bde0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
bdf0: 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20 20  int iSysErrno;  
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
be10: 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f   Errno value fro
be20: 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65 72  m last system er
be30: 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f  ror */.  u16 dbO
be40: 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  ptFlags;        
be50: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
be60: 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c  to enable/disabl
be70: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  e optimizations 
be80: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bea0: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
beb0: 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f  ing */.  u8 auto
bec0: 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20  Commit;         
bed0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75         /* The au
bee0: 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20  to-commit flag. 
bef0: 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f  */.  u8 temp_sto
bf00: 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  re;             
bf10: 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a     /* 1: file 2:
bf20: 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75   memory 0: defau
bf30: 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f  lt */.  u8 mallo
bf40: 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20  cFailed;        
bf50: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
bf60: 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20   we have seen a 
bf70: 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a  malloc failure *
bf80: 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61  /.  u8 bBenignMa
bf90: 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  lloc;           
bfa0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75    /* Do not requ
bfb0: 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65  ire OOMs if true
bfc0: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
bfd0: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
bfe0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
bff0: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
c000: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
c010: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
c020: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
c030: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
c040: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
c050: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
c060: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
c070: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
c080: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
c090: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
c0a0: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
c0b0: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
c0c0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
c0d0: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
c0e0: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
c0f0: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
c100: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
c110: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
c120: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
c130: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
c140: 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20 20  /.  u8 mTrace;  
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c160: 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72    /* zero or mor
c170: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 66  e SQLITE_TRACE f
c180: 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f 53  lags */.  u8 noS
c190: 68 61 72 65 64 43 61 63 68 65 3b 20 20 20 20 20  haredCache;     
c1a0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
c1b0: 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61 63  if no shared-cac
c1c0: 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  he backends */. 
c1d0: 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20 20   u8 nSqlExec;   
c1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c1f0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e 64  * Number of pend
c200: 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f  ing OP_SqlExec o
c210: 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20  pcodes */.  int 
c220: 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20  nextPagesize;   
c230: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
c240: 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55  esize after VACU
c250: 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33  UM if >0 */.  u3
c260: 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20  2 magic;        
c270: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
c280: 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20  agic number for 
c290: 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d  detect library m
c2a0: 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  isuse */.  int n
c2b0: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
c2c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
c2d0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
c2e0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20  lite3_changes() 
c2f0: 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43  */.  int nTotalC
c300: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
c310: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
c320: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
c330: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20  total_changes() 
c340: 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b  */.  int aLimit[
c350: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b  SQLITE_N_LIMIT];
c360: 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a     /* Limits */.
c370: 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72    int nMaxSorter
c380: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
c390: 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20  /* Maximum size 
c3a0: 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65  of regions mappe
c3b0: 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20  d by sorter */. 
c3c0: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49   struct sqlite3I
c3d0: 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f  nitInfo {      /
c3e0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
c3f0: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
c400: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
c410: 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20  int newTnum;    
c420: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
c430: 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65  ootpage of table
c440: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
c450: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62  ed */.    u8 iDb
c460: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c470: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64        /* Which d
c480: 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20  b file is being 
c490: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
c4a0: 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20     u8 busy;     
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c4c0: 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e  * TRUE if curren
c4d0: 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  tly initializing
c4e0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c4f0: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20 3a   orphanTrigger :
c500: 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61 74   1; /* Last stat
c510: 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65  ement is orphane
c520: 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a  d TEMP trigger *
c530: 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  /.    unsigned i
c540: 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20 31  mposterTable : 1
c550: 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e  ; /* Building an
c560: 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20   imposter table 
c570: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c580: 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31 3b  reopenMemdb : 1;
c590: 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73 20     /* ATTACH is 
c5a0: 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e 20  really a reopen 
c5b0: 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a 20  using MemDB */. 
c5c0: 20 20 20 63 68 61 72 20 2a 2a 61 7a 49 6e 69 74     char **azInit
c5d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
c5e0: 2a 20 22 74 79 70 65 22 2c 20 22 6e 61 6d 65 22  * "type", "name"
c5f0: 2c 20 61 6e 64 20 22 74 62 6c 5f 6e 61 6d 65 22  , and "tbl_name"
c600: 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 7d 20   columns */.  } 
c610: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
c620: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
c630: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c640: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
c650: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
c660: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
c670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c680: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c690: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c6a0: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
c6b0: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c6d0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c6e0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c6f0: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
c700: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
c710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c720: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
c730: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
c740: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
c750: 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20  nVDestroy;      
c760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c770: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50  ber of active OP
c780: 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  _VDestroy operat
c790: 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ions */.  int nE
c7a0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
c7b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c7c0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
c7d0: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
c7e0: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
c7f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
c800: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
c810: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
c820: 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28    int (*xTrace)(
c830: 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c  u32,void*,void*,
c840: 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54  void*);     /* T
c850: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
c860: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
c870: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c890: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
c8a0: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
c8b0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
c8c0: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
c8d0: 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69  .  void (*xProfi
c8e0: 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  le)(void*,const 
c8f0: 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20  char*,u64);  /* 
c900: 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69  Profiling functi
c910: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  on */.  void *pP
c920: 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20  rofileArg;      
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c940: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
c950: 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f   profile functio
c960: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 76 6f  n */.#endif.  vo
c970: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
c9a0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
c9b0: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d   */.  int (*xCom
c9c0: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
c9d0: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
c9e0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
c9f0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
ca00: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
ca10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
ca20: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
ca30: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
ca40: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
ca50: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
ca60: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
ca70: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
ca80: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
ca90: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
caa0: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
cab0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
cac0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
cad0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
cae0: 34 29 3b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  4);.  Parse *pPa
caf0: 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
cb00: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 70      /* Current p
cb10: 61 72 73 65 20 2a 2f 0a 23 69 66 64 65 66 20 53  arse */.#ifdef S
cb20: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
cb30: 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f  UPDATE_HOOK.  vo
cb40: 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72  id *pPreUpdateAr
cb50: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  g;          /* F
cb60: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
cb70: 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62   xPreUpdateCallb
cb80: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ack */.  void (*
cb90: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
cba0: 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74  ck)(   /* Regist
cbb0: 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ered using sqlit
cbc0: 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f  e3_preupdate_hoo
cbd0: 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a  k() */.    void*
cbe0: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68  ,sqlite3*,int,ch
cbf0: 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63  ar const*,char c
cc00: 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e  onst*,sqlite3_in
cc10: 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  t64,sqlite3_int6
cc20: 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61  4.  );.  PreUpda
cc30: 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20  te *pPreUpdate; 
cc40: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
cc50: 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65  t for active pre
cc60: 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b  -update callback
cc70: 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   */.#endif /* SQ
cc80: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
cc90: 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69  PDATE_HOOK */.#i
cca0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
ccb0: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
ccc0: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
ccd0: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
cce0: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
ccf0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
cd00: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
cd10: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
cd20: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
cd30: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
cd40: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
cd50: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
cd60: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
cd70: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
cd80: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
cd90: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
cda0: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
cdb0: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
cdc0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
cdd0: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
cde0: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
cdf0: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73   volatile int is
ce00: 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20  Interrupted; /* 
ce10: 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f  True if sqlite3_
ce20: 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65  interrupt has be
ce30: 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20  en called */.   
ce40: 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31   double notUsed1
ce50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ce60: 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31  Spacer */.  } u1
ce70: 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f  ;.  Lookaside lo
ce80: 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
ce90: 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d    /* Lookaside m
cea0: 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74  alloc configurat
ceb0: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
cec0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
ced0: 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  RIZATION.  sqlit
cee0: 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20  e3_xauth xAuth; 
cef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65           /* Acce
cf00: 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  ss authorization
cf10: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
cf20: 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20  oid *pAuthArg;  
cf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cf40: 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  1st argument to 
cf50: 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20  the access auth 
cf60: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  function */.#end
cf70: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
cf80: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
cf90: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28  CALLBACK.  int (
cfa0: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
cfb0: 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20   *);     /* The 
cfc0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
cfd0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  k */.  void *pPr
cfe0: 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20  ogressArg;      
cff0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
d000: 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73   to the progress
d010: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75   callback */.  u
d020: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
d030: 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  sOps;        /* 
d040: 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  Number of opcode
d050: 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63  s for progress c
d060: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
d070: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
d080: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
d090: 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  LE.  int nVTrans
d0a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d0b0: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
d0c0: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
d0d0: 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c  */.  Hash aModul
d0e0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
d0f0: 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20     /* populated 
d100: 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  by sqlite3_creat
d110: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
d120: 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74  VtabCtx *pVtabCt
d130: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
d140: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
d150: 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74  ive vtab connect
d160: 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61  /create */.  VTa
d170: 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20  ble **aVTrans;  
d180: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69             /* Vi
d190: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74  rtual tables wit
d1a0: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
d1b0: 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ons */.  VTable 
d1c0: 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20  *pDisconnect;   
d1d0: 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e         /* Discon
d1e0: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
d1f0: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
d200: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
d210: 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20   Hash aFunc;    
d220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d230: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
d240: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
d250: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
d260: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
d270: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
d280: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d290: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
d2a0: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
d2b0: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
d2c0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
d2d0: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
d2e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
d2f0: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
d300: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
d310: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
d320: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
d330: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
d340: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
d350: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
d360: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
d370: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
d380: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
d390: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
d3a0: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d3c0: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
d3d0: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
d3e0: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
d3f0: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
d400: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d410: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
d420: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
d430: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
d440: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
d450: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
d460: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
d470: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
d480: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
d490: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
d4a0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d4b0: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
d4c0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d4d0: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
d4e0: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
d4f0: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
d500: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
d510: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
d520: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
d530: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
d540: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
d550: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
d560: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
d570: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
d580: 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  STER.  ** mutex,
d590: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
d5a0: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
d5b0: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
d5c0: 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20  notify.c..  **. 
d5d0: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
d5e0: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
d5f0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
d600: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
d610: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
d620: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
d630: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
d640: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
d650: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
d660: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
d670: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
d680: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
d690: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
d6a0: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
d6b0: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
d6c0: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
d6d0: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
d6e0: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
d6f0: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
d700: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
d710: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
d720: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
d730: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
d740: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
d750: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
d760: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
d770: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
d780: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
d790: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
d7a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
d7b0: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
d7c0: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
d7d0: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
d7e0: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
d7f0: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
d800: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
d810: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
d820: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
d830: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
d840: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
d850: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
d860: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
d870: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
d880: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
d890: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
d8a0: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
d8b0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
d8c0: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
d8d0: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
d8e0: 5f 45 4e 41 42 4c 45 5f 4f 53 49 4e 53 54 0a 20  _ENABLE_OSINST. 
d8f0: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 4f   sqlite3_vfs *pO
d900: 73 69 6e 73 74 56 66 73 3b 20 20 20 20 20 20 2f  sinstVfs;      /
d910: 2a 20 6f 73 69 6e 73 74 20 56 46 53 20 74 6f 20  * osinst VFS to 
d920: 66 69 6e 61 6c 69 7a 65 2c 20 69 66 20 61 6e 79  finalize, if any
d930: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
d940: 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20  *.** A macro to 
d950: 64 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63  discover the enc
d960: 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62  oding of a datab
d970: 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ase..*/.#define 
d980: 53 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28  SCHEMA_ENC(db) (
d990: 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63  (db)->aDb[0].pSc
d9a0: 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69  hema->enc).#defi
d9b0: 6e 65 20 45 4e 43 28 64 62 29 20 20 20 20 20 20  ne ENC(db)      
d9c0: 20 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f    ((db)->enc)../
d9d0: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
d9e0: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c  lues for the sql
d9f0: 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a  ite3.flags..**.*
da00: 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
da10: 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
da20: 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
da30: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c       SQLITE_Full
da40: 46 53 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47  FSync     == PAG
da50: 45 52 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20  ER_FULLFSYNC.** 
da60: 20 20 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74       SQLITE_Ckpt
da70: 46 75 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47  FullFSync == PAG
da80: 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e  ER_CKPT_FULLFSYN
da90: 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45  C.**      SQLITE
daa0: 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d  _CacheSpill    =
dab0: 3d 20 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50  = PAGER_CACHE_SP
dac0: 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ILL.*/.#define S
dad0: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
dae0: 61 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20  a    0x00000001 
daf0: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
db00: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
db10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
db20: 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20  _LegacyFileFmt  
db30: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 43  0x00000002  /* C
db40: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
db50: 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20  ses in format 1 
db60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
db70: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
db80: 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20   0x00000004  /* 
db90: 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e  Show full column
dba0: 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54   names on SELECT
dbb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dbc0: 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20  TE_FullFSync    
dbd0: 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a    0x00000008  /*
dbe0: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
dbf0: 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a  on the backend *
dc00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dc10: 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20  _CkptFullFSync  
dc20: 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55  0x00000010  /* U
dc30: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f  se full fsync fo
dc40: 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a  r checkpoint */.
dc50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
dc60: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78  acheSpill     0x
dc70: 30 30 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20  00000020  /* OK 
dc80: 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63  to spill pager c
dc90: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
dca0: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
dcb0: 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30  ames  0x00000040
dcc0: 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20    /* Show short 
dcd0: 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f  columns names */
dce0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dcf0: 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30  CountRows      0
dd00: 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f  x00000080  /* Co
dd10: 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64  unt rows changed
dd20: 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20   by INSERT, */. 
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd50: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45           /*   DE
dd60: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
dd70: 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20  and return */.  
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dda0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65          /*   the
ddb0: 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63   count using a c
ddc0: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66  allback. */.#def
ddd0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ine SQLITE_NullC
dde0: 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30  allback   0x0000
ddf0: 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  0100  /* Invoke 
de00: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63  the callback onc
de10: 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20  e if the */.    
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de40: 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c        /*   resul
de50: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a  t set is empty *
de60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
de70: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
de80: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44  0x00000200  /* D
de90: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
dea0: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
deb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dec0: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20  E_ReadUncommit  
ded0: 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20   0x00000400  /* 
dee0: 52 45 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44  READ UNCOMMITTED
def0: 20 69 6e 20 73 68 61 72 65 64 2d 63 61 63 68 65   in shared-cache
df00: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
df10: 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65  TE_NoCkptOnClose
df20: 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a    0x00000800  /*
df30: 20 4e 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f   No checkpoint o
df40: 6e 20 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48  n close()/DETACH
df50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
df60: 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20  TE_ReverseOrder 
df70: 20 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a    0x00001000  /*
df80: 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72   Reverse unorder
df90: 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64  ed SELECTs */.#d
dfa0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
dfb0: 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30  Triggers    0x00
dfc0: 30 30 32 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  002000  /* Enabl
dfd0: 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  e recursive trig
dfe0: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
dff0: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
e000: 79 73 20 20 20 20 30 78 30 30 30 30 34 30 30 30  ys    0x00004000
e010: 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72    /* Enforce for
e020: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
e030: 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65  ints  */.#define
e040: 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65   SQLITE_AutoInde
e050: 78 20 20 20 20 20 20 30 78 30 30 30 30 38 30 30  x      0x0000800
e060: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74  0  /* Enable aut
e070: 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a  omatic indexes *
e080: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e090: 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20  _LoadExtension  
e0a0: 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 45  0x00010000  /* E
e0b0: 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e  nable load_exten
e0c0: 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sion */.#define 
e0d0: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75  SQLITE_LoadExtFu
e0e0: 6e 63 20 20 20 20 30 78 30 30 30 32 30 30 30 30  nc    0x00020000
e0f0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
e100: 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c  _extension() SQL
e110: 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
e120: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72   SQLITE_EnableTr
e130: 69 67 67 65 72 20 20 30 78 30 30 30 34 30 30 30  igger  0x0004000
e140: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e  0  /* True to en
e150: 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
e160: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e170: 44 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30  DeferFKs       0
e180: 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 44 65  x00080000  /* De
e190: 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74  fer all FK const
e1a0: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
e1b0: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  e SQLITE_QueryOn
e1c0: 6c 79 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ly      0x001000
e1d0: 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64  00  /* Disable d
e1e0: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
e1f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e200: 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20  E_CellSizeCk    
e210: 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20   0x00200000  /* 
e220: 43 68 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c  Check btree cell
e230: 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a   sizes on load *
e240: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e250: 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20  _Fts3Tokenizer  
e260: 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45  0x00400000  /* E
e270: 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e  nable fts3_token
e280: 69 7a 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69  izer(2) */.#defi
e290: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
e2a0: 51 50 53 47 20 20 20 20 20 30 78 30 30 38 30 30  QPSG     0x00800
e2b0: 30 30 30 20 20 2f 2a 20 51 75 65 72 79 20 50 6c  000  /* Query Pl
e2c0: 61 6e 6e 65 72 20 53 74 61 62 69 6c 69 74 79 20  anner Stability 
e2d0: 47 75 61 72 61 6e 74 65 65 2a 2f 0a 23 64 65 66  Guarantee*/.#def
e2e0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 69 67 67  ine SQLITE_Trigg
e2f0: 65 72 45 51 50 20 20 20 20 20 30 78 30 31 30 30  erEQP     0x0100
e300: 30 30 30 30 20 20 2f 2a 20 53 68 6f 77 20 74 72  0000  /* Show tr
e310: 69 67 67 65 72 20 45 58 50 4c 41 49 4e 20 51 55  igger EXPLAIN QU
e320: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66  ERY PLAN */.#def
e330: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 73 65 74  ine SQLITE_Reset
e340: 44 61 74 61 62 61 73 65 20 20 30 78 30 32 30 30  Database  0x0200
e350: 30 30 30 30 20 20 2f 2a 20 52 65 73 65 74 20 74  0000  /* Reset t
e360: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 23  he database */.#
e370: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
e380: 67 61 63 79 41 6c 74 65 72 20 20 20 20 30 78 30  gacyAlter    0x0
e390: 34 30 30 30 30 30 30 20 20 2f 2a 20 4c 65 67 61  4000000  /* Lega
e3a0: 63 79 20 41 4c 54 45 52 20 54 41 42 4c 45 20 62  cy ALTER TABLE b
e3b0: 65 68 61 76 69 6f 75 72 20 2a 2f 0a 23 64 65 66  ehaviour */.#def
e3c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 53 63 68  ine SQLITE_NoSch
e3d0: 65 6d 61 45 72 72 6f 72 20 20 30 78 30 38 30 30  emaError  0x0800
e3e0: 30 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  0000  /* Do not 
e3f0: 72 65 70 6f 72 74 20 73 63 68 65 6d 61 20 70 61  report schema pa
e400: 72 73 65 20 65 72 72 6f 72 73 2a 2f 0a 23 64 65  rse errors*/.#de
e410: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
e420: 6e 73 69 76 65 20 20 20 20 20 20 30 78 31 30 30  nsive      0x100
e430: 30 30 30 30 30 20 20 2f 2a 20 49 6e 70 75 74 20  00000  /* Input 
e440: 53 51 4c 20 69 73 20 6c 69 6b 65 6c 79 20 68 6f  SQL is likely ho
e450: 73 74 69 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  stile */.#define
e460: 20 53 51 4c 49 54 45 5f 44 71 73 44 44 4c 20 20   SQLITE_DqsDDL  
e470: 20 20 20 20 20 20 20 30 78 32 30 30 30 30 30 30         0x2000000
e480: 30 20 20 2f 2a 20 64 62 6c 2d 71 75 6f 74 65 64  0  /* dbl-quoted
e490: 20 73 74 72 69 6e 67 73 20 61 6c 6c 6f 77 65 64   strings allowed
e4a0: 20 69 6e 20 44 44 4c 2a 2f 0a 23 64 65 66 69 6e   in DDL*/.#defin
e4b0: 65 20 53 51 4c 49 54 45 5f 44 71 73 44 4d 4c 20  e SQLITE_DqsDML 
e4c0: 20 20 20 20 20 20 20 20 30 78 34 30 30 30 30 30          0x400000
e4d0: 30 30 20 20 2f 2a 20 64 62 6c 2d 71 75 6f 74 65  00  /* dbl-quote
e4e0: 64 20 73 74 72 69 6e 67 73 20 61 6c 6c 6f 77 65  d strings allowe
e4f0: 64 20 69 6e 20 44 4d 4c 2a 2f 0a 23 64 65 66 69  d in DML*/.#defi
e500: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
e510: 56 69 65 77 20 20 20 20 20 30 78 38 30 30 30 30  View     0x80000
e520: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 74  000  /* Enable t
e530: 68 65 20 75 73 65 20 6f 66 20 76 69 65 77 73 20  he use of views 
e540: 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73 20 75 73 65  */../* Flags use
e550: 64 20 6f 6e 6c 79 20 69 66 20 64 65 62 75 67 67  d only if debugg
e560: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48  ing */.#define H
e570: 49 28 58 29 20 20 28 28 75 36 34 29 28 58 29 3c  I(X)  ((u64)(X)<
e580: 3c 33 32 29 0a 23 69 66 64 65 66 20 53 51 4c 49  <32).#ifdef SQLI
e590: 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69 6e 65  TE_DEBUG.#define
e5a0: 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
e5b0: 20 20 20 20 20 20 20 48 49 28 30 78 30 31 30 30         HI(0x0100
e5c0: 30 30 30 29 20 2f 2a 20 44 65 62 75 67 20 70 72  000) /* Debug pr
e5d0: 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78  int SQL as it ex
e5e0: 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ecutes */.#defin
e5f0: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e SQLITE_VdbeLis
e600: 74 69 6e 67 20 20 20 20 48 49 28 30 78 30 32 30  ting    HI(0x020
e610: 30 30 30 30 29 20 2f 2a 20 44 65 62 75 67 20 6c  0000) /* Debug l
e620: 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20  istings of VDBE 
e630: 70 72 6f 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65  progs */.#define
e640: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
e650: 65 20 20 20 20 20 20 48 49 28 30 78 30 34 30 30  e      HI(0x0400
e660: 30 30 30 29 20 2f 2a 20 54 72 75 65 20 74 6f 20  000) /* True to 
e670: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
e680: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
e690: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
e6a0: 54 72 61 63 65 20 48 49 28 30 78 30 38 30 30 30  Trace HI(0x08000
e6b0: 30 30 29 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00) /* Trace sql
e6c0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
e6d0: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
e6e0: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
e6f0: 20 20 20 20 20 20 20 48 49 28 30 78 31 30 30 30         HI(0x1000
e700: 30 30 30 29 20 2f 2a 20 44 65 62 75 67 20 45 58  000) /* Debug EX
e710: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e720: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e730: 54 45 5f 50 61 72 73 65 72 54 72 61 63 65 20 20  TE_ParserTrace  
e740: 20 20 48 49 28 30 78 32 30 30 30 30 30 30 29 20    HI(0x2000000) 
e750: 2f 2a 20 50 52 41 47 4d 41 20 70 61 72 73 65 72  /* PRAGMA parser
e760: 5f 74 72 61 63 65 3d 4f 4e 20 2a 2f 0a 23 65 6e  _trace=ON */.#en
e770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  dif../*.** Allow
e780: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71  ed values for sq
e790: 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a 2a  lite3.mDbFlags.*
e7a0: 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47  /.#define DBFLAG
e7b0: 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 20 20 20  _SchemaChange   
e7c0: 30 78 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f 6d  0x0001  /* Uncom
e7d0: 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c  mitted Hash tabl
e7e0: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
e7f0: 66 69 6e 65 20 44 42 46 4c 41 47 5f 50 72 65 66  fine DBFLAG_Pref
e800: 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 30  erBuiltin  0x000
e810: 32 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65  2  /* Preference
e820: 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e   to built-in fun
e830: 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  cs */.#define DB
e840: 46 4c 41 47 5f 56 61 63 75 75 6d 20 20 20 20 20  FLAG_Vacuum     
e850: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 43      0x0004  /* C
e860: 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41  urrently in a VA
e870: 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20  CUUM */.#define 
e880: 44 42 46 4c 41 47 5f 56 61 63 75 75 6d 49 6e 74  DBFLAG_VacuumInt
e890: 6f 20 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a  o     0x0008  /*
e8a0: 20 43 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69   Currently runni
e8b0: 6e 67 20 56 41 43 55 55 4d 20 49 4e 54 4f 20 2a  ng VACUUM INTO *
e8c0: 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47  /.#define DBFLAG
e8d0: 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20  _SchemaKnownOk  
e8e0: 30 78 30 30 31 30 20 20 2f 2a 20 53 63 68 65 6d  0x0010  /* Schem
e8f0: 61 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 62 65  a is known to be
e900: 20 76 61 6c 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   valid */../*.**
e910: 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c   Bits of the sql
e920: 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20  ite3.dbOptFlags 
e930: 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75  field that are u
e940: 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  sed by the.** sq
e950: 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
e960: 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ol(SQLITE_TESTCT
e970: 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53  RL_OPTIMIZATIONS
e980: 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20  ,...) interface 
e990: 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c  to.** selectivel
e9a0: 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75  y disable variou
e9b0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
e9c0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
e9d0: 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65  TE_QueryFlattene
e9e0: 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75  r 0x0001   /* Qu
e9f0: 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a  ery flattening *
ea00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ea10: 5f 57 69 6e 64 6f 77 46 75 6e 63 20 20 20 20 20  _WindowFunc     
ea20: 30 78 30 30 30 32 20 20 20 2f 2a 20 55 73 65 20  0x0002   /* Use 
ea30: 78 49 6e 76 65 72 73 65 20 66 6f 72 20 77 69 6e  xInverse for win
ea40: 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  dow functions */
ea50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ea60: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
ea70: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
ea80: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
ea90: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
eaa0: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
eab0: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
eac0: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
ead0: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
eae0: 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70  QLITE_DistinctOp
eaf0: 74 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2a  t    0x0010   /*
eb00: 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20   DISTINCT using 
eb10: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
eb20: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49  ne SQLITE_CoverI
eb30: 64 78 53 63 61 6e 20 20 20 30 78 30 30 32 30 20  dxScan   0x0020 
eb40: 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e    /* Covering in
eb50: 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65  dex scans */.#de
eb60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65  fine SQLITE_Orde
eb70: 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 34  rByIdxJoin 0x004
eb80: 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  0   /* ORDER BY 
eb90: 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64  of joins via ind
eba0: 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ex */.#define SQ
ebb0: 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20  LITE_Transitive 
ebc0: 20 20 20 20 30 78 30 30 38 30 20 20 20 2f 2a 20      0x0080   /* 
ebd0: 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74  Transitive const
ebe0: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
ebf0: 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f  e SQLITE_OmitNoo
ec00: 70 4a 6f 69 6e 20 20 20 30 78 30 31 30 30 20 20  pJoin   0x0100  
ec10: 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20   /* Omit unused 
ec20: 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20  tables in joins 
ec30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ec40: 45 5f 43 6f 75 6e 74 4f 66 56 69 65 77 20 20 20  E_CountOfView   
ec50: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 68 65   0x0200   /* The
ec60: 20 63 6f 75 6e 74 2d 6f 66 2d 76 69 65 77 20 6f   count-of-view o
ec70: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
ec80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75  define SQLITE_Cu
ec90: 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 30  rsorHints    0x0
eca0: 34 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f  400   /* Add OP_
ecb0: 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64  CursorHint opcod
ecc0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
ecd0: 4c 49 54 45 5f 53 74 61 74 34 20 20 20 20 20 20  LITE_Stat4      
ece0: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
ecf0: 55 73 65 20 53 54 41 54 34 20 64 61 74 61 20 2a  Use STAT4 data *
ed00: 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65 78 70 65  /.   /* TH3 expe
ed10: 63 74 73 20 74 68 65 20 53 74 61 74 34 20 20 20  cts the Stat4   
ed20: 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20 74 6f 20  ^^^^^^ value to 
ed30: 62 65 20 30 78 30 38 30 30 2e 20 20 44 6f 6e 27  be 0x0800.  Don'
ed40: 74 20 63 68 61 6e 67 65 20 69 74 20 2a 2f 0a 23  t change it */.#
ed50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 75  define SQLITE_Pu
ed60: 73 68 44 6f 77 6e 20 20 20 20 20 20 20 30 78 31  shDown       0x1
ed70: 30 30 30 20 20 20 2f 2a 20 54 68 65 20 70 75 73  000   /* The pus
ed80: 68 2d 64 6f 77 6e 20 6f 70 74 69 6d 69 7a 61 74  h-down optimizat
ed90: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
eda0: 51 4c 49 54 45 5f 53 69 6d 70 6c 69 66 79 4a 6f  QLITE_SimplifyJo
edb0: 69 6e 20 20 20 30 78 32 30 30 30 20 20 20 2f 2a  in   0x2000   /*
edc0: 20 43 6f 6e 76 65 72 74 20 4c 45 46 54 20 4a 4f   Convert LEFT JO
edd0: 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f 0a 23 64  IN to JOIN */.#d
ede0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 6b 69  efine SQLITE_Ski
edf0: 70 53 63 61 6e 20 20 20 20 20 20 20 30 78 34 30  pScan       0x40
ee00: 30 30 20 20 20 2f 2a 20 53 6b 69 70 2d 73 63 61  00   /* Skip-sca
ee10: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
ee20: 4c 49 54 45 5f 50 72 6f 70 61 67 61 74 65 43 6f  LITE_PropagateCo
ee30: 6e 73 74 20 30 78 38 30 30 30 20 20 20 2f 2a 20  nst 0x8000   /* 
ee40: 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 70 72 6f  The constant pro
ee50: 70 61 67 61 74 69 6f 6e 20 6f 70 74 20 2a 2f 0a  pagation opt */.
ee60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
ee70: 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78  llOpts        0x
ee80: 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70  ffff   /* All op
ee90: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a  timizations */..
eea0: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72  /*.** Macros for
eeb0: 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72   testing whether
eec0: 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61   or not optimiza
eed0: 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65  tions are enable
eee0: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a  d or disabled..*
eef0: 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  /.#define Optimi
ef00: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
ef10: 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29  b, mask)  (((db)
ef20: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
ef30: 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  sk))!=0).#define
ef40: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61   OptimizationEna
ef50: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
ef60: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
ef70: 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a  ags&(mask))==0).
ef80: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
ef90: 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66  ue if it OK to f
efa0: 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65  actor constant e
efb0: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20  xpressions into 
efc0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
efd0: 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20  on.** code. The 
efe0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61  argument is a Pa
eff0: 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74  rse object for t
f000: 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
f010: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f  r..*/.#define Co
f020: 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28  nstFactorOk(P) (
f030: 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74  (P)->okConstFact
f040: 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  or)../*.** Possi
f050: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
f060: 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20  he sqlite.magic 
f070: 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75  field..** The nu
f080: 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e  mbers are obtain
f090: 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  ed at random and
f0a0: 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c   have no special
f0b0: 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a   meaning, other.
f0c0: 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69  ** than being di
f0d0: 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20  stinct from one 
f0e0: 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  another..*/.#def
f0f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f100: 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39  _OPEN     0xa029
f110: 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73  a697  /* Databas
f120: 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  e is open */.#de
f130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
f140: 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33  C_CLOSED   0x9f3
f150: 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61  c2d33  /* Databa
f160: 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a  se is closed */.
f170: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
f180: 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78  AGIC_SICK     0x
f190: 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72  4b771290  /* Err
f1a0: 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20  or and awaiting 
f1b0: 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  close */.#define
f1c0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
f1d0: 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30  SY     0xf03b790
f1e0: 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63  6  /* Database c
f1f0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
f200: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f210: 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20  E_MAGIC_ERROR   
f220: 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20   0xb5357930  /* 
f230: 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  An SQLITE_MISUSE
f240: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
f250: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f260: 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20  E_MAGIC_ZOMBIE  
f270: 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20   0x64cffc7f  /* 
f280: 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20  Close with last 
f290: 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20  statement close 
f2a0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
f2b0: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64  QL function is d
f2c0: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
f2d0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
f2e0: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
f2f0: 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c  ure.  For global
f300: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69   built-in functi
f310: 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72 28  ons (ex: substr(
f320: 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28  ), max(), count(
f330: 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20  )).** a pointer 
f340: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
f350: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65  e is held in the
f360: 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46   sqlite3BuiltinF
f370: 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e  unctions object.
f380: 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e  .** For per-conn
f390: 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74 69  ection applicati
f3a0: 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  on-defined funct
f3b0: 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72 20  ions, a pointer 
f3c0: 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63  to this.** struc
f3d0: 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20  ture is held in 
f3e0: 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68 61  the db->aHash ha
f3f0: 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  sh table..**.** 
f400: 54 68 65 20 75 2e 70 48 61 73 68 20 66 69 65 6c  The u.pHash fiel
f410: 64 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  d is used by the
f420: 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e   global built-in
f430: 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74 72  s.  The u.pDestr
f440: 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69  uctor.** field i
f450: 73 20 75 73 65 64 20 62 79 20 70 65 72 2d 63 6f  s used by per-co
f460: 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65 66  nnection app-def
f470: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73   functions..*/.s
f480: 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a  truct FuncDef {.
f490: 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20 20    i8 nArg;      
f4a0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
f4b0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
f4c0: 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74  -1 means unlimit
f4d0: 65 64 20 2a 2f 0a 20 20 75 33 32 20 66 75 6e 63  ed */.  u32 func
f4e0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
f4f0: 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  Some combination
f500: 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   of SQLITE_FUNC_
f510: 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  * */.  void *pUs
f520: 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55  erData;     /* U
f530: 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74  ser data paramet
f540: 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20  er */.  FuncDef 
f550: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
f560: 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69  Next function wi
f570: 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a  th same name */.
f580: 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63 29    void (*xSFunc)
f590: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
f5a0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
f5b0: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20  lue**); /* func 
f5c0: 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20  or agg-step */. 
f5d0: 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a   void (*xFinaliz
f5e0: 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  e)(sqlite3_conte
f5f0: 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  xt*);           
f600: 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66 69         /* Agg fi
f610: 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76 6f 69  nalizer */.  voi
f620: 64 20 28 2a 78 56 61 6c 75 65 29 28 73 71 6c 69  d (*xValue)(sqli
f630: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
f640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f650: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 67     /* Current ag
f660: 67 20 76 61 6c 75 65 20 2a 2f 0a 20 20 76 6f 69  g value */.  voi
f670: 64 20 28 2a 78 49 6e 76 65 72 73 65 29 28 73 71  d (*xInverse)(sq
f680: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
f690: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
f6a0: 2a 2a 29 3b 20 2f 2a 20 69 6e 76 65 72 73 65 20  **); /* inverse 
f6b0: 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 63 6f  agg-step */.  co
f6c0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
f6d0: 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f     /* SQL name o
f6e0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  f the function. 
f6f0: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
f700: 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b   FuncDef *pHash;
f710: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
f720: 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e  th a different n
f730: 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65  ame but the same
f740: 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e   hash */.    Fun
f750: 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
f760: 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52  structor;   /* R
f770: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64  eference counted
f780: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
f790: 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d  tion */.  } u;.}
f7a0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
f7b0: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
f7c0: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
f7d0: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
f7e0: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
f7f0: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
f800: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
f810: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
f820: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
f830: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
f840: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
f850: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
f860: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
f870: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
f880: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
f890: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
f8a0: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
f8b0: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
f8c0: 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68   is set to.** th
f8d0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
f8e0: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
f8f0: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
f900: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
f910: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
f920: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
f930: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
f940: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
f950: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
f960: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
f970: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
f980: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
f990: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
f9a0: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
f9b0: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
f9c0: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
f9d0: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
f9e0: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
f9f0: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
fa00: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
fa10: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
fa20: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
fa30: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
fa40: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
fa50: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
fa60: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
fa70: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
fa80: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
fa90: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
faa0: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
fab0: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
fac0: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
fad0: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
fae0: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
faf0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
fb00: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
fb10: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
fb20: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
fb30: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
fb40: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
fb50: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
fb60: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
fb70: 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a  PEOFARG.  And.**
fb80: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fb90: 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68  STANT must be th
fba0: 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45  e same as SQLITE
fbb0: 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20  _DETERMINISTIC. 
fbc0: 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73   There.** are as
fbd0: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
fbe0: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f  s in the code to
fbf0: 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a   verify this..**
fc00: 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
fc10: 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
fc20: 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
fc30: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
fc40: 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20  C_MINMAX    ==  
fc50: 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  NC_MinMaxAgg    
fc60: 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67    == SF_MinMaxAg
fc70: 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  g.**     SQLITE_
fc80: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d  FUNC_LENGTH    =
fc90: 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  =  OPFLAG_LENGTH
fca0: 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  ARG.**     SQLIT
fcb0: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
fcc0: 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45   ==  OPFLAG_TYPE
fcd0: 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c  OFARG.**     SQL
fce0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fcf0: 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45  T  ==  SQLITE_DE
fd00: 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d  TERMINISTIC from
fd10: 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20   the API.**     
fd20: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 44 49 52 45  SQLITE_FUNC_DIRE
fd30: 43 54 20 20 20 20 3d 3d 20 20 53 51 4c 49 54 45  CT    ==  SQLITE
fd40: 5f 44 49 52 45 43 54 4f 4e 4c 59 20 66 72 6f 6d  _DIRECTONLY from
fd50: 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20   the API.**     
fd60: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
fd70: 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e  ASK   depends on
fd80: 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63   SQLITE_UTF* mac
fd90: 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a  ros in the API.*
fda0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fdb0: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30  _FUNC_ENCMASK  0
fdc0: 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f  x0003 /* SQLITE_
fdd0: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46  UTF8, SQLITE_UTF
fde0: 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20  16BE or UTF16LE 
fdf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fe00: 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20  E_FUNC_LIKE     
fe10: 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64  0x0004 /* Candid
fe20: 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45  ate for the LIKE
fe30: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
fe40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fe50: 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78  FUNC_CASE     0x
fe60: 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0008 /* Case-sen
fe70: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
fe80: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
fe90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fea0: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30  _EPHEM    0x0010
feb0: 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20   /* Ephemeral.  
fec0: 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45  Delete with VDBE
fed0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fee0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
fef0: 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74   0x0020 /* sqlit
ff00: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
ff10: 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  () might be call
ff20: 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ed*/.#define SQL
ff30: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
ff40: 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c    0x0040 /* Buil
ff50: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
ff60: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
ff70: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
ff80: 50 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a  PEOF   0x0080 /*
ff90: 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66   Built-in typeof
ffa0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
ffb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ffc0: 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31  NC_COUNT    0x01
ffd0: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  00 /* Built-in c
ffe0: 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74  ount(*) aggregat
fff0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
10000 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43  ITE_FUNC_COALESC
10010 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c  E 0x0200 /* Buil
10020 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
10030 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23  or ifnull() */.#
10040 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10050 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34  NC_UNLIKELY 0x04
10060 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75  00 /* Built-in u
10070 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69  nlikely() functi
10080 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
10090 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
100a0 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e  NT 0x0800 /* Con
100b0 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76  stant inputs giv
100c0 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74  e a constant out
100d0 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
100e0 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
100f0 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72  X   0x1000 /* Tr
10100 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64  ue for min() and
10110 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
10120 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
10130 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
10140 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f    0x2000 /* "Slo
10150 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65  w Change". Value
10160 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67   constant during
10170 20 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   a.             
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10190 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65         ** single
101a0 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63   query - might c
101b0 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20  hange over time 
101c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
101d0 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20  E_FUNC_AFFINITY 
101e0 30 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x4000 /* Built-
101f0 69 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66 75  in affinity() fu
10200 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
10210 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f 46  e SQLITE_FUNC_OF
10220 46 53 45 54 20 20 20 30 78 38 30 30 30 20 2f 2a  FSET   0x8000 /*
10230 20 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65   Built-in sqlite
10240 5f 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69  _offset() functi
10250 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
10260 4c 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57  LITE_FUNC_WINDOW
10270 20 20 20 30 78 30 30 30 31 30 30 30 30 20 2f 2a     0x00010000 /*
10280 20 42 75 69 6c 74 2d 69 6e 20 77 69 6e 64 6f 77   Built-in window
10290 2d 6f 6e 6c 79 20 66 75 6e 63 74 69 6f 6e 20 2a  -only function *
102a0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
102b0 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 20 30  _FUNC_INTERNAL 0
102c0 78 30 30 30 34 30 30 30 30 20 2f 2a 20 46 6f 72  x00040000 /* For
102d0 20 75 73 65 20 62 79 20 4e 65 73 74 65 64 50 61   use by NestedPa
102e0 72 73 65 28 29 20 6f 6e 6c 79 20 2a 2f 0a 23 64  rse() only */.#d
102f0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
10300 43 5f 44 49 52 45 43 54 20 20 20 30 78 30 30 30  C_DIRECT   0x000
10310 38 30 30 30 30 20 2f 2a 20 4e 6f 74 20 66 6f 72  80000 /* Not for
10320 20 75 73 65 20 69 6e 20 54 52 49 47 47 45 52 73   use in TRIGGERs
10330 20 6f 72 20 56 49 45 57 73 20 2a 2f 0a 23 64 65   or VIEWs */.#de
10340 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10350 5f 53 55 42 54 59 50 45 20 20 30 78 30 30 31 30  _SUBTYPE  0x0010
10360 30 30 30 30 20 2f 2a 20 52 65 73 75 6c 74 20 6c  0000 /* Result l
10370 69 6b 65 6c 79 20 74 6f 20 68 61 76 65 20 73 75  ikely to have su
10380 62 2d 74 79 70 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  b-type */../*.**
10390 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
103a0 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
103b0 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
103c0 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
103d0 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
103e0 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
103f0 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
10400 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
10410 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
10420 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10430 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10440 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
10450 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
10460 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
10470 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
10480 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
10490 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
104a0 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
104b0 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
104c0 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
104d0 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
104e0 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
104f0 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
10500 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
10510 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
10520 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
10530 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
10540 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
10550 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20  function. If.** 
10560 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
10570 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
10580 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
10590 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
105a0 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
105b0 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
105c0 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
105d0 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
105e0 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
105f0 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
10600 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
10610 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
10620 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    DFUNCTION(zNam
10630 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
10640 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
10650 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
10660 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
10670 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
10680 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e  CONSTANT flag an
10690 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68  d.**     adds th
106a0 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
106b0 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65  OCHNG flag.  Use
106c0 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d  d for date & tim
106d0 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  e functions.**  
106e0 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73     and functions
106f0 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72   like sqlite_ver
10700 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20  sion() that can 
10710 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20  change, but not 
10720 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20  during.**     a 
10730 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 20 20 54  single query.  T
10740 68 65 20 69 41 72 67 20 69 73 20 69 67 6e 6f 72  he iArg is ignor
10750 65 64 2e 20 20 54 68 65 20 75 73 65 72 2d 64 61  ed.  The user-da
10760 74 61 20 69 73 20 61 6c 77 61 79 73 20 73 65 74  ta is always set
10770 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20 4e 55 4c  .**     to a NUL
10780 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20  L pointer.  The 
10790 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69 73  bNC parameter is
107a0 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
107b0 20 20 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61     PURE_DATE(zNa
107c0 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
107d0 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
107e0 20 20 20 55 73 65 64 20 66 6f 72 20 22 70 75 72     Used for "pur
107f0 65 22 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e  e" date/time fun
10800 63 74 69 6f 6e 73 2c 20 74 68 69 73 20 6d 61 63  ctions, this mac
10810 72 6f 20 69 73 20 6c 69 6b 65 20 44 46 55 4e 43  ro is like DFUNC
10820 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65 78 63 65  TION.**     exce
10830 70 74 20 74 68 61 74 20 69 74 20 64 6f 65 73 20  pt that it does 
10840 73 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 46  set the SQLITE_F
10850 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
10860 67 73 2e 20 20 69 41 72 67 20 69 73 0a 2a 2a 20  gs.  iArg is.** 
10870 20 20 20 20 69 67 6e 6f 72 65 64 20 61 6e 64 20      ignored and 
10880 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 66 6f  the user-data fo
10890 72 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e  r these function
108a0 73 20 69 73 20 73 65 74 20 74 6f 20 61 6e 20 0a  s is set to an .
108b0 2a 2a 20 20 20 20 20 61 72 62 69 74 72 61 72 79  **     arbitrary
108c0 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65   non-NULL pointe
108d0 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72 61  r.  The bNC para
108e0 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65  meter is not use
108f0 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45  d..**.**   AGGRE
10900 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
10910 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74  , iArg, bNC, xSt
10920 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20  ep, xFinal).**  
10930 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
10940 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  e an aggregate f
10950 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
10960 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  on implemented b
10970 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66  y.**     the C f
10980 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61  unctions xStep a
10990 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66  nd xFinal. The f
109a0 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65  irst four parame
109b0 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20  ters.**     are 
109c0 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74  interpreted in t
109d0 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74  he same way as t
109e0 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d  he first 4 param
109f0 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20  eters to.**     
10a00 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a  FUNCTION()..**.*
10a10 2a 20 20 20 57 46 55 4e 43 54 49 4f 4e 28 7a 4e  *   WFUNCTION(zN
10a20 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10a30 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20   xStep, xFinal, 
10a40 78 56 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65  xValue, xInverse
10a50 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
10a60 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65   create an aggre
10a70 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65  gate function de
10a80 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  finition impleme
10a90 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74  nted by.**     t
10aa0 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78  he C functions x
10ab0 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e  Step and xFinal.
10ac0 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20   The first four 
10ad0 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20  parameters.**   
10ae0 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65    are interprete
10af0 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  d in the same wa
10b00 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34  y as the first 4
10b10 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a   parameters to.*
10b20 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29  *     FUNCTION()
10b30 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55  ..**.**   LIKEFU
10b40 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
10b50 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20  pArg, flags).** 
10b60 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
10b70 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
10b80 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
10b90 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
10ba0 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20  ame.**     that 
10bb0 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
10bc0 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d  uments and is im
10bd0 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63  plemented by a c
10be0 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20  all to C.**     
10bf0 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e  function likeFun
10c00 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67  c. Argument pArg
10c10 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
10c20 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a  oid *) and made.
10c30 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65  **     available
10c40 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   as the function
10c50 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
10c60 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
10c70 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e  . The.**     Fun
10c80 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61  cDef.flags varia
10c90 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68  ble is set to th
10ca0 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61  e value passed a
10cb0 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20  s the flags.**  
10cc0 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f     parameter..*/
10cd0 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
10ce0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
10cf0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10d00 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10d10 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
10d20 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
10d30 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
10d40 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
10d50 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
10d60 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
10d70 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
10d80 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10d90 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
10da0 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10db0 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
10dc0 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
10dd0 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
10de0 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
10df0 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
10e00 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
10e10 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10e20 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10e30 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne DFUNCTION(zNa
10e40 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10e50 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10e60 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10e70 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
10e80 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20 30 2c 20  E_UTF8, \.   0, 
10e90 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
10ea0 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
10eb0 0a 23 64 65 66 69 6e 65 20 50 55 52 45 5f 44 41  .#define PURE_DA
10ec0 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
10ed0 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10ee0 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10ef0 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
10f00 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c  |SQLITE_UTF8|SQL
10f10 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10f20 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64 2a 29 26  T, \.   (void*)&
10f30 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 30  sqlite3Config, 0
10f40 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10f50 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10f60 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
10f70 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  2(zName, nArg, i
10f80 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c  Arg, bNC, xFunc,
10f90 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
10fa0 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55   {nArg,SQLITE_FU
10fb0 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
10fc0 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10fd0 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10fe0 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a  L)|extraFlags,\.
10ff0 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
11000 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
11010 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
11020 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
11030 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f  fine STR_FUNCTIO
11040 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  N(zName, nArg, p
11050 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
11060 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
11070 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
11080 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
11090 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
110a0 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
110b0 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
110c0 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a  0, 0, #zName, }.
110d0 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43  #define LIKEFUNC
110e0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
110f0 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  g, flags) \.  {n
11100 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
11110 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
11120 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20  _UTF8|flags, \. 
11130 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30    (void *)arg, 0
11140 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30  , likeFunc, 0, 0
11150 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
11160 20 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45   }.#define AGGRE
11170 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
11180 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
11190 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65  , xFinal, xValue
111a0 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
111b0 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
111c0 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
111d0 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
111e0 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
111f0 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
11200 2c 78 56 61 6c 75 65 2c 30 2c 23 7a 4e 61 6d 65  ,xValue,0,#zName
11210 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41  , {0}}.#define A
11220 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c  GGREGATE2(zName,
11230 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
11240 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65  xStep, xFinal, e
11250 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
11260 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
11270 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
11280 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
11290 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c  aFlags, \.   SQL
112a0 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
112b0 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
112c0 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30 2c 23 7a  inal,xFinal,0,#z
112d0 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69  Name, {0}}.#defi
112e0 6e 65 20 57 41 47 47 52 45 47 41 54 45 28 7a 4e  ne WAGGREGATE(zN
112f0 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
11300 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
11310 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65  l, xValue, xInve
11320 72 73 65 2c 20 66 29 20 5c 0a 20 20 7b 6e 41 72  rse, f) \.  {nAr
11330 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
11340 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
11350 45 45 44 43 4f 4c 4c 29 7c 66 2c 20 5c 0a 20 20  EEDCOLL)|f, \.  
11360 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
11370 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65  TR(arg), 0, xSte
11380 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c  p,xFinal,xValue,
11390 78 49 6e 76 65 72 73 65 2c 23 7a 4e 61 6d 65 2c  xInverse,#zName,
113a0 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 49 4e   {0}}.#define IN
113b0 54 45 52 4e 41 4c 5f 46 55 4e 43 54 49 4f 4e 28  TERNAL_FUNCTION(
113c0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 78 46 75  zName, nArg, xFu
113d0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
113e0 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e 54 45 52  QLITE_FUNC_INTER
113f0 4e 41 4c 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  NAL|SQLITE_UTF8|
11400 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
11410 54 41 4e 54 2c 20 5c 0a 20 20 20 30 2c 20 30 2c  TANT, \.   0, 0,
11420 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c   xFunc, 0, 0, 0,
11430 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 0a   #zName, {0} }..
11440 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65  ./*.** All curre
11450 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  nt savepoints ar
11460 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  e stored in a li
11470 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
11480 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33  ng at.** sqlite3
11490 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65  .pSavepoint. The
114a0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69   first element i
114b0 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68  n the list is th
114c0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a  e most recently.
114d0 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f  ** opened savepo
114e0 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20  int. Savepoints 
114f0 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65  are added to the
11500 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62   list by the vdb
11510 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e  e.** OP_Savepoin
11520 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
11530 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69  /.struct Savepoi
11540 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  nt {.  char *zNa
11550 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
11560 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61             /* Sa
11570 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75  vepoint name (nu
11580 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f  l-terminated) */
11590 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
115a0 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
115b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
115c0 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20   of deferred fk 
115d0 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  violations */.  
115e0 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
115f0 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
11600 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11610 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b   deferred imm fk
11620 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  . */.  Savepoint
11630 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
11640 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
11650 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28  rent savepoint (
11660 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f  if any) */.};../
11670 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
11680 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74  ng are used as t
11690 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65  he second parame
116a0 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61  ter to sqlite3Sa
116b0 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e  vepoint(),.** an
116c0 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75  d as the P1 argu
116d0 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53  ment to the OP_S
116e0 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
116f0 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  tion..*/.#define
11700 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
11710 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
11720 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
11730 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  E    1.#define S
11740 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
11750 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  K   2.../*.** Ea
11760 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65  ch SQLite module
11770 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20   (virtual table 
11780 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64  definition) is d
11790 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20  efined by an.** 
117a0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
117b0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
117c0 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74  ure, stored in t
117d0 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75  he sqlite3.aModu
117e0 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65  le.** hash table
117f0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75  ..*/.struct Modu
11800 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  le {.  const sql
11810 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
11820 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43  dule;       /* C
11830 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73  allback pointers
11840 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
11850 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
11860 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
11870 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  me passed to cre
11880 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
11890 20 20 69 6e 74 20 6e 52 65 66 4d 6f 64 75 6c 65    int nRefModule
118a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
118b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
118c0 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
118d0 74 68 69 73 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  this object */. 
118e0 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20   void *pAux;    
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11900 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61        /* pAux pa
11910 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
11920 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
11930 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
11940 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20  id *);          
11950 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74    /* Module dest
11960 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
11970 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f  */.  Table *pEpo
11980 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
11990 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f            /* Epo
119a0 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72  nymous table for
119b0 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a   this module */.
119c0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d  };../*.** inform
119d0 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
119e0 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51   column of an SQ
119f0 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20  L table is held 
11a00 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  in an instance.*
11a10 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
11a20 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ure..*/.struct C
11a30 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a  olumn {.  char *
11a40 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61  zName;     /* Na
11a50 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  me of this colum
11a60 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68  n, \000, then th
11a70 65 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72  e type */.  Expr
11a80 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20   *pDflt;     /* 
11a90 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  Default value of
11aa0 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
11ab0 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20    char *zColl;  
11ac0 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
11ad0 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55  sequence.  If NU
11ae0 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61  LL, use the defa
11af0 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e  ult */.  u8 notN
11b00 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  ull;      /* An 
11b10 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e  OE_ code for han
11b20 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c  dling a NOT NULL
11b30 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
11b40 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
11b50 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
11b60 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76  SQLITE_AFF_... v
11b70 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a  alues */.  u8 sz
11b80 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Est;        /* E
11b90 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
11ba0 20 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63   value in this c
11bb0 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e  olumn. sizeof(IN
11bc0 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f  T)==1 */.  u8 co
11bd0 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42  lFlags;     /* B
11be0 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65  oolean propertie
11bf0 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f  s.  See COLFLAG_
11c00 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a   defines below *
11c10 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
11c20 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75   values for Colu
11c30 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a  mn.colFlags:.*/.
11c40 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
11c50 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20  PRIMKEY  0x0001 
11c60 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20     /* Column is 
11c70 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d  part of the prim
11c80 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
11c90 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45  ne COLFLAG_HIDDE
11ca0 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a  N   0x0002    /*
11cb0 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e   A hidden column
11cc0 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   in a virtual ta
11cd0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  ble */.#define C
11ce0 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20  OLFLAG_HASTYPE  
11cf0 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70  0x0004    /* Typ
11d00 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63  e name follows c
11d10 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64  olumn name */.#d
11d20 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 55 4e  efine COLFLAG_UN
11d30 49 51 55 45 20 20 20 30 78 30 30 30 38 20 20 20  IQUE   0x0008   
11d40 20 2f 2a 20 43 6f 6c 75 6d 6e 20 64 65 66 20 63   /* Column def c
11d50 6f 6e 74 61 69 6e 73 20 22 55 4e 49 51 55 45 22  ontains "UNIQUE"
11d60 20 6f 72 20 22 50 4b 22 20 2a 2f 0a 23 64 65 66   or "PK" */.#def
11d70 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 53 4f 52 54  ine COLFLAG_SORT
11d80 45 52 52 45 46 20 30 78 30 30 31 30 20 20 20 2f  ERREF 0x0010   /
11d90 2a 20 55 73 65 20 73 6f 72 74 65 72 2d 72 65 66  * Use sorter-ref
11da0 73 20 77 69 74 68 20 74 68 69 73 20 63 6f 6c 75  s with this colu
11db0 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22  mn */../*.** A "
11dc0 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e  Collating Sequen
11dd0 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62  ce" is defined b
11de0 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
11df0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
11e00 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e  * structure. Con
11e10 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c  ceptually, a col
11e20 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
11e30 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61  consists of a na
11e40 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70  me and.** a comp
11e50 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74  arison routine t
11e60 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
11e70 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65  order of that se
11e80 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  quence..**.** If
11e90 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73   CollSeq.xCmp is
11ea0 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20   NULL, it means 
11eb0 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c  that the.** coll
11ec0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
11ed0 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e  s undefined.  In
11ee0 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61  dices built on a
11ef0 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63  n undefined.** c
11f00 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11f10 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61  e may not be rea
11f20 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f  d or written..*/
11f30 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20  .struct CollSeq 
11f40 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
11f50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
11f60 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69  e of the collati
11f70 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46  ng sequence, UTF
11f80 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20  -8 encoded */.  
11f90 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
11fa0 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
11fb0 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62  coding handled b
11fc0 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f  y xCmp() */.  vo
11fd0 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20  id *pUser;      
11fe0 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
11ff0 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20  ument to xCmp() 
12000 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29  */.  int (*xCmp)
12010 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
12020 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f  t void*, int, co
12030 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
12040 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a  id (*xDel)(void*
12050 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f  );  /* Destructo
12060 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d  r for pUser */.}
12070 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20  ;../*.** A sort 
12080 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74  order can be eit
12090 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e  her ASC or DESC.
120a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
120b0 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20  TE_SO_ASC       
120c0 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  0  /* Sort in as
120d0 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
120e0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
120f0 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20  SO_DESC      1  
12100 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
12110 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
12120 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
12130 55 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20  UNDEFINED -1 /* 
12140 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70  No sort order sp
12150 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  ecified */../*.*
12160 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  * Column affinit
12170 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  y types..**.** T
12180 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76  hese used to hav
12190 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20  e mnemonic name 
121a0 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c  like 'i' for SQL
121b0 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
121c0 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53  and.** 't' for S
121d0 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20  QLITE_AFF_TEXT. 
121e0 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65   But we can save
121f0 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20   a little space 
12200 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74  and improve.** t
12210 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c  he speed a littl
12220 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74  e by numbering t
12230 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63  he values consec
12240 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42  utively..**.** B
12250 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73  ut rather than s
12260 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31  tart with 0 or 1
12270 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20  , we begin with 
12280 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a  'A'.  That way,.
12290 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65  ** when multiple
122a0 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20   affinity types 
122b0 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64  are concatenated
122c0 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61   into a string a
122d0 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68  nd.** used as th
122e0 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68  e P4 operand, th
122f0 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20  ey will be more 
12300 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  readable..**.** 
12310 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74  Note also that t
12320 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73  he numeric types
12330 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67   are grouped tog
12340 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65  ether so that te
12350 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e  sting.** for a n
12360 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61  umeric type is a
12370 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73   single comparis
12380 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f  on.  And the BLO
12390 42 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e  B type is first.
123a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
123b0 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20  TE_AFF_NONE     
123c0 30 78 34 30 20 20 2f 2a 20 27 40 27 20 2a 2f 0a  0x40  /* '@' */.
123d0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
123e0 46 46 5f 42 4c 4f 42 20 20 20 20 20 30 78 34 31  FF_BLOB     0x41
123f0 20 20 2f 2a 20 27 41 27 20 2a 2f 0a 23 64 65 66    /* 'A' */.#def
12400 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  ine SQLITE_AFF_T
12410 45 58 54 20 20 20 20 20 30 78 34 32 20 20 2f 2a  EXT     0x42  /*
12420 20 27 42 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20   'B' */.#define 
12430 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
12440 49 43 20 20 30 78 34 33 20 20 2f 2a 20 27 43 27  IC  0x43  /* 'C'
12450 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
12460 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20  TE_AFF_INTEGER  
12470 30 78 34 34 20 20 2f 2a 20 27 44 27 20 2a 2f 0a  0x44  /* 'D' */.
12480 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12490 46 46 5f 52 45 41 4c 20 20 20 20 20 30 78 34 35  FF_REAL     0x45
124a0 20 20 2f 2a 20 27 45 27 20 2a 2f 0a 0a 23 64 65    /* 'E' */..#de
124b0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75  fine sqlite3IsNu
124c0 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29  mericAffinity(X)
124d0 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41    ((X)>=SQLITE_A
124e0 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a  FF_NUMERIC)../*.
124f0 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
12500 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61  F_MASK values ma
12510 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e  sks off the sign
12520 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20  ificant bits of 
12530 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76  an.** affinity v
12540 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  alue..*/.#define
12550 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
12560 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a       0x47../*.**
12570 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
12580 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
12590 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
125a0 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
125b0 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
125c0 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a   affinity..**.**
125d0 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e   The SQLITE_NOTN
125e0 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f  ULL flag is a co
125f0 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c  mbination of NUL
12600 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55  LEQ and JUMPIFNU
12610 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73  LL..** It causes
12620 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20   an assert() to 
12630 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f  fire if either o
12640 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70  perand to a comp
12650 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74  arison.** operat
12660 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20  or is NULL.  It 
12670 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74  is added to cert
12680 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  ain comparison o
12690 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70  perators to.** p
126a0 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70  rove that the op
126b0 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79  erands are alway
126c0 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23  s NOT NULL..*/.#
126d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45  define SQLITE_KE
126e0 45 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20  EPNULL     0x08 
126f0 20 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63 74   /* Used by vect
12700 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23  or == or <> */.#
12710 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55  define SQLITE_JU
12720 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20  MPIFNULL   0x10 
12730 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74   /* jumps if eit
12740 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
12750 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
12760 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20  QLITE_STOREP2   
12770 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72     0x20  /* Stor
12780 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b  e result in reg[
12790 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20  P2] rather than 
127a0 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  jump */.#define 
127b0 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20  SQLITE_NULLEQ   
127c0 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c      0x80  /* NUL
127d0 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  L=NULL */.#defin
127e0 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
127f0 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41        0x90  /* A
12800 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61  ssert that opera
12810 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55  nds are never NU
12820 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LL */../*.** An 
12830 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
12840 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ype is created f
12850 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20  or each virtual 
12860 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e  table present in
12870 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
12880 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49   schema..**.** I
12890 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  f the database s
128a0 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
128b0 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f   then there is o
128c0 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
128d0 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  his.** structure
128e0 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
128f0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73  se connection (s
12900 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73  qlite3*) that us
12910 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a  es the shared.**
12920 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73   schema. This is
12930 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61   because each da
12940 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12950 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f  n requires its o
12960 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73  wn unique.** ins
12970 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c  tance of the sql
12980 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
12990 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  e used to access
129a0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
129b0 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  le.** implementa
129c0 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74  tion. sqlite3_vt
129d0 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20  ab* handles can 
129e0 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65  not be shared be
129f0 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73  tween.** databas
12a00 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65  e connections, e
12a10 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73  ven when the res
12a20 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  t of the in-memo
12a30 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73  ry database.** s
12a40 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
12a50 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   as the implemen
12a60 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f  tation often sto
12a70 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  res the database
12a80 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  .** connection h
12a90 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20  andle passed to 
12aa0 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e  it via the xConn
12ab0 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65  ect() or xCreate
12ac0 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72  () method.** dur
12ad0 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
12ae0 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54  on internally. T
12af0 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
12b00 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d  nection handle m
12b10 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73  ay.** then be us
12b20 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61  ed by the virtua
12b30 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
12b40 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73  tation to access
12b50 20 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20   real tables.** 
12b60 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
12b70 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
12b80 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
12b90 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a   of the callers.
12ba0 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
12bb0 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e  these accesses n
12bc0 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76  eed to be made v
12bd0 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ia the same data
12be0 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
12bf0 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
12c00 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
12c10 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
12c20 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
12c30 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
12c40 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
12c50 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
12c60 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
12c70 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
12c80 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
12c90 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
12ca0 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
12cb0 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
12cc0 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
12cd0 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
12ce0 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
12cf0 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
12d00 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
12d10 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
12d20 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
12d30 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
12d40 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
12d50 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
12d60 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
12d70 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
12d80 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
12d90 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
12da0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
12db0 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
12dc0 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
12dd0 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
12de0 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
12df0 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
12e00 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
12e10 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
12e20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
12e30 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
12e40 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
12e50 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
12e60 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
12e70 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
12e80 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
12e90 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65  re not.** delete
12ea0 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
12eb0 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
12ec0 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
12ed0 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64  ect()ed.** immed
12ee0 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c  iately. Instead,
12ef0 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20   they are moved 
12f00 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70  from the Table.p
12f10 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a  VTable list to.*
12f20 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64  * another linked
12f30 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20   list headed by 
12f40 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73  the sqlite3.pDis
12f50 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f  connect member o
12f60 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  f the.** corresp
12f70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73  onding sqlite3 s
12f80 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61  tructure. They a
12f90 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f  re then deleted/
12fa0 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a  xDisconnected.**
12fb0 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
12fc0 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
12fd0 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
12fe0 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
12ff0 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
13000 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
13010 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
13020 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
13030 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
13040 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
13050 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
13060 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
13070 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
13080 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
13090 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
130a0 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
130b0 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
130c0 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
130d0 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
130e0 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
130f0 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
13100 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
13110 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
13120 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
13130 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
13140 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73  llocated by.** s
13150 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
13160 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
13170 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
13180 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
13190 62 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73  b as.** the firs
131a0 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73  t argument..*/.s
131b0 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20  truct VTable {. 
131c0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
131d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
131e0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
131f0 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
13200 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  h this table */.
13210 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20    Module *pMod; 
13220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
13230 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65  ointer to module
13240 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
13250 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
13260 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f  b *pVtab;      /
13270 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61  * Pointer to vta
13280 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20  b instance */.  
13290 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
132a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
132b0 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
132c0 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
132d0 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74  e */.  u8 bConst
132e0 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  raint;          
132f0 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
13300 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70  traints are supp
13310 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  orted */.  int i
13320 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
13330 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66       /* Depth of
13340 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73   the SAVEPOINT s
13350 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65  tack */.  VTable
13360 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
13370 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
13380 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20  inked list (see 
13390 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  above) */.};../*
133a0 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66  .** The schema f
133b0 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c  or each SQL tabl
133c0 65 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65  e and view is re
133d0 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
133e0 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73  ory.** by an ins
133f0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
13400 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
13410 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c  ..*/.struct Tabl
13420 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  e {.  char *zNam
13430 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
13440 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
13450 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c  or view */.  Col
13460 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20  umn *aCol;      
13470 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
13480 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
13490 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
134a0 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20  Index;       /* 
134b0 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65  List of SQL inde
134c0 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c  xes on this tabl
134d0 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  e. */.  Select *
134e0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
134f0 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e  NULL for tables.
13500 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69    Points to defi
13510 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77  nition if a view
13520 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b  . */.  FKey *pFK
13530 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ey;         /* L
13540 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c  inked list of al
13550 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69  l foreign keys i
13560 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
13570 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
13580 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
13590 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
135a0 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
135b0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c  olumn */.  ExprL
135c0 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20  ist *pCheck;    
135d0 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e  /* All CHECK con
135e0 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20  straints */.    
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13600 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f     /*   ... also
13610 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20   used as column 
13620 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56  name list in a V
13630 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  IEW */.  int tnu
13640 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
13650 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65   Root BTree page
13660 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20   for this table 
13670 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66  */.  u32 nTabRef
13680 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
13690 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
136a0 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
136b0 0a 20 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b  .  u32 tabFlags;
136c0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
136d0 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a  of TF_* values *
136e0 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20  /.  i16 iPKey;  
136f0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e           /* If n
13700 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65  ot negative, use
13710 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20   aCol[iPKey] as 
13720 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  the rowid */.  i
13730 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  16 nCol;        
13740 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13750 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
13760 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   table */.  LogE
13770 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20  st nRowLogEst;  
13780 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f   /* Estimated ro
13790 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72  ws in table - fr
137a0 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
137b0 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
137c0 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20  t szTabRow;     
137d0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
137e0 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20  e of each table 
137f0 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  row in bytes */.
13800 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
13810 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20  ABLE_COSTMULT.  
13820 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b  LogEst costMult;
13830 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c       /* Cost mul
13840 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e  tiplier for usin
13850 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
13860 23 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43  #endif.  u8 keyC
13870 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
13880 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63   What to do in c
13890 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73  ase of uniquenes
138a0 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50  s conflict on iP
138b0 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  Key */.#ifndef S
138c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
138d0 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43  TABLE.  int addC
138e0 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20  olOffset;    /* 
138f0 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45  Offset in CREATE
13900 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61   TABLE stmt to a
13910 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
13920 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
13930 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
13940 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
13950 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20   nModuleArg;    
13960 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
13970 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
13980 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72  module */.  char
13990 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20   **azModuleArg; 
139a0 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a   /* 0: module 1:
139b0 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20   schema 2: vtab 
139c0 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20  name 3...: args 
139d0 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54  */.  VTable *pVT
139e0 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73  able;     /* Lis
139f0 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65  t of VTable obje
13a00 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  cts. */.#endif. 
13a10 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
13a20 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  er;   /* List of
13a30 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64   triggers stored
13a40 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20   in pSchema */. 
13a50 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
13a60 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
13a70 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
13a80 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61  is table */.  Ta
13a90 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65  ble *pNextZombie
13aa0 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68  ;  /* Next on th
13ab0 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54  e Parse.pZombieT
13ac0 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ab list */.};../
13ad0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
13ae0 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61  ues for Table.ta
13af0 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46  bFlags..**.** TF
13b00 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69  _OOOHidden appli
13b10 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20  es to tables or 
13b20 76 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68  view that have h
13b30 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68  idden columns th
13b40 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  at are.** follow
13b50 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e  ed by non-hidden
13b60 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70   columns.  Examp
13b70 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52  le:  "CREATE VIR
13b80 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49  TUAL TABLE x USI
13b90 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49  NG.** vtab1(a HI
13ba0 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e  DDEN, b);".  Sin
13bb0 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d  ce "b" is a non-
13bc0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75  hidden column bu
13bd0 74 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c  t "a" is hidden,
13be0 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69  .** the TF_OOOHi
13bf0 64 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77  dden attribute w
13c00 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68  ould apply in th
13c10 69 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74  is case.  Such t
13c20 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a  ables require.**
13c30 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e   special handlin
13c40 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20  g during INSERT 
13c50 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23  processing..*/.#
13c60 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e  define TF_Readon
13c70 6c 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31  ly        0x0001
13c80 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79      /* Read-only
13c90 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f   system table */
13ca0 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65  .#define TF_Ephe
13cb0 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30  meral       0x00
13cc0 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
13cd0 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
13ce0 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
13cf0 6d 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34  maryKey   0x0004
13d00 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73      /* Table has
13d10 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a   a primary key *
13d20 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74  /.#define TF_Aut
13d30 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30  oincrement   0x0
13d40 30 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  008    /* Intege
13d50 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
13d60 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
13d70 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
13d80 53 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30  Stat1        0x0
13d90 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f  010    /* nRowLo
13da0 67 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71  gEst set from sq
13db0 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64  lite_stat1 */.#d
13dc0 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74  efine TF_Without
13dd0 52 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20  Rowid    0x0020 
13de0 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20     /* No rowid. 
13df0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
13e00 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  the key */.#defi
13e10 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52  ne TF_NoVisibleR
13e20 6f 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20  owid  0x0040    
13e30 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62  /* No user-visib
13e40 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d  le "rowid" colum
13e50 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  n */.#define TF_
13e60 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20  OOOHidden       
13e70 30 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74  0x0080    /* Out
13e80 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e  -of-Order hidden
13e90 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66   columns */.#def
13ea0 69 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64  ine TF_StatsUsed
13eb0 20 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20         0x0100   
13ec0 20 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65   /* Query planne
13ed0 72 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65  r decisions affe
13ee0 63 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20  cted by.        
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f00 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
13f10 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73  Index.aiRowLogEs
13f20 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64  t[] values */.#d
13f30 65 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e  efine TF_HasNotN
13f40 75 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20  ull      0x0200 
13f50 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e     /* Contains N
13f60 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
13f70 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  nts */.#define T
13f80 46 5f 53 68 61 64 6f 77 20 20 20 20 20 20 20 20  F_Shadow        
13f90 20 20 30 78 30 34 30 30 20 20 20 20 2f 2a 20 54    0x0400    /* T
13fa0 72 75 65 20 66 6f 72 20 61 20 73 68 61 64 6f 77  rue for a shadow
13fb0 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   table */../*.**
13fc0 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
13fd0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
13fe0 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
13ff0 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
14000 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
14010 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
14020 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
14030 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
14040 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
14050 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
14060 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
14070 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
14080 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
14090 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
140a0 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
140b0 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a  X)->nModuleArg).
140c0 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
140d0 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
140e0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
140f0 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
14100 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d  rmine if a colum
14110 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73  n is hidden.  Is
14120 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
14130 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77  lumn().** only w
14140 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72  orks for non-vir
14150 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64  tual tables (ord
14160 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  inary tables and
14170 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a   views) and is.*
14180 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75  * always false u
14190 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41  nless SQLITE_ENA
141a0 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
141b0 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20  NS is defined.  
141c0 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43  The.** IsHiddenC
141d0 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73  olumn() macro is
141e0 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65   general purpose
141f0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
14200 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48  (SQLITE_ENABLE_H
14210 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23  IDDEN_COLUMNS).#
14220 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
14230 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
14240 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
14250 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
14260 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
14270 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
14280 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
14290 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
142a0 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
142b0 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  0).#elif !define
142c0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
142d0 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64  RTUALTABLE).#  d
142e0 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
142f0 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
14300 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
14310 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
14320 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
14330 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
14340 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73  Column(X) 0.#els
14350 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  e.#  define IsHi
14360 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
14370 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
14380 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
14390 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
143a0 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74  ndif.../* Does t
143b0 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20  he table have a 
143c0 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
143d0 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20   HasRowid(X)    
143e0 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
143f0 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77   & TF_WithoutRow
14400 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20  id)==0).#define 
14410 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20  VisibleRowid(X) 
14420 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
14430 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  & TF_NoVisibleRo
14440 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
14450 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
14460 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
14470 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
14480 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
14490 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
144a0 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
144b0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
144c0 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
144d0 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
144e0 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
144f0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
14500 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
14510 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
14520 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
14530 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
14540 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
14550 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
14560 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
14570 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
14580 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
14590 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
145a0 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
145b0 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
145c0 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
145d0 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
145e0 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
145f0 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
14600 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
14610 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
14620 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
14630 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
14640 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
14650 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
14660 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
14670 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
14680 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
14690 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
146a0 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
146b0 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
146c0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
146d0 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
146e0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
146f0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
14700 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
14710 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
14720 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
14730 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
14740 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
14750 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
14760 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
14770 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
14780 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
14790 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
147a0 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
147b0 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
147c0 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
147d0 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
147e0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
147f0 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
14800 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
14810 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
14820 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
14830 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
14840 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
14850 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
14860 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
14870 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
14880 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
14890 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
148a0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
148b0 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
148c0 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
148d0 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
148e0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
148f0 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
14900 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
14910 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
14920 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
14930 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
14940 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
14950 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
14960 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
14970 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
14980 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
14990 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
149a0 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
149b0 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
149c0 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
149d0 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
149e0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
149f0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
14a00 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
14a10 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
14a20 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
14a30 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
14a40 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
14a50 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
14a60 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
14a70 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
14a80 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
14a90 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
14aa0 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
14ab0 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
14ac0 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
14ad0 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
14ae0 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
14af0 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
14b00 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
14b10 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
14b20 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
14b30 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
14b40 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
14b50 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
14b60 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
14b70 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
14b80 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
14b90 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
14ba0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
14bb0 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
14bc0 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
14bd0 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
14be0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
14bf0 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
14c00 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
14c10 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
14c20 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
14c30 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
14c40 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
14c50 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
14c60 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
14c70 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
14c80 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
14c90 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
14ca0 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
14cb0 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
14cc0 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
14cd0 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
14ce0 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
14cf0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
14d00 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
14d10 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
14d20 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
14d30 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
14d40 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
14d50 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
14d60 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
14d70 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
14d80 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
14d90 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
14da0 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
14db0 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
14dc0 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
14dd0 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
14de0 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
14df0 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
14e00 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
14e10 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
14e20 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
14e30 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
14e40 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
14e50 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
14e60 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
14e70 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
14e80 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
14e90 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
14ea0 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
14eb0 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
14ec0 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
14ed0 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
14ee0 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
14ef0 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
14f00 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
14f10 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
14f20 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
14f30 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
14f40 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
14f50 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
14f60 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
14f70 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
14f80 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
14f90 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
14fa0 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
14fb0 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
14fc0 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
14fd0 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
14fe0 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
14ff0 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
15000 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
15010 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
15020 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
15030 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
15040 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
15050 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
15060 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
15070 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
15080 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
15090 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
150a0 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
150b0 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
150c0 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
150d0 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
150e0 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
150f0 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
15100 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
15110 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
15120 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  gn key..**.** Th
15130 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
15140 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
15150 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
15160 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
15170 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
15180 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
15190 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
151a0 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
151b0 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
151c0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
151d0 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
151e0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
151f0 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
15200 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
15210 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
15220 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
15230 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
15240 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
15250 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
15260 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
15270 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
15280 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
15290 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
152a0 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
152b0 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
152c0 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
152d0 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
152e0 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
152f0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
15300 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
15310 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
15320 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
15330 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
15340 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
15350 4f 45 5f 55 70 64 61 74 65 20 20 20 36 20 20 20  OE_Update   6   
15360 2f 2a 20 50 72 6f 63 65 73 73 20 61 73 20 61 20  /* Process as a 
15370 44 4f 20 55 50 44 41 54 45 20 69 6e 20 61 6e 20  DO UPDATE in an 
15380 75 70 73 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e  upsert */.#defin
15390 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 37 20  e OE_Restrict 7 
153a0 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
153b0 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
153c0 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
153d0 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
153e0 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20   OE_SetNull  8  
153f0 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
15400 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
15410 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
15420 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 39 20 20   OE_SetDflt  9  
15430 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
15440 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
15450 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
15460 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
15470 64 65 20 20 31 30 20 20 2f 2a 20 43 61 73 63 61  de  10  /* Casca
15480 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
15490 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  /.#define OE_Def
154a0 61 75 6c 74 20 20 31 31 20 20 2f 2a 20 44 6f 20  ault  11  /* Do 
154b0 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
154c0 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
154d0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
154e0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
154f0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
15500 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
15510 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
15520 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
15530 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
15540 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
15550 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  rol the.** compa
15560 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
15570 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
15580 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
15590 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
155a0 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
155b0 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
155c0 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
155d0 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
155e0 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
155f0 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
15600 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
15610 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
15620 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
15630 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
15640 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
15650 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
15660 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
15670 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
15680 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
15690 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
156a0 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
156b0 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
156c0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
156d0 4b 65 79 46 69 65 6c 64 3b 20 20 20 20 20 20 2f  KeyField;      /
156e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
156f0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
15700 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41  ndex */.  u16 nA
15710 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a  llField;      /*
15720 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20   Total columns, 
15730 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c  including key pl
15740 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73  us others */.  s
15750 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
15760 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
15770 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
15780 0a 20 20 75 38 20 2a 61 53 6f 72 74 46 6c 61 67  .  u8 *aSortFlag
15790 73 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  s;     /* Sort o
157a0 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
157b0 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
157c0 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
157d0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
157e0 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
157f0 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
15800 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
15810 65 64 20 62 69 74 20 76 61 6c 75 65 73 20 66 6f  ed bit values fo
15820 72 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  r entries in the
15830 20 4b 65 79 49 6e 66 6f 2e 61 53 6f 72 74 46 6c   KeyInfo.aSortFl
15840 61 67 73 5b 5d 20 61 72 72 61 79 2e 0a 2a 2f 0a  ags[] array..*/.
15850 23 64 65 66 69 6e 65 20 4b 45 59 49 4e 46 4f 5f  #define KEYINFO_
15860 4f 52 44 45 52 5f 44 45 53 43 20 20 20 20 30 78  ORDER_DESC    0x
15870 30 31 20 20 20 20 2f 2a 20 44 45 53 43 20 73 6f  01    /* DESC so
15880 72 74 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  rt order */.#def
15890 69 6e 65 20 4b 45 59 49 4e 46 4f 5f 4f 52 44 45  ine KEYINFO_ORDE
158a0 52 5f 42 49 47 4e 55 4c 4c 20 30 78 30 32 20 20  R_BIGNULL 0x02  
158b0 20 20 2f 2a 20 4e 55 4c 4c 20 69 73 20 6c 61 72    /* NULL is lar
158c0 67 65 72 20 74 68 61 6e 20 61 6e 79 20 6f 74 68  ger than any oth
158d0 65 72 20 76 61 6c 75 65 20 2a 2f 0a 0a 2f 2a 0a  er value */../*.
158e0 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68  ** This object h
158f0 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 77 68  olds a record wh
15900 69 63 68 20 68 61 73 20 62 65 65 6e 20 70 61 72  ich has been par
15910 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64  sed out into ind
15920 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64  ividual.** field
15930 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  s, for the purpo
15940 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61 20 63  ses of doing a c
15950 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a  omparison..**.**
15960 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20   A record is an 
15970 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74  object that cont
15980 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
15990 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e   fields of data.
159a0 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20  .** Records are 
159b0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
159c0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74  e content of a t
159d0 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20  able row and to 
159e0 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79  store.** the key
159f0 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41   of an index.  A
15a00 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f   blob encoding o
15a10 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72  f a record is cr
15a20 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  eated by.** the 
15a30 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  OP_MakeRecord op
15a40 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45  code of the VDBE
15a50 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d   and is disassem
15a60 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f  bled by the.** O
15a70 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
15a80 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  .**.** An instan
15a90 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
15aa0 74 20 73 65 72 76 65 73 20 61 73 20 61 20 22 6b  t serves as a "k
15ab0 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20 61 20  ey" for doing a 
15ac0 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20  search on.** an 
15ad0 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20 54 68  index b+tree. Th
15ae0 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20 73 65  e goal of the se
15af0 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e 64 20  arch is to find 
15b00 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  the entry that.*
15b10 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f 20 74  * is closed to t
15b20 68 65 20 6b 65 79 20 64 65 73 63 72 69 62 65 64  he key described
15b30 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63 74 2e   by this object.
15b40 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 6d 69    This object mi
15b50 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74  ght hold.** just
15b60 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
15b70 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d 62 65   key.  The numbe
15b80 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73 20 67  r of fields is g
15b90 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49  iven by.** pKeyI
15ba0 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a  nfo->nField..**.
15bb0 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32  ** The r1 and r2
15bc0 20 66 69 65 6c 64 73 20 61 72 65 20 74 68 65 20   fields are the 
15bd0 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75 72 6e  values to return
15be0 20 69 66 20 74 68 69 73 20 6b 65 79 20 69 73 20   if this key is 
15bf0 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20  less than.** or 
15c00 67 72 65 61 74 65 72 20 74 68 61 6e 20 61 20 6b  greater than a k
15c10 65 79 20 69 6e 20 74 68 65 20 62 74 72 65 65 2c  ey in the btree,
15c20 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
15c30 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c  These are normal
15c40 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20  ly.** -1 and +1 
15c50 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 62 75  respectively, bu
15c60 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76 65 72  t might be inver
15c70 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31  ted to +1 and -1
15c80 20 69 66 20 74 68 65 20 62 2d 74 72 65 65 0a 2a   if the b-tree.*
15c90 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f 72 64  * is in DESC ord
15ca0 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65  er..**.** The ke
15cb0 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e  y comparison fun
15cc0 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20  ctions actually 
15cd0 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 5f 72  return default_r
15ce0 63 20 77 68 65 6e 20 74 68 65 79 20 66 69 6e 64  c when they find
15cf0 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20 63 6f  .** an equals co
15d00 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66 61 75  mparison.  defau
15d10 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d 31 2c  lt_rc can be -1,
15d20 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66 20 74   0, or +1.  If t
15d30 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74  here are.** mult
15d40 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20  iple entries in 
15d50 74 68 65 20 62 2d 74 72 65 65 20 77 69 74 68 20  the b-tree with 
15d60 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28 77 68  the same key (wh
15d70 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a  en only looking.
15d80 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73 74 20  ** at the first 
15d90 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
15da0 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75 6c 74  s,) then default
15db0 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74 20 74  _rc can be set t
15dc0 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75 73 65  o -1 to.** cause
15dd0 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 20 66   the search to f
15de0 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d 61 74  ind the last mat
15df0 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61 75  ch, or +1 to cau
15e00 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
15e10 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66 69 72  .** find the fir
15e20 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20  st match..**.** 
15e30 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73  The key comparis
15e40 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c  on functions wil
15e50 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74 6f 20  l set eqSeen to 
15e60 74 72 75 65 20 69 66 20 74 68 65 79 20 65 76 65  true if they eve
15e70 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65 71 75  r.** get and equ
15e80 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65 6e 20  al results when 
15e90 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73 20 73  comparing this s
15ea0 74 72 75 63 74 75 72 65 20 74 6f 20 61 20 62 2d  tructure to a b-
15eb0 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  tree record..** 
15ec0 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 21  When default_rc!
15ed0 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68 20 6d  =0, the search m
15ee0 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e 20 74  ight end up on t
15ef0 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64 69  he record immedi
15f00 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20  ately.** before 
15f10 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 20  the first match 
15f20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61  or immediately a
15f30 66 74 65 72 20 74 68 65 20 6c 61 73 74 20 6d 61  fter the last ma
15f40 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53  tch.  The.** eqS
15f50 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20 69  een field will i
15f60 6e 64 69 63 61 74 65 20 77 68 65 74 68 65 72 20  ndicate whether 
15f70 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20  or not an exact 
15f80 6d 61 74 63 68 20 65 78 69 73 74 73 20 69 6e 20  match exists in 
15f90 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a  the.** b-tree..*
15fa0 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  /.struct Unpacke
15fb0 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49  dRecord {.  KeyI
15fc0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
15fd0 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64  /* Collation and
15fe0 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f   sort-order info
15ff0 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d  rmation */.  Mem
16000 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
16010 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20   /* Values */.  
16020 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
16030 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16040 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
16050 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61  m[] */.  i8 defa
16060 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20  ult_rc;      /* 
16070 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
16080 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71  t if keys are eq
16090 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43  ual */.  u8 errC
160a0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ode;         /* 
160b0 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62  Error detected b
160c0 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  y xRecordCompare
160d0 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d   (CORRUPT or NOM
160e0 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20  EM) */.  i8 r1; 
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16100 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
16110 69 66 20 28 6c 68 73 20 3c 20 72 68 73 29 20 2a  if (lhs < rhs) *
16120 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20 20 20  /.  i8 r2;      
16130 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
16140 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
16150 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 75  hs > rhs) */.  u
16160 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20 20 20  8 eqSeen;       
16170 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e     /* True if an
16180 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70 61 72   equality compar
16190 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65  ison has been se
161a0 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a  en */.};.../*.**
161b0 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20   Each SQL index 
161c0 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
161d0 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a  n memory by an.*
161e0 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
161f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
16200 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  cture..**.** The
16210 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
16220 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74  table that are t
16230 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65  o be indexed are
16240 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79   described.** by
16250 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20   the aiColumn[] 
16260 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74  field of this st
16270 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78  ructure.  For ex
16280 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a  ample, suppose.*
16290 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f  * we have the fo
162a0 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e  llowing table an
162b0 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20  d index:.**.**  
162c0 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
162d0 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69  Ex1(c1 int, c2 i
162e0 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a  nt, c3 text);.**
162f0 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
16300 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c  X Ex2 ON Ex1(c3,
16310 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  c1);.**.** In th
16320 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  e Table structur
16330 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31  e describing Ex1
16340 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73  , nCol==3 becaus
16350 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74  e there are.** t
16360 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  hree columns in 
16370 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74  the table.  In t
16380 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  he Index structu
16390 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a  re describing.**
163a0 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32   Ex2, nColumn==2
163b0 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20   since 2 of the 
163c0 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31  3 columns of Ex1
163d0 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a   are indexed..**
163e0 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69   The value of ai
163f0 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d  Column is {2, 0}
16400 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d  .  aiColumn[0]==
16410 32 20 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a  2 because the.**
16420 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f   first column to
16430 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29   be indexed (c3)
16440 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
16450 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d   2 in Ex1.aCol[]
16460 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20  ..** The second 
16470 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
16480 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e  exed (c1) has an
16490 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a   index of 0 in.*
164a0 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65  * Ex1.aCol[], he
164b0 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e  nce Ex2.aiColumn
164c0 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  [1]==0..**.** Th
164d0 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  e Index.onError 
164e0 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73  field determines
164f0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
16500 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75  the indexed colu
16510 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75  mns.** must be u
16520 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74  nique and what t
16530 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65  o do if they are
16540 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65   not.  When Inde
16550 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e  x.onError=OE_Non
16560 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74  e,.** it means t
16570 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69  his is not a uni
16580 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65  que index.  Othe
16590 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e  rwise it is a un
165a0 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e  ique index.** an
165b0 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49  d the value of I
165c0 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64  ndex.onError ind
165d0 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20  icate the which 
165e0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
165f0 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d  ion.** algorithm
16600 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65   to employ whene
16610 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ver an attempt i
16620 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74  s made to insert
16630 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a   a non-unique.**
16640 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20   element..**.** 
16650 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20  While parsing a 
16660 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20  CREATE TABLE or 
16670 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
16680 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20  tement in order 
16690 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56  to.** generate V
166a0 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70  DBE code (as opp
166b0 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20  osed to parsing 
166c0 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e  one read from an
166d0 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a   sqlite_master.*
166e0 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72 74 20  * table as part 
166f0 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78  of parsing an ex
16700 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
16710 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65  schema), transie
16720 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20  nt instances.** 
16730 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
16740 65 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64  e may be created
16750 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
16760 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61  he Index.tnum va
16770 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65  riable is.** use
16780 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61  d to store the a
16790 64 64 72 65 73 73 20 6f 66 20 61 20 56 44 42 45  ddress of a VDBE
167a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f   instruction, no
167b0 74 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67  t a database pag
167c0 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20  e.** number (it 
167d0 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74  cannot - the dat
167e0 61 62 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f  abase page is no
167f0 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69  t allocated unti
16800 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72  l the VDBE.** pr
16810 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75 74 65  ogram is execute
16820 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54  d). See convertT
16830 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62  oWithoutRowidTab
16840 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  le() for details
16850 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
16860 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
16870 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
16880 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
16890 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61  ndex */.  i16 *a
168a0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
168b0 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
168c0 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
168d0 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
168e0 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73   is 0 */.  LogEs
168f0 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20  t *aiRowLogEst; 
16900 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
16910 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
16920 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
16930 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
16940 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
16950 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
16960 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
16970 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
16980 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
16990 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
169a0 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
169b0 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
169c0 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
169d0 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
169e0 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
169f0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
16a00 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
16a10 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
16a20 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
16a30 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
16a40 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
16a50 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
16a60 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
16a70 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
16a80 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
16a90 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73  e==ASC */.  cons
16aa0 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b  t char **azColl;
16ab0 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
16ac0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
16ad0 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
16ae0 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dex */.  Expr *p
16af0 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20  PartIdxWhere;   
16b00 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
16b10 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
16b20 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  dices */.  ExprL
16b30 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20  ist *aColExpr;  
16b40 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78      /* Column ex
16b50 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
16b60 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
16b70 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61          /* DB Pa
16b80 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f  ge containing ro
16b90 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  ot of this index
16ba0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49   */.  LogEst szI
16bb0 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f  dxRow;         /
16bc0 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72  * Estimated aver
16bd0 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20  age row size in 
16be0 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  bytes */.  u16 n
16bf0 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  KeyCol;         
16c00 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16c10 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67   columns forming
16c20 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31   the key */.  u1
16c30 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 nColumn;      
16c40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16c50 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72   of columns stor
16c60 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ed in the index 
16c70 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b  */.  u8 onError;
16c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16c90 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67   OE_Abort, OE_Ig
16ca0 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65  nore, OE_Replace
16cb0 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a  , or OE_None */.
16cc0 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79    unsigned idxTy
16cd0 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 30 3a  pe:2;      /* 0:
16ce0 4e 6f 72 6d 61 6c 20 31 3a 55 4e 49 51 55 45 2c  Normal 1:UNIQUE,
16cf0 20 32 3a 50 52 49 4d 41 52 59 20 4b 45 59 2c 20   2:PRIMARY KEY, 
16d00 33 3a 49 50 4b 20 2a 2f 0a 20 20 75 6e 73 69 67  3:IPK */.  unsig
16d10 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
16d20 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
16d30 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
16d40 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
16d50 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e  */.  unsigned un
16d60 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a  iqNotNull:1;  /*
16d70 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20   True if UNIQUE 
16d80 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72  and NOT NULL for
16d90 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   all columns */.
16da0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73    unsigned isRes
16db0 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72  ized:1;    /* Tr
16dc0 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65  ue if resizeInde
16dd0 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65  xObject() has be
16de0 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75  en called */.  u
16df0 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69  nsigned isCoveri
16e00 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  ng:1;   /* True 
16e10 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76  if this is a cov
16e20 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  ering index */. 
16e30 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70   unsigned noSkip
16e40 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20  Scan:1;   /* Do 
16e50 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73  not try to use s
16e60 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65  kip-scan if true
16e70 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68   */.  unsigned h
16e80 61 73 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f  asStat1:1;     /
16e90 2a 20 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61  * aiRowLogEst va
16ea0 6c 75 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73  lues come from s
16eb0 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 20  qlite_stat1 */. 
16ec0 20 75 6e 73 69 67 6e 65 64 20 62 4e 6f 51 75 65   unsigned bNoQue
16ed0 72 79 3a 31 3b 20 20 20 20 20 2f 2a 20 44 6f 20  ry:1;     /* Do 
16ee0 6e 6f 74 20 75 73 65 20 74 68 69 73 20 69 6e 64  not use this ind
16ef0 65 78 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71  ex to optimize q
16f00 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e 73 69  ueries */.  unsi
16f10 67 6e 65 64 20 62 41 73 63 4b 65 79 42 75 67 3a  gned bAscKeyBug:
16f20 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  1;   /* True if 
16f30 74 68 65 20 62 62 61 37 62 36 39 66 39 38 34 39  the bba7b69f9849
16f40 62 35 62 66 20 62 75 67 20 61 70 70 6c 69 65 73  b5bf bug applies
16f50 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
16f60 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 20  E_ENABLE_STAT4. 
16f70 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20   int nSample;   
16f80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16f90 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
16fa0 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a  in aSample[] */.
16fb0 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c    int nSampleCol
16fc0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  ;          /* Si
16fd0 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c  ze of IndexSampl
16fe0 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20  e.anEq[] and so 
16ff0 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  on */.  tRowcnt 
17000 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20  *aAvgEq;        
17010 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20   /* Average nEq 
17020 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20  values for keys 
17030 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a  not in aSample *
17040 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  /.  IndexSample 
17050 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20  *aSample;    /* 
17060 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  Samples of the l
17070 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a  eft-most key */.
17080 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77    tRowcnt *aiRow
17090 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f  Est;       /* No
170a0 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74  n-logarithmic st
170b0 61 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69  at1 data for thi
170c0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f  s index */.  tRo
170d0 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20  wcnt nRowEst0;  
170e0 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
170f0 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20  arithmic number 
17100 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69  of rows in the i
17110 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ndex */.#endif. 
17120 20 42 69 74 6d 61 73 6b 20 63 6f 6c 4e 6f 74 49   Bitmask colNotI
17130 64 78 65 64 3b 20 20 20 20 20 2f 2a 20 30 20 66  dxed;     /* 0 f
17140 6f 72 20 75 6e 69 6e 64 65 78 65 64 20 63 6f 6c  or unindexed col
17150 75 6d 6e 73 20 69 6e 20 70 54 61 62 20 2a 2f 0a  umns in pTab */.
17160 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
17170 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64  d values for Ind
17180 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64  ex.idxType.*/.#d
17190 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
171a0 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20  TYPE_APPDEF     
171b0 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20   0   /* Created 
171c0 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44  using CREATE IND
171d0 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  EX */.#define SQ
171e0 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49  LITE_IDXTYPE_UNI
171f0 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20  QUE      1   /* 
17200 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49  Implements a UNI
17210 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  QUE constraint *
17220 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
17230 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
17240 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74  KEY  2   /* Is t
17250 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66  he PRIMARY KEY f
17260 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  or the table */.
17270 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
17280 44 58 54 59 50 45 5f 49 50 4b 20 20 20 20 20 20  DXTYPE_IPK      
17290 20 20 20 33 20 20 20 2f 2a 20 49 4e 54 45 47 45     3   /* INTEGE
172a0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  R PRIMARY KEY in
172b0 64 65 78 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72  dex */../* Retur
172c0 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
172d0 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b  X is a PRIMARY K
172e0 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  EY index */.#def
172f0 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79  ine IsPrimaryKey
17300 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e  Index(X)  ((X)->
17310 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  idxType==SQLITE_
17320 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
17330 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74  EY)../* Return t
17340 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
17350 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  s a UNIQUE index
17360 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e   */.#define IsUn
17370 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20  iqueIndex(X)    
17380 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21    ((X)->onError!
17390 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68  =OE_None)../* Th
173a0 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e  e Index.aiColumn
173b0 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f  [] values are no
173c0 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20  rmally positive 
173d0 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a  integer.  But.**
173e0 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20   there are some 
173f0 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
17400 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61  that have specia
17410 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64  l meaning:.*/.#d
17420 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20  efine XN_ROWID  
17430 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49     (-1)     /* I
17440 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
17450 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64   the rowid */.#d
17460 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20  efine XN_EXPR   
17470 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49     (-2)     /* I
17480 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
17490 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
174a0 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  /../*.** Each sa
174b0 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
174c0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
174d0 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
174e0 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
174f0 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74  * using a struct
17500 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
17510 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  .  See documenta
17520 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20  tion at the top 
17530 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a  of the.** analyz
17540 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20  e.c source file 
17550 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
17560 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
17570 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
17580 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20  e {.  void *p;  
17590 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
175a0 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65  er to sampled re
175b0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  cord */.  int n;
175c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
175d0 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e  ize of record in
175e0 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77   bytes */.  tRow
175f0 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a  cnt *anEq;    /*
17600 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
17610 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b  rows where the k
17620 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73  ey equals this s
17630 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
17640 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20  nt *anLt;    /* 
17650 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
17660 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73  ows where key is
17670 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
17680 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
17690 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a  cnt *anDLt;   /*
176a0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
176b0 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65  distinct keys le
176c0 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
176d0 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ple */.};../*.**
176e0 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
176f0 20 74 6f 20 75 73 65 20 77 69 74 68 69 6e 20 74   to use within t
17700 68 65 20 66 6c 61 67 73 20 61 72 67 75 6d 65 6e  he flags argumen
17710 74 20 74 6f 20 73 71 6c 69 74 65 33 47 65 74 54  t to sqlite3GetT
17720 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  oken()..*/.#defi
17730 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f  ne SQLITE_TOKEN_
17740 51 55 4f 54 45 44 20 20 20 20 30 78 31 20 2f 2a  QUOTED    0x1 /*
17750 20 54 6f 6b 65 6e 20 69 73 20 61 20 71 75 6f 74   Token is a quot
17760 65 64 20 69 64 65 6e 74 69 66 69 65 72 2e 20 2a  ed identifier. *
17770 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
17780 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f 52 44 20 20  _TOKEN_KEYWORD  
17790 20 30 78 32 20 2f 2a 20 54 6f 6b 65 6e 20 69 73   0x2 /* Token is
177a0 20 61 20 6b 65 79 77 6f 72 64 2e 20 2a 2f 0a 0a   a keyword. */..
177b0 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
177c0 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
177d0 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
177e0 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
177f0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
17800 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
17810 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
17820 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
17830 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 74  .** The memory t
17840 68 61 74 20 22 7a 22 20 70 6f 69 6e 74 73 20 74  hat "z" points t
17850 6f 20 69 73 20 6f 77 6e 65 64 20 62 79 20 6f 74  o is owned by ot
17860 68 65 72 20 6f 62 6a 65 63 74 73 2e 20 20 54 61  her objects.  Ta
17870 6b 65 20 63 61 72 65 0a 2a 2a 20 74 68 61 74 20  ke care.** that 
17880 74 68 65 20 6f 77 6e 65 72 20 6f 66 20 74 68 65  the owner of the
17890 20 22 7a 22 20 73 74 72 69 6e 67 20 64 6f 65 73   "z" string does
178a0 20 6e 6f 74 20 64 65 61 6c 6c 6f 63 61 74 65 20   not deallocate 
178b0 74 68 65 20 73 74 72 69 6e 67 20 62 65 66 6f 72  the string befor
178c0 65 0a 2a 2a 20 74 68 65 20 54 6f 6b 65 6e 20 67  e.** the Token g
178d0 6f 65 73 20 6f 75 74 20 6f 66 20 73 63 6f 70 65  oes out of scope
178e0 21 20 20 56 65 72 79 20 6f 66 74 65 6e 2c 20 74  !  Very often, t
178f0 68 65 20 22 7a 22 20 70 6f 69 6e 74 73 20 74 6f  he "z" points to
17900 20 73 6f 6d 65 20 70 6c 61 63 65 0a 2a 2a 20 69   some place.** i
17910 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
17920 74 68 65 20 50 61 72 73 65 2e 7a 53 71 6c 20 74  the Parse.zSql t
17930 65 78 74 2e 20 20 42 75 74 20 69 74 20 6d 69 67  ext.  But it mig
17940 68 74 20 61 6c 73 6f 20 70 6f 69 6e 74 20 74 6f  ht also point to
17950 20 61 0a 2a 2a 20 73 74 61 74 69 63 20 73 74 72   a.** static str
17960 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ing..*/.struct T
17970 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
17980 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
17990 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
179a0 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
179b0 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
179c0 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
179d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
179e0 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
179f0 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
17a00 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
17a10 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
17a20 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
17a30 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
17a40 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
17a50 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
17a60 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
17a70 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
17a80 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
17a90 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
17aa0 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
17ab0 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
17ac0 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
17ad0 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
17ae0 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
17af0 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
17b00 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
17b10 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
17b20 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
17b30 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
17b40 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
17b50 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
17b60 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
17b70 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
17b80 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
17b90 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
17ba0 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
17bb0 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
17bc0 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
17bd0 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
17be0 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
17bf0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
17c00 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
17c10 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
17c20 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
17c30 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
17c40 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
17c50 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
17c60 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
17c70 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
17c80 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
17c90 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
17ca0 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cc0 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
17cd0 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
17ce0 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
17cf0 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
17d00 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
17d10 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
17d20 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
17d30 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
17d40 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
17d70 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
17d80 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
17d90 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
17da0 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
17db0 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
17dc0 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
17dd0 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
17de0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
17df0 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
17e00 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
17e10 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
17e20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
17e30 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
17e40 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
17e50 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
17e60 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
17e70 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
17e80 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
17e90 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
17ea0 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
17eb0 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
17ec0 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
17ed0 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
17ee0 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
17ef0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
17f00 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
17f10 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
17f20 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
17f30 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
17f40 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
17f50 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
17f60 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
17f70 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
17f80 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
17f90 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
17fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
17fb0 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
17fc0 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
17fd0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
17fe0 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
17ff0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
18000 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
18010 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
18020 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
18030 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
18040 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
18050 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
18060 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
18070 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
18080 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
18090 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
180a0 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
180b0 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
180c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
180d0 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
180e0 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
180f0 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
18100 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
18110 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
18120 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
18130 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18150 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
18160 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
18170 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
18180 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
18190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181a0 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
181b0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
181c0 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
181d0 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
181e0 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
181f0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
18200 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
18210 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
18220 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
18230 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
18240 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
18250 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
18260 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
18270 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
18280 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
18290 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
182a0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
182b0 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
182c0 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
182d0 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
182e0 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
182f0 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
18300 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
18310 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
18320 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
18330 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
18340 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18350 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
18360 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
18370 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
18380 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
18390 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
183a0 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
183b0 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
183c0 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
183d0 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
183e0 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
183f0 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
18400 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
18410 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
18420 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
18430 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
18440 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
18450 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
18460 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
18470 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
18480 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
18490 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
184a0 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
184b0 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
184c0 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
184d0 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
184e0 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
184f0 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
18500 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
18510 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
18520 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
18530 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
18540 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
18550 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
18560 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
18570 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
18580 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
18590 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
185a0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
185b0 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
185c0 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
185d0 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
185e0 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
185f0 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
18600 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
18610 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
18620 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
18630 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
18640 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
18650 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
18660 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
18670 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
18680 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
18690 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
186a0 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
186b0 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
186c0 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
186d0 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
186e0 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
186f0 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
18700 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
18710 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
18720 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
18730 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
18740 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
18750 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
18760 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
18770 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
18780 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
18790 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
187a0 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
187b0 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54  TK_BLOB,.** or T
187c0 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
187d0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
187e0 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
187f0 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
18800 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
18810 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
18820 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
18830 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
18840 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a  en contains the.
18850 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
18860 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
18870 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
18880 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
18890 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
188a0 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
188b0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
188c0 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
188d0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
188e0 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
188f0 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
18900 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
18910 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
18920 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
18930 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
18940 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
18950 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
18960 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
18970 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
18980 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
18990 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
189a0 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
189b0 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
189c0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
189d0 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
189e0 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
189f0 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
18a00 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
18a10 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
18a20 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
18a30 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
18a40 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
18a50 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
18a60 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
18a70 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
18a80 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
18a90 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
18aa0 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
18ab0 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
18ac0 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
18ad0 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64  List is.** valid
18ae0 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
18af0 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
18b00 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
18b10 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
18b20 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
18b30 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
18b40 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
18b50 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
18b60 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
18b70 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
18b80 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
18b90 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
18ba0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
18bb0 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
18bc0 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
18bd0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
18be0 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
18bf0 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
18c00 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
18c10 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
18c20 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
18c30 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
18c40 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
18c50 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
18c60 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
18c70 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
18c80 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
18c90 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
18ca0 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
18cb0 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
18cc0 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
18cd0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18ce0 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
18cf0 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
18d00 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a  a question mark.
18d10 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
18d20 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
18d30 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
18d40 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
18d50 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75   the index.** nu
18d60 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61  mber for that va
18d70 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  riable..**.** If
18d80 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18d90 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68  is a subquery th
18da0 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  en Expr.iColumn 
18db0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
18dc0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  .** register num
18dd0 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ber containing t
18de0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
18df0 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74   subquery.  If t
18e00 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67  he.** subquery g
18e10 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  ives a constant 
18e20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61  result, then iTa
18e30 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74  ble is -1.  If t
18e40 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67  he subquery.** g
18e50 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  ives a different
18e60 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65   answer at diffe
18e70 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
18e80 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63  g statement proc
18e90 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69  essing.** then i
18ea0 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64  Table is the add
18eb0 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75  ress of a subrou
18ec0 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74  tine that comput
18ed0 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  es the subquery.
18ee0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78  .**.** If the Ex
18ef0 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50  pr is of type OP
18f00 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65  _Column, and the
18f10 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c   table it is sel
18f20 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69  ecting from.** i
18f30 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f  s a disk table o
18f40 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73  r the "old.*" ps
18f50 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e  eudo-table, then
18f60 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20   pTab points to 
18f70 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
18f80 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e  ding table defin
18f90 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c  ition..**.** ALL
18fa0 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a  OCATION NOTES:.*
18fb0 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74  *.** Expr object
18fc0 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20  s can use a lot 
18fd0 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
18fe0 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65  in database sche
18ff0 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20  ma.  To.** help 
19000 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65  reduce memory re
19010 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65  quirements, some
19020 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62  times an Expr ob
19030 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  ject will be.** 
19040 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20  truncated.  And 
19050 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  to reduce the nu
19060 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61  mber of memory a
19070 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65  llocations, some
19080 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20  times.** two or 
19090 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74  more Expr object
190a0 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
190b0 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d   in a single mem
190c0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a  ory allocation,.
190d0 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ** together with
190e0 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72   Expr.zToken str
190f0 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ings..**.** If t
19100 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e  he EP_Reduced an
19110 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  d EP_TokenOnly f
19120 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65  lags are set whe
19130 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a  n.** an Expr obj
19140 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64  ect is truncated
19150 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63  .  When EP_Reduc
19160 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ed is set, then 
19170 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  all.** the child
19180 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e   Expr objects in
19190 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20   the Expr.pLeft 
191a0 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20  and Expr.pRight 
191b0 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20  subtrees.** are 
191c0 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
191d0 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
191e0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
191f0 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61  te, however, tha
19200 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65  t.** the subtree
19210 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73  s in Expr.x.pLis
19220 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c  t or Expr.x.pSel
19230 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73  ect are always s
19240 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c  eparately.** all
19250 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65  ocated, regardle
19260 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
19270 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20   not EP_Reduced 
19280 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63  is set..*/.struc
19290 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70  t Expr {.  u8 op
192a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
192b0 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70    /* Operation p
192c0 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73  erformed by this
192d0 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   node */.  char 
192e0 61 66 66 45 78 70 72 3b 20 20 20 20 20 20 20 20  affExpr;        
192f0 20 20 2f 2a 20 61 66 66 69 6e 69 74 79 2c 20 6f    /* affinity, o
19300 72 20 52 41 49 53 45 20 74 79 70 65 20 2a 2f 0a  r RAISE type */.
19310 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20    u32 flags;    
19320 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
19330 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
19340 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
19350 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
19360 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
19370 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
19380 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
19390 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
193a0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
193b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
193c0 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
193d0 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
193e0 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
193f0 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
19400 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
19410 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
19420 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
19430 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
19440 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
19450 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
19460 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
19470 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
19480 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
19490 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
194a0 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
194b0 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
194c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19500 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70  ****/..  Expr *p
19510 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20  Left;           
19520 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20  /* Left subnode 
19530 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68  */.  Expr *pRigh
19540 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  t;          /* R
19550 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  ight subnode */.
19560 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
19570 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20  prList *pList;  
19580 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45     /* op = IN, E
19590 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43  XISTS, SELECT, C
195a0 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42  ASE, FUNCTION, B
195b0 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65  ETWEEN */.    Se
195c0 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
195d0 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65     /* EP_xIsSele
195e0 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20  ct and op = IN, 
195f0 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a  EXISTS, SELECT *
19600 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
19610 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
19620 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
19630 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
19640 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
19650 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
19660 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
19670 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
19680 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
19690 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
196a0 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
196b0 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
196c0 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
196d0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
196e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
196f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19710 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
19720 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
19730 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
19740 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
19750 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
19760 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
19770 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
19780 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
19790 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
197a0 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
197b0 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
197c0 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197e0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
197f0 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
19800 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19820 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
19830 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
19840 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ld.             
19850 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45              ** E
19860 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34  P_Unlikely:  134
19870 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b  217728 times lik
19880 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20 20 20  elihood.        
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198a0 20 2a 2a 20 54 4b 5f 49 4e 3a 20 65 70 68 65 6d   ** TK_IN: ephem
198b0 65 72 69 61 6c 20 74 61 62 6c 65 20 68 6f 6c 64  erial table hold
198c0 69 6e 67 20 52 48 53 0a 20 20 20 20 20 20 20 20  ing RHS.        
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f   ** TK_SELECT_CO
198f0 4c 55 4d 4e 3a 20 4e 75 6d 62 65 72 20 6f 66 20  LUMN: Number of 
19900 63 6f 6c 75 6d 6e 73 20 6f 6e 20 74 68 65 20 4c  columns on the L
19910 48 53 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  HS.             
19920 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19930 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72 65  K_SELECT: 1st re
19940 67 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c 74  gister of result
19950 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56   vector */.  ynV
19960 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  ar iColumn;     
19970 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
19980 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20  : column index. 
19990 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20   -1 for rowid.. 
199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199b0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41          ** TK_VA
199c0 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65  RIABLE: variable
199d0 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20   number (always 
199e0 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20 20  >= 1)..         
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c  ** TK_SELECT_COL
19a10 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  UMN: column of t
19a20 68 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72  he result vector
19a30 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20   */.  i16 iAgg; 
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19a50 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70  Which entry in p
19a60 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20  AggInfo->aCol[] 
19a70 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a  or ->aFunc[] */.
19a80 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e    i16 iRightJoin
19a90 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45  Table;   /* If E
19aa0 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20  P_FromJoin, the 
19ab0 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74  right table of t
19ac0 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20  he join */.  u8 
19ad0 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
19ae0 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54      /* TK_REGIST
19af0 45 52 2f 54 4b 5f 54 52 55 54 48 3a 20 6f 72 69  ER/TK_TRUTH: ori
19b00 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45  ginal value of E
19b10 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20  xpr.op.         
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b30 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68  ** TK_COLUMN: th
19b40 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f  e value of p5 fo
19b50 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20  r OP_Column.    
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46       ** TK_AGG_F
19b80 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67  UNCTION: nesting
19b90 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49   depth */.  AggI
19ba0 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
19bb0 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b     /* Used by TK
19bc0 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  _AGG_COLUMN and 
19bd0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
19be0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
19bf0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
19c00 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
19c10 4c 55 4d 4e 3a 20 54 61 62 6c 65 20 63 6f 6e 74  LUMN: Table cont
19c20 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 2e 20 43  aining column. C
19c30 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20  an be NULL.     
19c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c50 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63        ** for a c
19c60 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65  olumn of an inde
19c70 78 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69  x on an expressi
19c80 6f 6e 20 2a 2f 0a 20 20 20 20 57 69 6e 64 6f 77  on */.    Window
19c90 20 2a 70 57 69 6e 3b 20 20 20 20 20 20 20 20 20   *pWin;         
19ca0 20 2f 2a 20 45 50 5f 57 69 6e 46 75 6e 63 3a 20   /* EP_WinFunc: 
19cb0 57 69 6e 64 6f 77 2f 46 69 6c 74 65 72 20 64 65  Window/Filter de
19cc0 66 6e 20 66 6f 72 20 61 20 66 75 6e 63 74 69 6f  fn for a functio
19cd0 6e 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  n */.    struct 
19ce0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
19cf0 2f 2a 20 54 4b 5f 49 4e 2c 20 54 4b 5f 53 45 4c  /* TK_IN, TK_SEL
19d00 45 43 54 2c 20 61 6e 64 20 54 4b 5f 45 58 49 53  ECT, and TK_EXIS
19d10 54 53 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20  TS */.      int 
19d20 69 41 64 64 72 3b 20 20 20 20 20 20 20 20 20 20  iAddr;          
19d30 20 20 20 2f 2a 20 53 75 62 72 6f 75 74 69 6e 65     /* Subroutine
19d40 20 65 6e 74 72 79 20 61 64 64 72 65 73 73 20 2a   entry address *
19d50 2f 0a 20 20 20 20 20 20 69 6e 74 20 72 65 67 52  /.      int regR
19d60 65 74 75 72 6e 3b 20 20 20 20 20 20 20 20 20 2f  eturn;         /
19d70 2a 20 52 65 67 69 73 74 65 72 20 75 73 65 64 20  * Register used 
19d80 74 6f 20 68 6f 6c 64 20 72 65 74 75 72 6e 20 61  to hold return a
19d90 64 64 72 65 73 73 20 2a 2f 0a 20 20 20 20 7d 20  ddress */.    } 
19da0 73 75 62 3b 0a 20 20 7d 20 79 3b 0a 7d 3b 0a 0a  sub;.  } y;.};..
19db0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
19dc0 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
19dd0 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
19de0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
19df0 69 65 6c 64 2e 0a 2a 2a 20 56 61 6c 75 65 20 72  ield..** Value r
19e00 65 73 74 72 69 63 74 69 6f 6e 73 3a 0a 2a 2a 0a  estrictions:.**.
19e10 2a 2a 20 20 20 20 20 20 20 20 20 20 45 50 5f 41  **          EP_A
19e20 67 67 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 20  gg == NC_HasAgg 
19e30 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20  == SF_HasAgg.** 
19e40 20 20 20 20 20 20 20 20 20 45 50 5f 57 69 6e 20           EP_Win 
19e50 3d 3d 20 4e 43 5f 48 61 73 57 69 6e 0a 2a 2f 0a  == NC_HasWin.*/.
19e60 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a  #define EP_FromJ
19e70 6f 69 6e 20 20 20 30 78 30 30 30 30 30 31 20 2f  oin   0x000001 /
19e80 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20  * Originates in 
19e90 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20  ON/USING clause 
19ea0 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  of outer join */
19eb0 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74  .#define EP_Dist
19ec0 69 6e 63 74 20 20 20 30 78 30 30 30 30 30 32 20  inct   0x000002 
19ed0 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
19ee0 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
19ef0 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
19f00 64 65 66 69 6e 65 20 45 50 5f 48 61 73 46 75 6e  define EP_HasFun
19f10 63 20 20 20 20 30 78 30 30 30 30 30 34 20 2f 2a  c    0x000004 /*
19f20 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
19f30 20 6d 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20   more functions 
19f40 6f 66 20 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a 23  of any kind */.#
19f50 64 65 66 69 6e 65 20 45 50 5f 46 69 78 65 64 43  define EP_FixedC
19f60 6f 6c 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a  ol   0x000008 /*
19f70 20 54 4b 5f 43 6f 6c 75 6d 6e 20 77 69 74 68 20   TK_Column with 
19f80 61 20 6b 6e 6f 77 6e 20 66 69 78 65 64 20 76 61  a known fixed va
19f90 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  lue */.#define E
19fa0 50 5f 41 67 67 20 20 20 20 20 20 20 20 30 78 30  P_Agg        0x0
19fb0 30 30 30 31 30 20 2f 2a 20 43 6f 6e 74 61 69 6e  00010 /* Contain
19fc0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
19fd0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
19fe0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
19ff0 56 61 72 53 65 6c 65 63 74 20 20 30 78 30 30 30  VarSelect  0x000
1a000 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
1a010 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
1a020 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
1a030 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
1a040 65 64 20 20 30 78 30 30 30 30 34 30 20 2f 2a 20  ed  0x000040 /* 
1a050 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67  token.z was orig
1a060 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20  inally in "..." 
1a070 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
1a080 66 69 78 46 75 6e 63 20 20 30 78 30 30 30 30 38  fixFunc  0x00008
1a090 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e  0 /* True for an
1a0a0 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
1a0b0 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
1a0c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
1a0d0 6f 6c 6c 61 74 65 20 20 20 20 30 78 30 30 30 31  ollate    0x0001
1a0e0 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
1a0f0 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45  ins a TK_COLLATE
1a100 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20 2f   operator */.  /
1a110 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a120 20 20 20 30 78 30 30 30 32 30 30 20 41 76 61 69     0x000200 Avai
1a130 6c 61 62 6c 65 20 66 6f 72 20 72 65 75 73 65 20  lable for reuse 
1a140 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
1a150 74 56 61 6c 75 65 20 20 20 30 78 30 30 30 34 30  tValue   0x00040
1a160 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c  0 /* Integer val
1a170 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ue contained in 
1a180 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66  u.iValue */.#def
1a190 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  ine EP_xIsSelect
1a1a0 20 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e    0x000800 /* x.
1a1b0 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
1a1c0 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
1a1d0 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
1a1e0 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20  ne EP_Skip      
1a1f0 20 30 78 30 30 31 30 30 30 20 2f 2a 20 4f 70 65   0x001000 /* Ope
1a200 72 61 74 6f 72 20 64 6f 65 73 20 6e 6f 74 20 63  rator does not c
1a210 6f 6e 74 72 69 62 75 74 65 20 74 6f 20 61 66 66  ontribute to aff
1a220 69 6e 69 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  inity */.#define
1a230 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 20 30   EP_Reduced    0
1a240 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20  x002000 /* Expr 
1a250 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55  struct EXPR_REDU
1a260 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  CEDSIZE bytes on
1a270 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
1a280 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 20 30 78 30 30  _TokenOnly  0x00
1a290 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72  4000 /* Expr str
1a2a0 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  uct EXPR_TOKENON
1a2b0 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  LYSIZE bytes onl
1a2c0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
1a2d0 57 69 6e 20 20 20 20 20 20 20 20 30 78 30 30 38  Win        0x008
1a2e0 30 30 30 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  000 /* Contains 
1a2f0 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73  window functions
1a300 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d   */.#define EP_M
1a310 65 6d 54 6f 6b 65 6e 20 20 20 30 78 30 31 30 30  emToken   0x0100
1a320 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71  00 /* Need to sq
1a330 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78  lite3DbFree() Ex
1a340 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65  pr.zToken */.#de
1a350 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65  fine EP_NoReduce
1a360 20 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43     0x020000 /* C
1a370 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45  annot EXPRDUP_RE
1a380 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a  DUCE this Expr *
1a390 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c  /.#define EP_Unl
1a3a0 69 6b 65 6c 79 20 20 20 30 78 30 34 30 30 30 30  ikely   0x040000
1a3b0 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f   /* unlikely() o
1a3c0 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66  r likelihood() f
1a3d0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
1a3e0 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20  ne EP_ConstFunc 
1a3f0 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53   0x080000 /* A S
1a400 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
1a410 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20  ANT or _SLOCHNG 
1a420 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
1a430 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c  ine EP_CanBeNull
1a440 20 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61    0x100000 /* Ca
1a450 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74  n be null despit
1a460 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  e NOT NULL const
1a470 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
1a480 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 20 30   EP_Subquery   0
1a490 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20  x200000 /* Tree 
1a4a0 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45  contains a TK_SE
1a4b0 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LECT operator */
1a4c0 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61  .#define EP_Alia
1a4d0 73 20 20 20 20 20 20 30 78 34 30 30 30 30 30 20  s      0x400000 
1a4e0 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66  /* Is an alias f
1a4f0 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20  or a result set 
1a500 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e  column */.#defin
1a510 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20 20  e EP_Leaf       
1a520 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72  0x800000 /* Expr
1a530 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c  .pLeft, .pRight,
1a540 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20   .u.pSelect all 
1a550 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
1a560 45 50 5f 57 69 6e 46 75 6e 63 20 20 20 30 78 31  EP_WinFunc   0x1
1a570 30 30 30 30 30 30 20 2f 2a 20 54 4b 5f 46 55 4e  000000 /* TK_FUN
1a580 43 54 49 4f 4e 20 77 69 74 68 20 45 78 70 72 2e  CTION with Expr.
1a590 79 2e 70 57 69 6e 20 73 65 74 20 2a 2f 0a 23 64  y.pWin set */.#d
1a5a0 65 66 69 6e 65 20 45 50 5f 53 75 62 72 74 6e 20  efine EP_Subrtn 
1a5b0 20 20 20 30 78 32 30 30 30 30 30 30 20 2f 2a 20     0x2000000 /* 
1a5c0 55 73 65 73 20 45 78 70 72 2e 79 2e 73 75 62 2e  Uses Expr.y.sub.
1a5d0 20 54 4b 5f 49 4e 2c 20 5f 53 45 4c 45 43 54 2c   TK_IN, _SELECT,
1a5e0 20 6f 72 20 5f 45 58 49 53 54 53 20 2a 2f 0a 23   or _EXISTS */.#
1a5f0 64 65 66 69 6e 65 20 45 50 5f 51 75 6f 74 65 64  define EP_Quoted
1a600 20 20 20 20 30 78 34 30 30 30 30 30 30 20 2f 2a      0x4000000 /*
1a610 20 54 4b 5f 49 44 20 77 61 73 20 6f 72 69 67 69   TK_ID was origi
1a620 6e 61 6c 6c 79 20 71 75 6f 74 65 64 20 2a 2f 0a  nally quoted */.
1a630 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69  #define EP_Stati
1a640 63 20 20 20 20 30 78 38 30 30 30 30 30 30 20 2f  c    0x8000000 /
1a650 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79  * Held in memory
1a660 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72   not obtained fr
1a670 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23  om malloc() */.#
1a680 64 65 66 69 6e 65 20 45 50 5f 49 73 54 72 75 65  define EP_IsTrue
1a690 20 20 20 30 78 31 30 30 30 30 30 30 30 20 2f 2a     0x10000000 /*
1a6a0 20 41 6c 77 61 79 73 20 68 61 73 20 62 6f 6f 6c   Always has bool
1a6b0 65 61 6e 20 76 61 6c 75 65 20 6f 66 20 54 52 55  ean value of TRU
1a6c0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  E */.#define EP_
1a6d0 49 73 46 61 6c 73 65 20 20 30 78 32 30 30 30 30  IsFalse  0x20000
1a6e0 30 30 30 20 2f 2a 20 41 6c 77 61 79 73 20 68 61  000 /* Always ha
1a6f0 73 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20  s boolean value 
1a700 6f 66 20 46 41 4c 53 45 20 2a 2f 0a 23 64 65 66  of FALSE */.#def
1a710 69 6e 65 20 45 50 5f 49 6e 64 69 72 65 63 74 20  ine EP_Indirect 
1a720 30 78 34 30 30 30 30 30 30 30 20 2f 2a 20 43 6f  0x40000000 /* Co
1a730 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 61  ntained within a
1a740 20 54 52 49 47 47 45 52 20 6f 72 20 61 20 56 49   TRIGGER or a VI
1a750 45 57 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  EW */../*.** The
1a760 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 6d 61   EP_Propagate ma
1a770 73 6b 20 69 73 20 61 20 73 65 74 20 6f 66 20 70  sk is a set of p
1a780 72 6f 70 65 72 74 69 65 73 20 74 68 61 74 20 61  roperties that a
1a790 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72 6f  utomatically pro
1a7a0 70 61 67 61 74 65 0a 2a 2a 20 75 70 77 61 72 64  pagate.** upward
1a7b0 73 20 69 6e 74 6f 20 70 61 72 65 6e 74 20 6e 6f  s into parent no
1a7c0 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  des..*/.#define 
1a7d0 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50  EP_Propagate (EP
1a7e0 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71  _Collate|EP_Subq
1a7f0 75 65 72 79 7c 45 50 5f 48 61 73 46 75 6e 63 29  uery|EP_HasFunc)
1a800 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
1a810 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
1a820 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
1a830 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
1a840 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  the.** Expr.flag
1a850 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
1a860 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65  ine ExprHasPrope
1a870 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28  rty(E,P)     (((
1a880 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d  E)->flags&(P))!=
1a890 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  0).#define ExprH
1a8a0 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c  asAllProperty(E,
1a8b0 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  P)  (((E)->flags
1a8c0 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
1a8d0 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ine ExprSetPrope
1a8e0 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29  rty(E,P)     (E)
1a8f0 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
1a900 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72  fine ExprClearPr
1a910 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45  operty(E,P)   (E
1a920 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 23  )->flags&=~(P).#
1a930 64 65 66 69 6e 65 20 45 78 70 72 41 6c 77 61 79  define ExprAlway
1a940 73 54 72 75 65 28 45 29 20 20 20 28 28 28 45 29  sTrue(E)   (((E)
1a950 2d 3e 66 6c 61 67 73 26 28 45 50 5f 46 72 6f 6d  ->flags&(EP_From
1a960 4a 6f 69 6e 7c 45 50 5f 49 73 54 72 75 65 29 29  Join|EP_IsTrue))
1a970 3d 3d 45 50 5f 49 73 54 72 75 65 29 0a 23 64 65  ==EP_IsTrue).#de
1a980 66 69 6e 65 20 45 78 70 72 41 6c 77 61 79 73 46  fine ExprAlwaysF
1a990 61 6c 73 65 28 45 29 20 20 28 28 28 45 29 2d 3e  alse(E)  (((E)->
1a9a0 66 6c 61 67 73 26 28 45 50 5f 46 72 6f 6d 4a 6f  flags&(EP_FromJo
1a9b0 69 6e 7c 45 50 5f 49 73 46 61 6c 73 65 29 29 3d  in|EP_IsFalse))=
1a9c0 3d 45 50 5f 49 73 46 61 6c 73 65 29 0a 0a 2f 2a  =EP_IsFalse)../*
1a9d0 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50   The ExprSetVVAP
1a9e0 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20  roperty() macro 
1a9f0 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69  is used for Veri
1aa00 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
1aa10 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63  tion,.** and Acc
1aa20 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e  reditation only.
1aa30 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20    It works like 
1aa40 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
1aa50 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20  ) during VVA.** 
1aa60 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73  processes but is
1aa70 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c   a no-op for del
1aa80 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  ivery..*/.#ifdef
1aa90 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
1aaa0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
1aab0 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  AProperty(E,P)  
1aac0 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
1aad0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
1aae0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
1aaf0 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  y(E,P).#endif../
1ab00 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
1ab10 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
1ab20 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
1ab30 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
1ab40 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74  l Expr.** struct
1ab50 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  , an Expr struct
1ab60 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64   with the EP_Red
1ab70 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e  uced flag set in
1ab80 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61   Expr.flags.** a
1ab90 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
1aba0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
1abb0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
1abc0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
1abd0 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
1abe0 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
1abf0 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
1ac00 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
1ac10 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
1ac20 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
1ac30 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
1ac40 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
1ac50 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
1ac60 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
1ac70 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
1ac80 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
1ac90 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
1aca0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
1acb0 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
1acc0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
1acd0 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
1ace0 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
1acf0 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74  t.** above sqlit
1ad00 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20  e3ExprDup() for 
1ad10 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66  details..*/.#def
1ad20 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55  ine EXPRDUP_REDU
1ad30 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30  CE         0x000
1ad40 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63  1  /* Used reduc
1ad50 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64  ed-size Expr nod
1ad60 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 72 75  es */../*.** Tru
1ad70 65 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  e if the express
1ad80 69 6f 6e 20 70 61 73 73 65 64 20 61 73 20 61 6e  ion passed as an
1ad90 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 61 20   argument was a 
1ada0 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 0a 2a 2a  function with.**
1adb0 20 61 6e 20 4f 56 45 52 28 29 20 63 6c 61 75 73   an OVER() claus
1adc0 65 20 28 61 20 77 69 6e 64 6f 77 20 66 75 6e 63  e (a window func
1add0 74 69 6f 6e 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tion)..*/.#defin
1ade0 65 20 49 73 57 69 6e 64 6f 77 46 75 6e 63 28 70  e IsWindowFunc(p
1adf0 29 20 28 20 5c 0a 20 20 20 20 45 78 70 72 48 61  ) ( \.    ExprHa
1ae00 73 50 72 6f 70 65 72 74 79 28 28 70 29 2c 20 45  sProperty((p), E
1ae10 50 5f 57 69 6e 46 75 6e 63 29 20 26 26 20 70 2d  P_WinFunc) && p-
1ae20 3e 79 2e 70 57 69 6e 2d 3e 65 46 72 6d 54 79 70  >y.pWin->eFrmTyp
1ae30 65 21 3d 54 4b 5f 46 49 4c 54 45 52 20 5c 0a 29  e!=TK_FILTER \.)
1ae40 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ../*.** A list o
1ae50 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  f expressions.  
1ae60 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
1ae70 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68  may optionally h
1ae80 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20  ave a.** name.  
1ae90 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d  An expr/name com
1aea0 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  bination can be 
1aeb0 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  used in several 
1aec0 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73  ways, such.** as
1aed0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78   the list of "ex
1aee0 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73  pr AS ID" fields
1aef0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45   following a "SE
1af00 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a  LECT" or in the.
1af10 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d  ** list of "ID =
1af20 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20   expr" items in 
1af30 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69  an UPDATE.  A li
1af40 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
1af50 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65  s can.** also be
1af60 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
1af70 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74  ument to a funct
1af80 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ion, in which ca
1af90 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a  se the a.zName.*
1afa0 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75  * field is not u
1afb0 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65  sed..**.** By de
1afc0 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a  fault the Expr.z
1afd0 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73  Span field holds
1afe0 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
1aff0 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  e description of
1b000 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
1b010 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20  on that is used 
1b020 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
1b030 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61  n of error messa
1b040 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d  ges and.** colum
1b050 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68  n labels.  In th
1b060 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53  is case, Expr.zS
1b070 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79  pan is typically
1b080 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a   the text of a.*
1b090 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * column express
1b0a0 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73  ion as it exists
1b0b0 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61   in a SELECT sta
1b0c0 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72  tement.  However
1b0d0 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61  , if.** the bSpa
1b0e0 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73  nIsTab flag is s
1b0f0 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69  et, then zSpan i
1b100 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20  s overloaded to 
1b110 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a  mean the name.**
1b120 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   of the result c
1b130 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72  olumn in the for
1b140 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c  m: DATABASE.TABL
1b150 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20  E.COLUMN.  This 
1b160 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73  later.** form is
1b170 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72   used for name r
1b180 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e  esolution with n
1b190 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  ested FROM claus
1b1a0 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  es..*/.struct Ex
1b1b0 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  prList {.  int n
1b1c0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
1b1d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1b1e0 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68  xpressions on th
1b1f0 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75  e list */.  stru
1b200 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d  ct ExprList_item
1b210 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65   { /* For each e
1b220 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
1b230 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70   list */.    Exp
1b240 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
1b250 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
1b260 65 20 74 72 65 65 20 66 6f 72 20 74 68 69 73 20  e tree for this 
1b270 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
1b280 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1b290 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
1b2a0 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  en associated wi
1b2b0 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69  th this expressi
1b2c0 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  on */.    char *
1b2d0 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20  zSpan;          
1b2e0 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65    /* Original te
1b2f0 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  xt of the expres
1b300 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73  sion */.    u8 s
1b310 6f 72 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20  ortFlags;       
1b320 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 4b      /* Mask of K
1b330 45 59 49 4e 46 4f 5f 4f 52 44 45 52 5f 2a 20 66  EYINFO_ORDER_* f
1b340 6c 61 67 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69  lags */.    unsi
1b350 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20  gned done :1;   
1b360 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f      /* A flag to
1b370 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70   indicate when p
1b380 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e  rocessing is fin
1b390 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  ished */.    uns
1b3a0 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62  igned bSpanIsTab
1b3b0 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f   :1; /* zSpan ho
1b3c0 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c  lds DB.TABLE.COL
1b3d0 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  UMN */.    unsig
1b3e0 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b  ned reusable :1;
1b3f0 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65     /* Constant e
1b400 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75  xpression is reu
1b410 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 73  sable */.    uns
1b420 69 67 6e 65 64 20 62 53 6f 72 74 65 72 52 65 66  igned bSorterRef
1b430 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20 65 76   :1; /* Defer ev
1b440 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c 20 61  aluation until a
1b450 66 74 65 72 20 73 6f 72 74 69 6e 67 20 2a 2f 0a  fter sorting */.
1b460 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 4e 75      unsigned bNu
1b470 6c 6c 73 3a 20 31 3b 20 20 20 20 20 2f 2a 20 54  lls: 1;     /* T
1b480 72 75 65 20 69 66 20 65 78 70 6c 69 63 69 74 20  rue if explicit 
1b490 22 4e 55 4c 4c 53 20 46 49 52 53 54 2f 4c 41 53  "NULLS FIRST/LAS
1b4a0 54 22 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  T" */.    union 
1b4b0 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
1b4c0 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
1b4d0 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
1b4e0 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
1b4f0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
1b500 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
1b510 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
1b520 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
1b530 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
1b540 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
1b550 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
1b560 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
1b570 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
1b580 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
1b590 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
1b5a0 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
1b5b0 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20   } u;.  } a[1]; 
1b5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5d0 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72   /* One slot for
1b5e0 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
1b5f0 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
1b600 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
1b610 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
1b620 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
1b630 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
1b640 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
1b650 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
1b660 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
1b670 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
1b680 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
1b690 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1b6a0 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
1b6b0 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
1b6c0 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
1b6d0 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
1b6e0 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
1b6f0 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
1b700 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
1b710 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
1b720 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
1b730 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
1b740 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
1b750 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
1b760 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
1b770 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
1b780 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
1b790 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
1b7a0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
1b7b0 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
1b7c0 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
1b7d0 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
1b7e0 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
1b7f0 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
1b800 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
1b810 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
1b820 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
1b830 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
1b840 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
1b850 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
1b860 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
1b870 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
1b880 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
1b890 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
1b8a0 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
1b8b0 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
1b8c0 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
1b8d0 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
1b8e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
1b8f0 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
1b900 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1b910 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
1b920 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
1b930 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
1b940 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
1b950 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
1b960 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
1b970 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
1b980 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
1b990 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
1b9a0 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
1b9b0 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
1b9c0 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
1b9d0 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
1b9e0 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
1b9f0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1ba00 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
1ba10 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
1ba20 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
1ba30 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
1ba40 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
1ba50 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
1ba60 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
1ba70 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
1ba80 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
1ba90 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
1baa0 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
1bab0 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
1bac0 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
1bad0 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
1bae0 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
1baf0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
1bb00 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
1bb10 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
1bb20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
1bb30 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
1bb40 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
1bb50 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
1bb60 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
1bb70 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
1bb80 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
1bb90 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
1bba0 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
1bbb0 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
1bbc0 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
1bbd0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
1bbe0 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
1bbf0 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
1bc00 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
1bc10 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
1bc20 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
1bc30 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
1bc40 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
1bc50 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
1bc60 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
1bc70 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
1bc80 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
1bc90 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
1bca0 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
1bcb0 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
1bcc0 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
1bcd0 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
1bce0 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
1bcf0 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
1bd00 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53  cList {.  int nS
1bd10 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
1bd20 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
1bd30 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
1bd40 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1bd50 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b  */.  u32 nAlloc;
1bd60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bd70 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
1bd80 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
1bd90 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
1bda0 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
1bdb0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1bdc0 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
1bdd0 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
1bde0 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
1bdf0 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
1be00 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
1be10 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
1be20 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
1be30 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1be40 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
1be50 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
1be60 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
1be70 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
1be80 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
1be90 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
1bea0 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
1beb0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1bec0 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
1bed0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1bee0 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
1bef0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
1bf00 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
1bf10 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
1bf20 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
1bf30 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
1bf40 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
1bf50 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
1bf60 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
1bf70 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
1bf80 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
1bf90 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
1bfa0 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
1bfb0 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
1bfc0 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
1bfd0 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
1bfe0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68    /* Registers h
1bff0 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f  olding results o
1c000 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  f a co-routine *
1c010 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20  /.    struct {. 
1c020 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65       u8 jointype
1c030 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
1c040 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
1c050 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68  his table and th
1c060 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
1c070 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
1c080 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
1c090 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1c0a0 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
1c0b0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1c0c0 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65   unsigned isInde
1c0d0 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54  xedBy :1;   /* T
1c0e0 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1c0f0 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  an INDEXED BY cl
1c100 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1c110 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63  signed isTabFunc
1c120 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65   :1;     /* True
1c130 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   if table-valued
1c140 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78  -function syntax
1c150 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1c160 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
1c170 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
1c180 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
1c190 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20  related */.     
1c1a0 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
1c1b0 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
1c1c0 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
1c1d0 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1c1e0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52      unsigned isR
1c1f0 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f  ecursive :1;   /
1c200 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72  * True for recur
1c210 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69  sive reference i
1c220 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20  n WITH */.    } 
1c230 66 67 3b 0a 20 20 20 20 69 6e 74 20 69 43 75 72  fg;.    int iCur
1c240 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  sor;      /* The
1c250 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d   VDBE cursor num
1c260 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65  ber used to acce
1c270 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ss this table */
1c280 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20  .    Expr *pOn; 
1c290 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e         /* The ON
1c2a0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
1c2b0 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20  n */.    IdList 
1c2c0 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68  *pUsing;   /* Th
1c2d0 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  e USING clause o
1c2e0 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
1c2f0 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b  Bitmask colUsed;
1c300 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e    /* Bit N (1<<N
1c310 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20  ) set if column 
1c320 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65  N of pTab is use
1c330 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  d */.    union {
1c340 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e  .      char *zIn
1c350 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49  dexedBy;    /* I
1c360 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
1c370 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
1c380 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
1c390 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70       ExprList *p
1c3a0 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67  FuncArg;  /* Arg
1c3b0 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d  uments to table-
1c3c0 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1c3d0 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20  */.    } u1;.   
1c3e0 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78   Index *pIBIndex
1c3f0 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75  ;  /* Index stru
1c400 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64  cture correspond
1c410 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78  ing to u1.zIndex
1c420 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  edBy */.  } a[1]
1c430 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1c440 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
1c450 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f  ach identifier o
1c460 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1c470 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65  ../*.** Permitte
1c480 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  d values of the 
1c490 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79  SrcList.a.jointy
1c4a0 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66  pe field.*/.#def
1c4b0 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20  ine JT_INNER    
1c4c0 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e   0x0001    /* An
1c4d0 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20  y kind of inner 
1c4e0 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f  or cross join */
1c4f0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53  .#define JT_CROS
1c500 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20  S     0x0002    
1c510 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20  /* Explicit use 
1c520 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79  of the CROSS key
1c530 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
1c540 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30  JT_NATURAL   0x0
1c550 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66  004    /* True f
1c560 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a  or a "natural" j
1c570 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1c580 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30  T_LEFT      0x00
1c590 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75  08    /* Left ou
1c5a0 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
1c5b0 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20  ine JT_RIGHT    
1c5c0 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69   0x0010    /* Ri
1c5d0 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  ght outer join *
1c5e0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54  /.#define JT_OUT
1c5f0 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20  ER     0x0020   
1c600 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20   /* The "OUTER" 
1c610 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65  keyword is prese
1c620 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  nt */.#define JT
1c630 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34  _ERROR     0x004
1c640 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20  0    /* unknown 
1c650 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a  or unsupported j
1c660 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a  oin type */.../*
1c670 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70  .** Flags approp
1c680 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63  riate for the wc
1c690 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74  trlFlags paramet
1c6a0 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65  er of sqlite3Whe
1c6b0 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64  reBegin().** and
1c6c0 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77   the WhereInfo.w
1c6d0 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72  ctrlFlags member
1c6e0 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1c6f0 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
1c700 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
1c710 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f  ):.**     WHERE_
1c720 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46  USE_LIMIT  == SF
1c730 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23  _FixedLimit.*/.#
1c740 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1c750 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78  ERBY_NORMAL   0x
1c760 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f  0000 /* No-op */
1c770 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1c780 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20  RDERBY_MIN      
1c790 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20  0x0001 /* ORDER 
1c7a0 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
1c7b0 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a  r min() func */.
1c7c0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1c7d0 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30  DERBY_MAX      0
1c7e0 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42  x0002 /* ORDER B
1c7f0 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
1c800 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23   max() func */.#
1c810 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
1c820 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78  PASS_DESIRED  0x
1c830 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20  0004 /* Want to 
1c840 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41  do one-pass UPDA
1c850 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  TE/DELETE */.#de
1c860 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
1c870 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30  SS_MULTIROW 0x00
1c880 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73  08 /* ONEPASS is
1c890 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c   ok with multipl
1c8a0 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e  e rows */.#defin
1c8b0 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54  e WHERE_DUPLICAT
1c8c0 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20  ES_OK    0x0010 
1c8d0 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20  /* Ok to return 
1c8e0 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20  a row more than 
1c8f0 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  once */.#define 
1c900 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55  WHERE_OR_SUBCLAU
1c910 53 45 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a  SE     0x0020 /*
1c920 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75   Processing a su
1c930 62 2d 57 48 45 52 45 20 61 73 20 70 61 72 74 20  b-WHERE as part 
1c940 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  of.             
1c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c960 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20           ** the 
1c970 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  OR optimization 
1c980 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c990 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20  E_GROUPBY       
1c9a0 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72     0x0040 /* pOr
1c9b0 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20  derBy is really 
1c9c0 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64  a GROUP BY */.#d
1c9d0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1c9e0 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30  INCTBY       0x0
1c9f0 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20  080 /* pOrderby 
1ca00 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54  is really a DIST
1ca10 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23  INCT clause */.#
1ca20 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e  define WHERE_WAN
1ca30 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78  T_DISTINCT    0x
1ca40 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70  0100 /* All outp
1ca50 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64  ut needs to be d
1ca60 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69  istinct */.#defi
1ca70 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47  ne WHERE_SORTBYG
1ca80 52 4f 55 50 20 20 20 20 20 20 30 78 30 32 30 30  ROUP      0x0200
1ca90 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69   /* Support sqli
1caa0 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
1cab0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  () */.#define WH
1cac0 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20  ERE_SEEK_TABLE  
1cad0 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44       0x0400 /* D
1cae0 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b  o not defer seek
1caf0 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20  s on main table 
1cb00 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1cb10 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20  _ORDERBY_LIMIT  
1cb20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45    0x0800 /* ORDE
1cb30 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65  RBY+LIMIT on the
1cb40 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23   inner loop */.#
1cb50 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1cb60 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78  K_UNIQ_TABLE  0x
1cb70 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  1000 /* Do not d
1cb80 65 66 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e  efer seeks if un
1cb90 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  ique */.        
1cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbb0 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20 20 20  /*     0x2000   
1cbc0 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75   not currently u
1cbd0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
1cbe0 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20  HERE_USE_LIMIT  
1cbf0 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20        0x4000 /* 
1cc00 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e  Use the LIMIT in
1cc10 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20   cost estimates 
1cc20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
1cc30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
1cc40 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20    0x8000    not 
1cc50 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a  currently used *
1cc60 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /../* Allowed re
1cc70 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
1cc80 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
1cc90 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65  istinct().*/.#de
1cca0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1ccb0 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
1ccc0 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
1ccd0 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
1cce0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1ccf0 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
1cd00 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
1cd10 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
1cd20 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1cd30 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
1cd40 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
1cd50 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
1cd60 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1cd70 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
1cd80 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
1cd90 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
1cda0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
1cdb0 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
1cdc0 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
1cdd0 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
1cde0 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
1cdf0 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
1ce00 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
1ce10 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
1ce20 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
1ce30 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
1ce40 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
1ce50 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
1ce60 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
1ce70 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
1ce80 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
1ce90 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
1cea0 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
1ceb0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
1cec0 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
1ced0 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
1cee0 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
1cef0 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
1cf00 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
1cf10 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
1cf20 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
1cf30 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
1cf40 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
1cf50 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
1cf60 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
1cf70 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
1cf80 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
1cf90 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
1cfa0 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63   inner-most.** c
1cfb0 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68  ontext is search
1cfc0 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f  ed first.  If no
1cfd0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
1cfe0 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a   the next outer.
1cff0 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68  ** context is ch
1d000 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65  ecked.  If there
1d010 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74   is still no mat
1d020 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e  ch, the next con
1d030 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b  text.** is check
1d040 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73  ed.  This proces
1d050 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
1d060 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68  l either a match
1d070 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20   is found.** or 
1d080 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65  all contexts are
1d090 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20   check.  When a 
1d0a0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
1d0b0 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20  the nRef member 
1d0c0 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78  of.** the contex
1d0d0 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
1d0e0 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d   match is increm
1d0f0 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63  ented..**.** Eac
1d100 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20  h subquery gets 
1d110 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78  a new NameContex
1d120 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69  t.  The pNext fi
1d130 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  eld points to th
1d140 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
1d150 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71   in the parent q
1d160 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20  uery.  Thus the 
1d170 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e  process of scann
1d180 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43  ing the.** NameC
1d190 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72  ontext list corr
1d1a0 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63  esponds to searc
1d1b0 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63  hing through suc
1d1c0 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a  cessively outer.
1d1d0 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f  ** subqueries lo
1d1e0 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63  oking for a matc
1d1f0 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d  h..*/.struct Nam
1d200 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72  eContext {.  Par
1d210 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1d220 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20    /* The parser 
1d230 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
1d240 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65  rcList;   /* One
1d250 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
1d260 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20  used to resolve 
1d270 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e  names */.  union
1d280 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
1d290 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
1d2a0 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
1d2b0 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
1d2c0 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66  ns */.    AggInf
1d2d0 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
1d2e0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1d2f0 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
1d300 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
1d310 20 20 20 20 55 70 73 65 72 74 20 2a 70 55 70 73      Upsert *pUps
1d320 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43  ert;     /* ON C
1d330 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1d340 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
1d350 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d  an upsert */.  }
1d360 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74   uNC;.  NameCont
1d370 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
1d380 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
1d390 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
1d3a0 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
1d3b0 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
1d3c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d3d0 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
1d3e0 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
1d3f0 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
1d400 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1d410 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1d420 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
1d430 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
1d440 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 63 46 6c  es */.  int ncFl
1d450 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
1d460 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
1d470 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
1d480 62 65 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c 65 63  below */.  Selec
1d490 74 20 2a 70 57 69 6e 53 65 6c 65 63 74 3b 20 20  t *pWinSelect;  
1d4a0 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
1d4b0 65 6e 74 20 66 6f 72 20 61 6e 79 20 77 69 6e 64  ent for any wind
1d4c0 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  ow functions */.
1d4d0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1d4e0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
1d4f0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63   NameContext, nc
1d500 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  Flags field..**.
1d510 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1d520 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1d530 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
1d540 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67  .**    NC_HasAgg
1d550 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67      == SF_HasAgg
1d560 20 20 20 20 3d 3d 20 45 50 5f 41 67 67 0a 2a 2a      == EP_Agg.**
1d570 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67      NC_MinMaxAgg
1d580 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   == SF_MinMaxAgg
1d590 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   == SQLITE_FUNC_
1d5a0 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 4e 43 5f  MINMAX.**    NC_
1d5b0 48 61 73 57 69 6e 20 20 20 20 3d 3d 20 45 50 5f  HasWin    == EP_
1d5c0 57 69 6e 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e  Win.**.*/.#defin
1d5d0 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
1d5e0 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67  x0001  /* Aggreg
1d5f0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
1d600 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
1d610 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72  /.#define NC_Par
1d620 74 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f  tIdx   0x0002  /
1d630 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1d640 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e  ing a partial in
1d650 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65  dex WHERE */.#de
1d660 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20  fine NC_IsCheck 
1d670 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75    0x0004  /* Tru
1d680 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e  e if resolving n
1d690 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20  ames in a CHECK 
1d6a0 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
1d6b0 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75  efine NC_InAggFu
1d6c0 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72  nc 0x0008  /* Tr
1d6d0 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20  ue if analyzing 
1d6e0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20  arguments to an 
1d6f0 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  agg func */.#def
1d700 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20  ine NC_HasAgg   
1d710 20 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20   0x0010  /* One 
1d720 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
1d730 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  e functions seen
1d740 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1d750 64 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20  dxExpr   0x0020 
1d760 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1d770 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66  lving columns of
1d780 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
1d790 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53  .#define NC_VarS
1d7a0 65 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a  elect 0x0040  /*
1d7b0 20 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75   A correlated su
1d7c0 62 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20  bquery has been 
1d7d0 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1d7e0 4e 43 5f 55 45 4c 69 73 74 20 20 20 20 30 78 30  NC_UEList    0x0
1d7f0 30 38 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  080  /* True if 
1d800 75 4e 43 2e 70 45 4c 69 73 74 20 69 73 20 75 73  uNC.pEList is us
1d810 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1d820 5f 55 41 67 67 49 6e 66 6f 20 20 30 78 30 31 30  _UAggInfo  0x010
1d830 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e  0  /* True if uN
1d840 43 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 75 73  C.pAggInfo is us
1d850 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1d860 5f 55 55 70 73 65 72 74 20 20 20 30 78 30 32 30  _UUpsert   0x020
1d870 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e  0  /* True if uN
1d880 43 2e 70 55 70 73 65 72 74 20 69 73 20 75 73 65  C.pUpsert is use
1d890 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1d8a0 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30  MinMaxAgg 0x1000
1d8b0 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67    /* min/max agg
1d8c0 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53  regates seen.  S
1d8d0 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f  ee note above */
1d8e0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70  .#define NC_Comp
1d8f0 6c 65 78 20 20 20 30 78 32 30 30 30 20 20 2f 2a  lex   0x2000  /*
1d900 20 54 72 75 65 20 69 66 20 61 20 66 75 6e 63 74   True if a funct
1d910 69 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20  ion or subquery 
1d920 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1d930 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20 20 30 78 34  NC_AllowWin  0x4
1d940 30 30 30 20 20 2f 2a 20 57 69 6e 64 6f 77 20 66  000  /* Window f
1d950 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c  unctions are all
1d960 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65  owed here */.#de
1d970 66 69 6e 65 20 4e 43 5f 48 61 73 57 69 6e 20 20  fine NC_HasWin  
1d980 20 20 30 78 38 30 30 30 20 20 2f 2a 20 4f 6e 65    0x8000  /* One
1d990 20 6f 72 20 6d 6f 72 65 20 77 69 6e 64 6f 77 20   or more window 
1d9a0 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a  functions seen *
1d9b0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 44  /.#define NC_IsD
1d9c0 44 4c 20 20 20 20 30 78 31 30 30 30 30 20 20 2f  DL    0x10000  /
1d9d0 2a 20 52 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  * Resolving name
1d9e0 73 20 69 6e 20 61 20 43 52 45 41 54 45 20 73 74  s in a CREATE st
1d9f0 61 74 65 6d 65 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a  atement */../*.*
1da00 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1da10 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f   the following o
1da20 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
1da30 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46  a single ON CONF
1da40 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73 65 20 69  LICT.** clause i
1da50 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a 2a 2a 0a  n an upsert..**.
1da60 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 54 61  ** The pUpsertTa
1da70 72 67 65 74 20 66 69 65 6c 64 20 69 73 20 6f 6e  rget field is on
1da80 6c 79 20 73 65 74 20 69 66 20 74 68 65 20 4f 4e  ly set if the ON
1da90 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1daa0 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e   includes.** con
1dab0 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61  flict-target cla
1dac0 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e 20 43 4f  use.  (In "ON CO
1dad0 4e 46 4c 49 43 54 28 61 2c 62 29 22 20 74 68 65  NFLICT(a,b)" the
1dae0 20 22 28 61 2c 62 29 22 20 69 73 20 74 68 65 0a   "(a,b)" is the.
1daf0 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67  ** conflict-targ
1db00 65 74 20 63 6c 61 75 73 65 2e 29 20 20 54 68 65  et clause.)  The
1db10 20 70 55 70 73 65 72 74 54 61 72 67 65 74 57 68   pUpsertTargetWh
1db20 65 72 65 20 69 73 20 74 68 65 20 6f 70 74 69 6f  ere is the optio
1db30 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61  nal.** WHERE cla
1db40 75 73 65 20 75 73 65 64 20 74 6f 20 69 64 65 6e  use used to iden
1db50 74 69 66 79 20 70 61 72 74 69 61 6c 20 75 6e 69  tify partial uni
1db60 71 75 65 20 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a  que indexes..**.
1db70 2a 2a 20 70 55 70 73 65 72 74 53 65 74 20 69 73  ** pUpsertSet is
1db80 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c   the list of col
1db90 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d 73 20 6f  umn=expr terms o
1dba0 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
1dbb0 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68 65 20  tement. .** The 
1dbc0 70 55 70 73 65 72 74 53 65 74 20 66 69 65 6c 64  pUpsertSet field
1dbd0 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 61 20 4f   is NULL for a O
1dbe0 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f 20 4e 4f  N CONFLICT DO NO
1dbf0 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a 2a 20 70  THING.  The.** p
1dc00 55 70 73 65 72 74 57 68 65 72 65 20 69 73 20 74  UpsertWhere is t
1dc10 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1dc20 66 6f 72 20 74 68 65 20 55 50 44 41 54 45 20 61  for the UPDATE a
1dc30 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66 20 74 68  nd is NULL if th
1dc40 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73  e.** WHERE claus
1dc50 65 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f  e is omitted..*/
1dc60 0a 73 74 72 75 63 74 20 55 70 73 65 72 74 20 7b  .struct Upsert {
1dc70 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70  .  ExprList *pUp
1dc80 73 65 72 74 54 61 72 67 65 74 3b 20 20 2f 2a 20  sertTarget;  /* 
1dc90 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63 72 69 70  Optional descrip
1dca0 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69 63 74  tion of conflict
1dcb0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  ing index */.  E
1dcc0 78 70 72 20 2a 70 55 70 73 65 72 74 54 61 72 67  xpr *pUpsertTarg
1dcd0 65 74 57 68 65 72 65 3b 20 2f 2a 20 57 48 45 52  etWhere; /* WHER
1dce0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
1dcf0 74 69 61 6c 20 69 6e 64 65 78 20 74 61 72 67 65  tial index targe
1dd00 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ts */.  ExprList
1dd10 20 2a 70 55 70 73 65 72 74 53 65 74 3b 20 20 20   *pUpsertSet;   
1dd20 20 20 2f 2a 20 54 68 65 20 53 45 54 20 63 6c 61    /* The SET cla
1dd30 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f 4e 20 43  use from an ON C
1dd40 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a  ONFLICT UPDATE *
1dd50 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73 65 72  /.  Expr *pUpser
1dd60 74 57 68 65 72 65 3b 20 20 20 20 20 20 20 2f 2a  tWhere;       /*
1dd70 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
1dd80 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  r the ON CONFLIC
1dd90 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 2f 2a  T UPDATE */.  /*
1dda0 20 54 68 65 20 66 69 65 6c 64 73 20 61 62 6f 76   The fields abov
1ddb0 65 20 63 6f 6d 70 72 69 73 65 20 74 68 65 20 70  e comprise the p
1ddc0 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68  arse tree for th
1ddd0 65 20 75 70 73 65 72 74 20 63 6c 61 75 73 65 2e  e upsert clause.
1dde0 0a 20 20 2a 2a 20 54 68 65 20 66 69 65 6c 64 73  .  ** The fields
1ddf0 20 62 65 6c 6f 77 20 61 72 65 20 75 73 65 64 20   below are used 
1de00 74 6f 20 74 72 61 6e 73 66 65 72 20 69 6e 66 6f  to transfer info
1de10 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  rmation from the
1de20 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20 70 72 6f   INSERT.  ** pro
1de30 63 65 73 73 69 6e 67 20 64 6f 77 6e 20 69 6e 74  cessing down int
1de40 6f 20 74 68 65 20 55 50 44 41 54 45 20 70 72 6f  o the UPDATE pro
1de50 63 65 73 73 69 6e 67 20 77 68 69 6c 65 20 67 65  cessing while ge
1de60 6e 65 72 61 74 69 6e 67 20 63 6f 64 65 2e 0a 20  nerating code.. 
1de70 20 2a 2a 20 55 70 73 65 72 74 20 6f 77 6e 73 20   ** Upsert owns 
1de80 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  the memory alloc
1de90 61 74 65 64 20 61 62 6f 76 65 2c 20 62 75 74 20  ated above, but 
1dea0 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72 79 20 62  not the memory b
1deb0 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64 65 78  elow. */.  Index
1dec0 20 2a 70 55 70 73 65 72 74 49 64 78 3b 20 20 20   *pUpsertIdx;   
1ded0 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74 72 61 69       /* Constrai
1dee0 6e 74 20 74 68 61 74 20 70 55 70 73 65 72 74 54  nt that pUpsertT
1def0 61 72 67 65 74 20 69 64 65 6e 74 69 66 69 65 73  arget identifies
1df00 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1df10 55 70 73 65 72 74 53 72 63 3b 20 20 20 20 20 20  UpsertSrc;      
1df20 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62 65 20 75  /* Table to be u
1df30 70 64 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  pdated */.  int 
1df40 72 65 67 44 61 74 61 3b 20 20 20 20 20 20 20 20  regData;        
1df50 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
1df60 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1df70 61 72 72 61 79 20 6f 66 20 56 41 4c 55 45 53 20  array of VALUES 
1df80 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74 61 43 75  */.  int iDataCu
1df90 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
1dfa0 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 64  * Index of the d
1dfb0 61 74 61 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ata cursor */.  
1dfc0 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20 20  int iIdxCur;    
1dfd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1dfe0 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  ex of the first 
1dff0 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a  index cursor */.
1e000 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
1e010 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1e020 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1e030 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e   contains all in
1e040 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65  formation.** nee
1e050 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ded to generate 
1e060 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c  code for a singl
1e070 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1e080 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68  nt..**.** See th
1e090 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74  e header comment
1e0a0 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75 74 65 4c   on the computeL
1e0b0 69 6d 69 74 52 65 67 69 73 74 65 72 73 28 29 20  imitRegisters() 
1e0c0 72 6f 75 74 69 6e 65 20 66 6f 72 20 61 0a 2a 2a  routine for a.**
1e0d0 20 64 65 74 61 69 6c 65 64 20 64 65 73 63 72 69   detailed descri
1e0e0 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 65 61  ption of the mea
1e0f0 6e 69 6e 67 20 6f 66 20 74 68 65 20 69 4c 69 6d  ning of the iLim
1e100 69 74 20 61 6e 64 20 69 4f 66 66 73 65 74 20 66  it and iOffset f
1e110 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64  ields..**.** add
1e120 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72  rOpenEphm[] entr
1e130 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ies contain the 
1e140 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70  address of OP_Op
1e150 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
1e160 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64  des..** These ad
1e170 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20  dresses must be 
1e180 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77  stored so that w
1e190 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e  e can go back an
1e1a0 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65  d fill in.** the
1e1b0 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20   P4_KEYINFO and 
1e1c0 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61  P2 parameters la
1e1d0 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68  ter.  Neither th
1e1e0 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a  e KeyInfo nor.**
1e1f0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1e200 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e  olumns in P2 can
1e210 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20   be computed at 
1e220 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a  the same time.**
1e230 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45   as the OP_OpenE
1e240 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  phm instruction 
1e250 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65  is coded because
1e260 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69   not.** enough i
1e270 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1e280 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75   the compound qu
1e290 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20  ery is known at 
1e2a0 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54  that point..** T
1e2b0 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
1e2c0 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61  ddrOpenTran[0] a
1e2d0 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20  nd [1] contains 
1e2e0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
1e2f0 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  ces.** for the r
1e300 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20  esult set.  The 
1e310 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
1e320 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74  OpenEphm[2] cont
1e330 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a  ains collating.*
1e340 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20  * sequences for 
1e350 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1e360 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  use..*/.struct S
1e370 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69  elect {.  ExprLi
1e380 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20  st *pEList;     
1e390 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f   /* The fields o
1e3a0 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a  f the result */.
1e3b0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1e3c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1e3d0 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f  of: TK_UNION TK_
1e3e0 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54  ALL TK_INTERSECT
1e3f0 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20   TK_EXCEPT */.  
1e400 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f  LogEst nSelectRo
1e410 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
1e420 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65  ted number of re
1e430 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75  sult rows */.  u
1e440 33 32 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20  32 selFlags;    
1e450 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
1e460 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   SF_* values */.
1e470 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f    int iLimit, iO
1e480 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f  ffset;   /* Memo
1e490 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c  ry registers hol
1e4a0 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46  ding LIMIT & OFF
1e4b0 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  SET counters */.
1e4c0 20 20 75 33 32 20 73 65 6c 49 64 3b 20 20 20 20    u32 selId;    
1e4d0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 6e 69 71           /* Uniq
1e4e0 75 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 75  ue identifier nu
1e4f0 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 53 45  mber for this SE
1e500 4c 45 43 54 20 2a 2f 0a 20 20 69 6e 74 20 61 64  LECT */.  int ad
1e510 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
1e520 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
1e530 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
1e540 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
1e550 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
1e560 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rc;         /* T
1e570 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
1e580 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
1e590 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
1e5a0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
1e5b0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
1e5c0 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68  roupBy;    /* Th
1e5d0 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
1e5e0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61  e */.  Expr *pHa
1e5f0 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  ving;         /*
1e600 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   The HAVING clau
1e610 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
1e620 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f   *pOrderBy;    /
1e630 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1e640 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63  lause */.  Selec
1e650 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20  t *pPrior;      
1e660 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63    /* Prior selec
1e670 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
1e680 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
1e690 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e   */.  Select *pN
1e6a0 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1e6b0 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74  Next select to t
1e6c0 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d  he left in a com
1e6d0 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20  pound */.  Expr 
1e6e0 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20  *pLimit;        
1e6f0 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65    /* LIMIT expre
1e700 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
1e710 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
1e720 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
1e730 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20          /* WITH 
1e740 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
1e750 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20  to this select. 
1e760 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23 69 66 6e  Or NULL. */.#ifn
1e770 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1e780 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 57 69 6e  WINDOWFUNC.  Win
1e790 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20 20  dow *pWin;      
1e7a0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 77      /* List of w
1e7b0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
1e7c0 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69  */.  Window *pWi
1e7d0 6e 44 65 66 6e 3b 20 20 20 20 20 20 2f 2a 20 4c  nDefn;      /* L
1e7e0 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 77 69 6e  ist of named win
1e7f0 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e 73 20  dow definitions 
1e800 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
1e810 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
1e820 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65  es for Select.se
1e830 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46  lFlags.  The "SF
1e840 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20  " prefix stands 
1e850 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46  for.** "Select F
1e860 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  lag"..**.** Valu
1e870 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  e constraints (a
1e880 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61  ll checked via a
1e890 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20 20 20  ssert()).**     
1e8a0 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 3d 3d  SF_HasAgg     ==
1e8b0 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20   NC_HasAgg.**   
1e8c0 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20    SF_MinMaxAgg  
1e8d0 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  == NC_MinMaxAgg 
1e8e0 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55      == SQLITE_FU
1e8f0 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20  NC_MINMAX.**    
1e900 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 3d   SF_FixedLimit =
1e910 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49  = WHERE_USE_LIMI
1e920 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T.*/.#define SF_
1e930 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 30  Distinct       0
1e940 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75  x00001  /* Outpu
1e950 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54  t should be DIST
1e960 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  INCT */.#define 
1e970 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20 20  SF_All          
1e980 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20 49 6e    0x00002  /* In
1e990 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20 6b  cludes the ALL k
1e9a0 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
1e9b0 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20  e SF_Resolved   
1e9c0 20 20 20 20 30 78 30 30 30 30 34 20 20 2f 2a 20      0x00004  /* 
1e9d0 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65  Identifiers have
1e9e0 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a   been resolved *
1e9f0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67  /.#define SF_Agg
1ea00 72 65 67 61 74 65 20 20 20 20 20 20 30 78 30 30  regate      0x00
1ea10 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  008  /* Contains
1ea20 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f   agg functions o
1ea30 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  r a GROUP BY */.
1ea40 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 41 67  #define SF_HasAg
1ea50 67 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31  g         0x0001
1ea60 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  0  /* Contains a
1ea70 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1ea80 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
1ea90 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
1eaa0 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73 65 73  0x00020  /* Uses
1eab0 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72   the OpenEphemer
1eac0 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65  al opcode */.#de
1ead0 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64  fine SF_Expanded
1eae0 20 20 20 20 20 20 20 30 78 30 30 30 34 30 20 20         0x00040  
1eaf0 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  /* sqlite3Select
1eb00 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20  Expand() called 
1eb10 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69  on this */.#defi
1eb20 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66  ne SF_HasTypeInf
1eb30 6f 20 20 20 20 30 78 30 30 30 38 30 20 20 2f 2a  o    0x00080  /*
1eb40 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73   FROM subqueries
1eb50 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61   have Table meta
1eb60 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
1eb70 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20  SF_Compound     
1eb80 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20 50 61    0x00100  /* Pa
1eb90 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64  rt of a compound
1eba0 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e   query */.#defin
1ebb0 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20  e SF_Values     
1ebc0 20 20 20 20 30 78 30 30 32 30 30 20 20 2f 2a 20      0x00200  /* 
1ebd0 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d  Synthesized from
1ebe0 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a   VALUES clause *
1ebf0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c  /.#define SF_Mul
1ec00 74 69 56 61 6c 75 65 20 20 20 20 20 30 78 30 30  tiValue     0x00
1ec10 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56  400  /* Single V
1ec20 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68 20  ALUES term with 
1ec30 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1ec40 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74  .#define SF_Nest
1ec50 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30 38  edFrom     0x008
1ec60 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
1ec70 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46   parenthesized F
1ec80 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  ROM clause */.#d
1ec90 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41  efine SF_MinMaxA
1eca0 67 67 20 20 20 20 20 20 30 78 30 31 30 30 30 20  gg      0x01000 
1ecb0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f   /* Aggregate co
1ecc0 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f  ntaining min() o
1ecd0 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69  r max() */.#defi
1ece0 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20  ne SF_Recursive 
1ecf0 20 20 20 20 20 30 78 30 32 30 30 30 20 20 2f 2a       0x02000  /*
1ed00 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70   The recursive p
1ed10 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69  art of a recursi
1ed20 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e  ve CTE */.#defin
1ed30 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20  e SF_FixedLimit 
1ed40 20 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a 20      0x04000  /* 
1ed50 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20 62  nSelectRow set b
1ed60 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d  y a constant LIM
1ed70 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  IT */.#define SF
1ed80 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20  _MaybeConvert   
1ed90 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65 65 64  0x08000  /* Need
1eda0 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1edb0 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1edc0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1edd0 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20  _Converted      
1ede0 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79 20 63  0x10000  /* By c
1edf0 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1ee00 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1ee10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 49   */.#define SF_I
1ee20 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30 78  ncludeHidden  0x
1ee30 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64  20000  /* Includ
1ee40 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
1ee50 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64   in output */.#d
1ee60 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c 65 78  efine SF_Complex
1ee70 52 65 73 75 6c 74 20 20 30 78 34 30 30 30 30 20  Result  0x40000 
1ee80 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 6e 74 61   /* Result conta
1ee90 69 6e 73 20 73 75 62 71 75 65 72 79 20 6f 72 20  ins subquery or 
1eea0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
1eeb0 69 6e 65 20 53 46 5f 57 68 65 72 65 42 65 67 69  ine SF_WhereBegi
1eec0 6e 20 20 20 20 20 30 78 38 30 30 30 30 20 20 2f  n     0x80000  /
1eed0 2a 20 52 65 61 6c 6c 79 20 61 20 57 68 65 72 65  * Really a Where
1eee0 42 65 67 69 6e 28 29 20 63 61 6c 6c 2e 20 20 44  Begin() call.  D
1eef0 65 62 75 67 20 4f 6e 6c 79 20 2a 2f 0a 0a 2f 2a  ebug Only */../*
1ef00 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20  .** The results 
1ef10 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20  of a SELECT can 
1ef20 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69  be distributed i
1ef30 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
1ef40 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79  as defined.** by
1ef50 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
1ef60 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54  owing macros.  T
1ef70 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20  he "SRT" prefix 
1ef80 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
1ef90 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a  sult.** Type"..*
1efa0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69  *.**     SRT_Uni
1efb0 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  on       Store r
1efc0 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20  esults as a key 
1efd0 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69  in a temporary i
1efe0 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20  ndex.**         
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e              iden
1f000 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d  tified by pDest-
1f010 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1f020 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20      SRT_Except  
1f030 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c      Remove resul
1f040 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70  ts from the temp
1f050 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73  orary index pDes
1f060 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
1f070 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73  *     SRT_Exists
1f080 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20        Store a 1 
1f090 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70  in memory cell p
1f0a0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66  Dest->iSDParm if
1f0b0 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20   the result.**  
1f0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0d0 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d     set is not em
1f0e0 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pty..**.**     S
1f0f0 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54  RT_Discard     T
1f100 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73  hrow the results
1f110 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20   away.  This is 
1f120 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a  used by SELECT.*
1f130 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f140 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73        statements
1f150 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1f160 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70   whose only purp
1f170 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20  ose is.**       
1f180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1f190 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f  e side-effects o
1f1a0 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  f functions..**.
1f1b0 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62  ** All of the ab
1f1c0 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20  ove are free to 
1f1d0 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44  ignore their ORD
1f1e0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68  ER BY clause. Th
1f1f0 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c  ose that.** foll
1f200 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68  ow must honor th
1f210 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1f220 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
1f230 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e  _Output      Gen
1f240 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f  erate a row of o
1f250 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65  utput (using the
1f260 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a   OP_ResultRow.**
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f280 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72       opcode) for
1f290 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   each row in the
1f2a0 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a   result set..**.
1f2b0 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20  **     SRT_Mem  
1f2c0 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69         Only vali
1f2d0 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
1f2e0 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  is a single colu
1f2f0 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  mn..**          
1f300 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65             Store
1f310 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d   the first colum
1f320 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72  n of the first r
1f330 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20  esult row.**    
1f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f350 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1f360 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e  st->iSDParm then
1f370 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73   abandon the res
1f380 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1f390 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
1f3a0 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73  query.  This des
1f3b0 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73  tination implies
1f3c0 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a   "LIMIT 1"..**.*
1f3d0 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20  *     SRT_Set   
1f3e0 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74        The result
1f3f0 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c   must be a singl
1f400 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65  e column.  Store
1f410 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20   each.**        
1f420 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
1f430 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68   of result as th
1f440 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70  e key in table p
1f450 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1f460 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f470 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20        Apply the 
1f480 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e  affinity pDest->
1f490 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73  affSdst before s
1f4a0 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20  toring.**       
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f4c0 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20  sults.  Used to 
1f4d0 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53  implement "IN (S
1f4e0 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a  ELECT ...)"..**.
1f4f0 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d  **     SRT_Ephem
1f500 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e  Tab    Create an
1f510 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1f520 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1f530 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20  and store.**    
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f550 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72   the result ther
1f560 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  e. The cursor is
1f570 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72   left open after
1f580 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f590 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e          returnin
1f5a0 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65  g.  This is like
1f5b0 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70   SRT_Table excep
1f5c0 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20  t that.**       
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1f5e0 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75  is destination u
1f5f0 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ses OP_OpenEphem
1f600 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a  eral to create.*
1f610 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f620 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20        the table 
1f630 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  first..**.**    
1f640 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1f650 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72   Generate a co-r
1f660 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75  outine that retu
1f670 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66  rns a new row of
1f680 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f690 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20          results 
1f6a0 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20  each time it is 
1f6b0 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e  invoked.  The en
1f6c0 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20  try point.**    
1f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6e0 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69   of the co-routi
1f6f0 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ne is stored in 
1f700 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
1f710 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20  iSDParm.**      
1f720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1f730 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  nd the result ro
1f740 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70  w is stored in p
1f750 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69  Dest->nDest regi
1f760 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20  sters.**        
1f770 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1f780 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74  rting with pDest
1f790 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  ->iSdst..**.**  
1f7a0 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20     SRT_Table    
1f7b0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1f7c0 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   in temporary ta
1f7d0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1f7e0 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46  rm..**     SRT_F
1f7f0 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20  ifo        This 
1f800 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65  is like SRT_Ephe
1f810 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74  mTab except that
1f820 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20   the table.**   
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f840 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20    is assumed to 
1f850 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e  already be open.
1f860 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a    SRT_Fifo has.*
1f870 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f880 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69        the additi
1f890 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66  onal property of
1f8a0 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69   being able to i
1f8b0 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  gnore.**        
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1f8d0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1f8e0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1f8f0 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72  DistFifo    Stor
1f900 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74  e results in a t
1f910 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1f920 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1f930 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f940 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75        But also u
1f950 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  se temporary tab
1f960 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1f970 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20  m+1 as.**       
1f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20                a 
1f990 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72  record of all pr
1f9a0 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20  ior results and 
1f9b0 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69  ignore any dupli
1f9c0 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  cate.**         
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73              rows
1f9e0 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20  .  Name means:  
1f9f0 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e  "Distinct Fifo".
1fa00 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51  .**.**     SRT_Q
1fa10 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65  ueue       Store
1fa20 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
1fa30 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
1fa40 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c  ->iSDParm (reall
1fa50 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  y.**            
1fa60 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65           an inde
1fa70 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65  x).  Append a se
1fa80 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f  quence number so
1fa90 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65   that all entrie
1faa0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1fab0 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73           are dis
1fac0 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tinct..**.**    
1fad0 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
1fae0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1faf0 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1fb00 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1fb10 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20  only if.**      
1fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1fb30 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68  he same record h
1fb40 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74  as never been st
1fb50 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68  ored before.  Th
1fb60 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1fb70 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61           index a
1fb80 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  t pDest->iSDParm
1fb90 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f  +1 hold all prio
1fba0 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65  r stores..*/.#de
1fbb0 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20  fine SRT_Union  
1fbc0 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72        1  /* Stor
1fbd0 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73  e result as keys
1fbe0 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1fbf0 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65  #define SRT_Exce
1fc00 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52  pt       2  /* R
1fc10 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f  emove result fro
1fc20 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20  m a UNION index 
1fc30 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1fc40 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f  xists       3  /
1fc50 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65  * Store 1 if the
1fc60 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65   result is not e
1fc70 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
1fc80 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
1fc90 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61   4  /* Do not sa
1fca0 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ve the results a
1fcb0 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  nywhere */.#defi
1fcc0 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20  ne SRT_Fifo     
1fcd0 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20      5  /* Store 
1fce0 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1fcf0 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1fd00 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
1fd10 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20  e SRT_DistFifo  
1fd20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52     6  /* Like SR
1fd30 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71  T_Fifo, but uniq
1fd40 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
1fd50 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51  */.#define SRT_Q
1fd60 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f  ueue        7  /
1fd70 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
1fd80 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64  n an queue */.#d
1fd90 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75  efine SRT_DistQu
1fda0 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b  eue    8  /* Lik
1fdb0 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74  e SRT_Queue, but
1fdc0 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
1fdd0 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20  only */../* The 
1fde0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
1fdf0 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61  is ignored for a
1fe00 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
1fe10 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72  */.#define Ignor
1fe20 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28  ableOrderby(X) (
1fe30 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f  (X->eDest)<=SRT_
1fe40 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66  DistQueue)..#def
1fe50 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20  ine SRT_Output  
1fe60 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75       9  /* Outpu
1fe70 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65  t each row of re
1fe80 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
1fe90 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1fea0 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  10  /* Store res
1feb0 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  ult in a memory 
1fec0 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cell */.#define 
1fed0 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
1fee0 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  11  /* Store res
1fef0 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20  ults as keys in 
1ff00 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
1ff10 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ine SRT_EphemTab
1ff20 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74      12  /* Creat
1ff30 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20  e transient tab 
1ff40 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53  and store like S
1ff50 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66  RT_Table */.#def
1ff60 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e  ine SRT_Coroutin
1ff70 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72  e   13  /* Gener
1ff80 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ate a single row
1ff90 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1ffa0 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20  efine SRT_Table 
1ffb0 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f        14  /* Sto
1ffc0 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1ffd0 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1ffe0 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a  tic rowid */../*
1fff0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
20000 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64  of this object d
20010 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74  escribes where t
20020 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73  o put of the res
20030 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c  ults of.** a SEL
20040 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
20050 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  /.struct SelectD
20060 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74  est {.  u8 eDest
20070 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
20080 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f  How to dispose o
20090 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20  f the results.  
200a0 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76  On of SRT_* abov
200b0 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50  e. */.  int iSDP
200c0 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  arm;         /* 
200d0 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64  A parameter used
200e0 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69   by the eDest di
200f0 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f  sposal method */
20100 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20  .  int iSdst;   
20110 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
20120 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
20130 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
20140 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
20150 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
20160 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
20170 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ers allocated */
20180 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53 64 73  .  char *zAffSds
20190 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  t;      /* Affin
201a0 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44  ity used when eD
201b0 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a  est==SRT_Set */.
201c0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
201d0 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f  erBy;  /* Key co
201e0 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75  lumns for SRT_Qu
201f0 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74  eue and SRT_Dist
20200 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  Queue */.};../*.
20210 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67  ** During code g
20220 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61  eneration of sta
20230 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20  tements that do 
20240 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54  inserts into AUT
20250 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61  OINCREMENT.** ta
20260 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  bles, the follow
20270 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
20280 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
20290 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49  he Table.u.autoI
202a0 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  nc.p.** pointer 
202b0 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72  of each autoincr
202c0 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72  ement table to r
202d0 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20  ecord some side 
202e0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
202f0 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e  .** the code gen
20300 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57  erator needs.  W
20310 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70  e have to keep p
20320 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63  er-table autoinc
20330 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d  rement.** inform
20340 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e  ation in case in
20350 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77  serts are done w
20360 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20  ithin triggers. 
20370 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   Triggers do not
20380 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f  .** normally coo
20390 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63  rdinate their ac
203a0 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65  tivities, but we
203b0 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72   do need to coor
203c0 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f  dinate the.** lo
203d0 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67  ading and saving
203e0 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   of autoincremen
203f0 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  t information..*
20400 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  /.struct Autoinc
20410 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63  Info {.  Autoinc
20420 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f  Info *pNext;   /
20430 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63  * Next info bloc
20440 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74  k in a list of t
20450 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62  hem all */.  Tab
20460 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
20470 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73     /* Table this
20480 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65   info block refe
20490 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69  rs to */.  int i
204a0 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
204b0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c   /* Index in sql
204c0 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61  ite3.aDb[] of da
204d0 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70  tabase holding p
204e0 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  Tab */.  int reg
204f0 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ctr;           /
20500 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
20510 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f  r holding the ro
20520 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d  wid counter */.}
20530 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  ;../*.** At leas
20540 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
20550 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
20560 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
20570 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a  ated for each.**
20580 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
20590 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
205a0 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
205b0 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
205c0 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
205d0 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
205e0 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
205f0 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
20600 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
20610 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
20620 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
20630 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
20640 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
20650 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
20660 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
20670 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
20680 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
20690 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
206a0 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
206b0 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
206c0 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
206d0 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
206e0 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
206f0 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
20700 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
20710 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
20720 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
20730 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
20740 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
20750 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
20760 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
20770 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
20780 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
20790 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
207a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
207b0 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
207c0 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
207d0 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
207e0 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
207f0 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
20800 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
20810 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
20820 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a  sult of INSERT.*
20830 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
20840 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
20850 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
20860 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
20870 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
20880 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
20890 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
208a0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
208b0 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
208c0 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
208d0 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
208e0 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
208f0 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
20900 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
20910 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
20920 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
20930 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
20940 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
20950 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
20960 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
20970 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
20980 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
20990 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
209a0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
209b0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
209c0 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
209d0 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
209e0 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
209f0 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
20a00 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
20a10 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
20a20 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
20a30 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
20a40 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
20a50 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
20a60 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
20a70 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
20a80 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
20a90 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
20aa0 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
20ab0 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
20ac0 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
20ad0 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
20ae0 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
20af0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
20b00 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
20b10 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
20b20 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
20b30 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
20b40 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
20b50 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
20b60 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
20b70 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
20b80 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
20b90 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
20ba0 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
20bb0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
20bc0 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
20bd0 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
20be0 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
20bf0 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
20c00 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
20c10 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
20c20 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
20c30 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
20c40 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
20c50 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
20c60 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
20c70 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
20c80 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
20c90 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
20ca0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
20cb0 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
20cc0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
20cd0 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
20ce0 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
20cf0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
20d00 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
20d10 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
20d20 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
20d30 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
20d40 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
20d50 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
20d60 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
20d70 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
20d80 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
20d90 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
20da0 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
20db0 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
20dc0 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
20dd0 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
20de0 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
20df0 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
20e00 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
20e10 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
20e20 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
20e30 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
20e40 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
20e50 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
20e60 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
20e70 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
20e80 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
20e90 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
20ea0 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
20eb0 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
20ec0 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
20ed0 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65  cache.** feature
20ee0 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
20ef0 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
20f00 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
20f10 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
20f20 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
20f30 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
20f40 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
20f50 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
20f60 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
20f70 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
20f80 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
20f90 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
20fa0 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
20fb0 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
20fc0 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
20fd0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
20fe0 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
20ff0 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
21000 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
21010 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
21020 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
21030 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
21040 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
21050 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
21060 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
21070 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
21080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21090 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
210a0 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
210b0 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
210c0 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
210d0 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
210e0 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
210f0 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
21100 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
21110 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
21120 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
21130 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
21140 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
21150 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
21160 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
21170 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
21180 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
21190 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
211a0 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
211b0 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
211c0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
211d0 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
211e0 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
211f0 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
21200 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
21210 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
21220 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
21230 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
21240 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
21250 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
21260 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
21270 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
21280 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
21290 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
212a0 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
212b0 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
212c0 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43  ry() */.  u8 okC
212d0 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f  onstFactor;    /
212e0 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f  * OK to factor o
212f0 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  ut constants */.
21300 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b    u8 disableLook
21310 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72  aside; /* Number
21320 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73   of times lookas
21330 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  ide has been dis
21340 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 64 69  abled */.  u8 di
21350 73 61 62 6c 65 56 74 61 62 3b 20 20 20 20 20 20  sableVtab;      
21360 2f 2a 20 44 69 73 61 62 6c 65 20 61 6c 6c 20 76  /* Disable all v
21370 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 66 6f  irtual tables fo
21380 72 20 74 68 69 73 20 70 61 72 73 65 20 2a 2f 0a  r this parse */.
21390 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b    int nRangeReg;
213a0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
213b0 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  f the temporary 
213c0 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
213d0 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65  /.  int iRangeRe
213e0 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73  g;       /* Firs
213f0 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65  t register in te
21400 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
21410 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
21420 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
21430 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
21440 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  rors seen */.  i
21450 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20  nt nTab;        
21460 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21470 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f   previously allo
21480 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f  cated VDBE curso
21490 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  rs */.  int nMem
214a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
214b0 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
214c0 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66   cells used so f
214d0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70  ar */.  int szOp
214e0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20  Alloc;       /* 
214f0 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  Bytes of memory 
21500 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
21510 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
21520 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62  /.  int iSelfTab
21530 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c  ;        /* Tabl
21540 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
21550 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78  h an index on ex
21560 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 0a  pr, or negative.
21570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21580 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
21590 20 62 61 73 65 20 72 65 67 69 73 74 65 72 20 64   base register d
215a0 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73  uring check-cons
215b0 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20  traint eval */. 
215c0 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20   int nLabel;    
215d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 2a 6e 65        /* The *ne
215e0 67 61 74 69 76 65 2a 20 6f 66 20 74 68 65 20 6e  gative* of the n
215f0 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20  umber of labels 
21600 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  used */.  int nL
21610 61 62 65 6c 41 6c 6c 6f 63 3b 20 20 20 20 20 2f  abelAlloc;     /
21620 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74  * Number of slot
21630 73 20 69 6e 20 61 4c 61 62 65 6c 20 2a 2f 0a 20  s in aLabel */. 
21640 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20   int *aLabel;   
21650 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74        /* Space t
21660 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c  o hold the label
21670 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
21680 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43  *pConstExpr;/* C
21690 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
216a0 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63  ons */.  Token c
216b0 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a  onstraintName;/*
216c0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
216d0 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c  straint currentl
216e0 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a  y being parsed *
216f0 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74  /.  yDbMask writ
21700 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72  eMask;   /* Star
21710 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  t a write transa
21720 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64  ction on these d
21730 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44  atabases */.  yD
21740 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b  bMask cookieMask
21750 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66  ;  /* Bitmask of
21760 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64   schema verified
21770 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
21780 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20  int regRowid;   
21790 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
217a0 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f   holding rowid o
217b0 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  f CREATE TABLE e
217c0 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ntry */.  int re
217d0 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f  gRoot;         /
217e0 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
217f0 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  ng root page num
21800 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65  ber for new obje
21810 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  cts */.  int nMa
21820 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  xArg;         /*
21830 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64   Max args passed
21840 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
21850 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d  n by sub-program
21860 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63   */.  int nSelec
21870 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  t;         /* Nu
21880 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73  mber of SELECT s
21890 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72 20 66 6f  tmts. Counter fo
218a0 72 20 53 65 6c 65 63 74 2e 73 65 6c 49 64 20 2a  r Select.selId *
218b0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
218c0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
218d0 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
218e0 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
218f0 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
21900 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
21910 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
21920 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
21930 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
21940 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
21950 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
21960 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
21970 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
21980 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
21990 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
219a0 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ers */.  Parse *
219b0 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
219c0 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
219d0 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
219e0 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
219f0 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
21a00 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
21a10 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
21a20 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
21a30 20 50 61 72 73 65 20 2a 70 50 61 72 65 6e 74 50   Parse *pParentP
21a40 61 72 73 65 3b 20 2f 2a 20 50 61 72 65 6e 74 20  arse; /* Parent 
21a50 70 61 72 73 65 72 20 69 66 20 74 68 69 73 20 70  parser if this p
21a60 61 72 73 65 72 20 69 73 20 6e 65 73 74 65 64 20  arser is nested 
21a70 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54  */.  int addrCrT
21a80 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64  ab;       /* Add
21a90 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74  ress of OP_Creat
21aa0 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e  eBtree opcode on
21ab0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
21ac0 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f  .  u32 nQueryLoo
21ad0 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e  p;      /* Est n
21ae0 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69  umber of iterati
21af0 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28  ons of a query (
21b00 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20  10*log2(N)) */. 
21b10 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20   u32 oldmask;   
21b20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
21b30 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   old.* columns r
21b40 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
21b50 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20  32 newmask;     
21b60 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e      /* Mask of n
21b70 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ew.* columns ref
21b80 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20  erenced */.  u8 
21b90 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20  eTriggerOp;     
21ba0 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20    /* TK_UPDATE, 
21bb0 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f  TK_INSERT or TK_
21bc0 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65  DELETE */.  u8 e
21bd0 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  Orconf;         
21be0 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
21bf0 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66  ONFLICT policy f
21c00 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73  or trigger steps
21c10 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65   */.  u8 disable
21c20 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72  Triggers;  /* Tr
21c30 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72  ue to disable tr
21c40 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a  iggers */..  /**
21c50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c90 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69  ********.  ** Fi
21ca0 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74 20  elds above must 
21cb0 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
21cc0 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69 65  o zero.  The fie
21cd0 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c  lds that follow,
21ce0 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68  .  ** down to th
21cf0 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
21d00 68 65 20 72 65 63 75 72 73 69 76 65 20 73 65 63  he recursive sec
21d10 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65  tion, do not nee
21d20 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69  d to be.  ** ini
21d30 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65 79  tialized as they
21d40 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65 66   will be set bef
21d50 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e 20  ore being used. 
21d60 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69 73   The boundary is
21d70 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64  .  ** determined
21d80 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61 72   by offsetof(Par
21d90 73 65 2c 61 54 65 6d 70 52 65 67 29 2e 0a 20 20  se,aTempReg)..  
21da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21db0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21de0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69  **********/..  i
21df0 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20  nt aTempReg[8]; 
21e00 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e         /* Holdin
21e10 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f  g area for tempo
21e20 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a  rary registers *
21e30 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54  /.  Token sNameT
21e40 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54  oken;       /* T
21e50 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c  oken with unqual
21e60 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a  ified schema obj
21e70 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f  ect name */..  /
21e80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21e90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ec0 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62  ********.  ** Ab
21ed0 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  ove is constant 
21ee0 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f  between recursio
21ef0 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65  ns.  Below is re
21f00 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61  set before and a
21f10 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72  fter.  ** each r
21f20 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62  ecursion.  The b
21f30 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20  oundary between 
21f40 74 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e  these two region
21f50 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a  s is determined.
21f60 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65    ** using offse
21f70 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54  tof(Parse,sLastT
21f80 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61  oken) so the sLa
21f90 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75  stToken field mu
21fa0 73 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66  st be the.  ** f
21fb0 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68  irst field in th
21fc0 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69  e recursive regi
21fd0 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
21fe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
22020 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f  .  Token sLastTo
22030 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ken;       /* Th
22040 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
22050 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e  sed */.  ynVar n
22060 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
22070 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
22080 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65  '?' variables se
22090 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f  en in the SQL so
220a0 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b   far */.  u8 iPk
220b0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
220c0 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45      /* ASC or DE
220d0 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50  SC for INTEGER P
220e0 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
220f0 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
22100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
22110 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
22120 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
22130 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23  n the query */.#
22140 69 66 20 21 28 64 65 66 69 6e 65 64 28 53 51 4c  if !(defined(SQL
22150 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
22160 54 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e 65  TABLE) && define
22170 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  d(SQLITE_OMIT_AL
22180 54 45 52 54 41 42 4c 45 29 29 0a 20 20 75 38 20  TERTABLE)).  u8 
22190 65 50 61 72 73 65 4d 6f 64 65 3b 20 20 20 20 20  eParseMode;     
221a0 20 20 20 20 20 20 20 2f 2a 20 50 41 52 53 45 5f         /* PARSE_
221b0 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74 61 6e  MODE_XXX constan
221c0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
221d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
221e0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
221f0 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20  nt nVtabLock;   
22200 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
22210 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61  er of virtual ta
22220 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a  bles to lock */.
22230 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65  #endif.  int nHe
22240 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
22250 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
22260 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20   tree height of 
22270 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65  current sub-sele
22280 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ct */.#ifndef SQ
22290 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
222a0 4e 0a 20 20 69 6e 74 20 61 64 64 72 45 78 70 6c  N.  int addrExpl
222b0 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ain;          /*
222c0 20 41 64 64 72 65 73 73 20 6f 66 20 63 75 72 72   Address of curr
222d0 65 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e 20 6f  ent OP_Explain o
222e0 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  pcode */.#endif.
222f0 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b    VList *pVList;
22300 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
22310 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76  apping between v
22320 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e  ariable names an
22330 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56  d numbers */.  V
22340 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
22350 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
22360 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
22370 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
22380 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
22390 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
223a0 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
223b0 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
223c0 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
223d0 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
223e0 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
223f0 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
22400 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
22410 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
22420 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 77 49  /.  Index *pNewI
22430 6e 64 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  ndex;         /*
22440 20 41 6e 20 69 6e 64 65 78 20 62 65 69 6e 67 20   An index being 
22450 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43  constructed by C
22460 52 45 41 54 45 20 49 4e 44 45 58 2e 0a 20 20 20  REATE INDEX..   
22470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22480 20 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73 6f           ** Also
22490 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 72 65   used to hold re
224a0 64 75 6e 64 61 6e 74 20 55 4e 49 51 55 45 20 63  dundant UNIQUE c
224b0 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20 20 20 20  onstraints.     
224c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224d0 20 20 20 20 20 20 20 2a 2a 20 64 75 72 69 6e 67         ** during
224e0 20 61 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e   a RENAME COLUMN
224f0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
22500 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20  NewTrigger;     
22510 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72  /* Trigger under
22520 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20   construct by a 
22530 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a  CREATE TRIGGER *
22540 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
22550 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a  zAuthContext; /*
22560 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74   The 6th paramet
22570 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20  er to db->xAuth 
22580 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66  callbacks */.#if
22590 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
225a0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
225b0 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20  Token sArg;     
225c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
225d0 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20  plete text of a 
225e0 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20  module argument 
225f0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56  */.  Table **apV
22600 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f  tabLock;       /
22610 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72  * Pointer to vir
22620 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64  tual tables need
22630 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23  ing locking */.#
22640 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70  endif.  Table *p
22650 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20  ZombieTab;      
22660 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62    /* List of Tab
22670 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65  le objects to de
22680 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20  lete after code 
22690 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  gen */.  Trigger
226a0 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67  Prg *pTriggerPrg
226b0 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73  ;  /* Linked lis
226c0 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67  t of coded trigg
226d0 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ers */.  With *p
226e0 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
226f0 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49     /* Current WI
22700 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
22710 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  LL */.  With *pW
22720 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20  ithToFree;      
22730 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57    /* Free this W
22740 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68  ITH object at th
22750 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72  e end of the par
22760 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  se */.#ifndef SQ
22770 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
22780 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65 54 6f 6b  ABLE.  RenameTok
22790 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20  en *pRename;    
227a0 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75 62 6a 65   /* Tokens subje
227b0 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e 67 20 62  ct to renaming b
227c0 79 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f  y ALTER TABLE */
227d0 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 64 65 66  .#endif.};..#def
227e0 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 4e  ine PARSE_MODE_N
227f0 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 30 0a 23  ORMAL        0.#
22800 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44  define PARSE_MOD
22810 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 20  E_DECLARE_VTAB  
22820 31 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  1.#define PARSE_
22830 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55  MODE_RENAME_COLU
22840 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20 50 41 52  MN 2.#define PAR
22850 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 54  SE_MODE_RENAME_T
22860 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a 2a 20 53  ABLE  3../*.** S
22870 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72  izes and pointer
22880 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72  s of various par
22890 74 73 20 6f 66 20 74 68 65 20 50 61 72 73 65 20  ts of the Parse 
228a0 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69  object..*/.#defi
228b0 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20  ne PARSE_HDR_SZ 
228c0 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61  offsetof(Parse,a
228d0 54 65 6d 70 52 65 67 29 20 2f 2a 20 52 65 63 75  TempReg) /* Recu
228e0 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61  rsive part w/o a
228f0 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69  ColCache*/.#defi
22900 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52 53 45  ne PARSE_RECURSE
22910 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72  _SZ offsetof(Par
22920 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20  se,sLastToken)  
22930 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70    /* Recursive p
22940 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50  art */.#define P
22950 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69  ARSE_TAIL_SZ (si
22960 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53  zeof(Parse)-PARS
22970 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a  E_RECURSE_SZ) /*
22980 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70   Non-recursive p
22990 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50  art */.#define P
229a0 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28  ARSE_TAIL(X) (((
229b0 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45  char*)(X))+PARSE
229c0 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a  _RECURSE_SZ)  /*
229d0 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c   Pointer to tail
229e0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72   */../*.** Retur
229f0 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e  n true if curren
22a00 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71  tly inside an sq
22a10 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
22a20 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69  ab() call..*/.#i
22a30 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
22a40 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
22a50 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
22a60 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a  RE_VTAB 0.#else.
22a70 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
22a80 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73  LARE_VTAB (pPars
22a90 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3d 3d 50  e->eParseMode==P
22aa0 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52  ARSE_MODE_DECLAR
22ab0 45 5f 56 54 41 42 29 0a 23 65 6e 64 69 66 0a 0a  E_VTAB).#endif..
22ac0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
22ad0 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
22ae0 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  LE).  #define IN
22af0 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 30  _RENAME_OBJECT 0
22b00 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
22b10 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43   IN_RENAME_OBJEC
22b20 54 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73  T (pParse->ePars
22b30 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f 4d 4f 44  eMode>=PARSE_MOD
22b40 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29  E_RENAME_COLUMN)
22b50 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
22b60 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22b70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20 26  _VIRTUALTABLE) &
22b80 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
22b90 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
22ba0 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 53  ).  #define IN_S
22bb0 50 45 43 49 41 4c 5f 50 41 52 53 45 20 30 0a 23  PECIAL_PARSE 0.#
22bc0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
22bd0 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20  N_SPECIAL_PARSE 
22be0 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d  (pParse->eParseM
22bf0 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f 44 45 5f  ode!=PARSE_MODE_
22c00 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69 66 0a 0a  NORMAL).#endif..
22c10 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
22c20 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
22c30 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
22c40 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
22c50 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
22c60 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
22c70 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
22c80 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
22c90 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
22ca0 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
22cb0 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
22cc0 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
22cd0 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
22ce0 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
22cf0 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
22d00 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
22d10 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
22d20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
22d30 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
22d40 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
22d50 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
22d60 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
22d70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a  s opcodes..**.**
22d80 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
22d90 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
22da0 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
22db0 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41    OPFLAG_LENGTHA
22dc0 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  RG    == SQLITE_
22dd0 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20  FUNC_LENGTH.**  
22de0 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41    OPFLAG_TYPEOFA
22df0 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  RG    == SQLITE_
22e00 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20  FUNC_TYPEOF.**  
22e10 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52    OPFLAG_BULKCSR
22e20 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 42        == BTREE_B
22e30 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50  ULKLOAD.**    OP
22e40 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20  FLAG_SEEKEQ     
22e50 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f    == BTREE_SEEK_
22e60 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  EQ.**    OPFLAG_
22e70 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d 20  FORDELETE    == 
22e80 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a  BTREE_FORDELETE.
22e90 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41 56  **    OPFLAG_SAV
22ea0 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52  EPOSITION == BTR
22eb0 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a  EE_SAVEPOSITION.
22ec0 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55 58  **    OPFLAG_AUX
22ed0 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52  DELETE    == BTR
22ee0 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a  EE_AUXDELETE.*/.
22ef0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
22f00 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30  CHANGE       0x0
22f10 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72  1    /* OP_Inser
22f20 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  t: Set to update
22f30 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a   db->nChange */.
22f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f60 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65       /* Also use
22f70 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29  d in P2 (not P5)
22f80 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f   of OP_Delete */
22f90 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22fa0 4e 4f 43 48 4e 47 20 20 20 20 20 20 20 20 30 78  NOCHNG        0x
22fb0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56 43 6f 6c  01    /* OP_VCol
22fc0 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20 66 6f 72  umn nochange for
22fd0 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
22fe0 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20  ne OPFLAG_EPHEM 
22ff0 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
23000 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70  /* OP_Column: Ep
23010 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69  hemeral output i
23020 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  s ok */.#define 
23030 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
23040 20 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20       0x20    /* 
23050 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
23060 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
23070 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
23080 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
23090 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
230a0 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
230b0 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
230c0 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
230d0 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
230e0 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
230f0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
23100 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
23110 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
23120 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
23130 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
23140 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
23150 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
23160 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20  AG_ISNOOP       
23170 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44   0x40    /* OP_D
23180 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75  elete does pre-u
23190 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20  pdate-hook only 
231a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
231b0 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
231c0 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
231d0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
231e0 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
231f0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
23200 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
23210 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
23220 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
23230 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
23240 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
23250 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
23260 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
23270 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
23280 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
23290 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
232a0 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
232b0 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f   OP_Open** curso
232c0 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f  r uses EQ seek o
232d0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nly */.#define O
232e0 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20  PFLAG_FORDELETE 
232f0 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f      0x08    /* O
23300 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73  P_Open should us
23310 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  e BTREE_FORDELET
23320 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
23330 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
23340 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20    0x10    /* P2 
23350 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
23360 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
23370 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
23380 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
23390 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
233a0 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
233b0 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
233c0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53  #define OPFLAG_S
233d0 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30  AVEPOSITION  0x0
233e0 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  2    /* OP_Delet
233f0 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63  e/Insert: save c
23400 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65  ursor pos */.#de
23410 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44  fine OPFLAG_AUXD
23420 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20 20  ELETE     0x04  
23430 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20    /* OP_Delete: 
23440 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54  index in a DELET
23450 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  E op */.#define 
23460 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41  OPFLAG_NOCHNG_MA
23470 47 49 43 20 20 30 78 36 64 20 20 20 20 2f 2a 20  GIC  0x6d    /* 
23480 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 73  OP_MakeRecord: s
23490 65 72 69 61 6c 74 79 70 65 20 31 30 20 69 73 20  erialtype 10 is 
234a0 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  ok */../*. * Eac
234b0 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
234c0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
234d0 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
234e0 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
234f0 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
23500 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f  rigger.. *. * Po
23510 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
23520 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
23530 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
23540 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
23550 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
23560 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
23570 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
23580 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
23590 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20  esents the. *   
235a0 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
235b0 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
235c0 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
235d0 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
235e0 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
235f0 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
23600 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
23610 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
23620 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
23630 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
23640 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
23650 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
23660 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
23670 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
23680 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
23690 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
236a0 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
236b0 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
236c0 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
236d0 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
236e0 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
236f0 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
23700 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
23710 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
23720 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
23730 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
23740 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
23750 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
23760 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
23770 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
23780 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
23790 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
237a0 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
237b0 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
237c0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
237d0 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
237e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
237f0 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
23800 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
23810 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
23820 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
23830 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
23840 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
23850 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
23860 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
23870 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
23880 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
23890 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
238a0 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
238b0 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
238c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
238d0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
238e0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
238f0 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
23900 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
23910 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
23920 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
23930 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
23940 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
23950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23960 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
23970 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
23980 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
23990 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
239a0 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
239b0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
239c0 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
239d0 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
239e0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
239f0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
23a00 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
23a10 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
23a20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
23a30 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
23a40 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
23a50 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
23a60 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
23a70 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
23a80 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
23a90 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
23aa0 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
23ab0 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
23ac0 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
23ad0 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
23ae0 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
23af0 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
23b00 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ich..**.** If th
23b10 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
23b20 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
23b30 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
23b40 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
23b50 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
23b60 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
23b70 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
23b80 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
23b90 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
23ba0 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
23bb0 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
23bc0 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
23bd0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
23be0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
23bf0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
23c00 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
23c10 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
23c20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
23c30 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
23c40 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20   *. * Instances 
23c50 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
23c60 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64  rStep are stored
23c70 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e   in a singly lin
23c80 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64  ked list (linked
23c90 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70  . * using the "p
23ca0 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65  Next" member) re
23cb0 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
23cc0 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
23cd0 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73  er of the. * ass
23ce0 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
23cf0 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
23d00 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
23d10 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
23d20 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
23d30 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
23d40 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
23d50 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70  m.. *. * The "op
23d60 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
23d70 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
23d80 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
23d90 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
23da0 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
23db0 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
23dc0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
23dd0 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
23de0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
23df0 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  he. * value of "
23e00 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
23e10 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
23e20 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
23e30 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
23e40 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
23e50 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
23e60 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
23e70 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
23e80 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
23e90 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
23ea0 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
23eb0 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
23ec0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
23ed0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
23ee0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
23ef0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
23f00 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
23f10 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
23f20 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
23f30 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
23f40 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
23f50 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
23f60 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
23f70 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
23f80 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
23f90 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
23fa0 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
23fb0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
23fc0 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
23fd0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
23fe0 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
23ff0 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
24000 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
24010 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
24020 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
24030 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
24040 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
24050 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
24060 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
24070 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a   TK_DELETE). * z
24080 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
24090 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
240a0 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
240b0 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
240c0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
240d0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
240e0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
240f0 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
24100 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
24110 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
24120 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ULL.. *. * (op =
24130 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
24140 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
24150 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
24160 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
24170 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  e.. * pWhere    
24180 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
24190 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
241a0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
241b0 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
241c0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
241d0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
241e0 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
241f0 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
24200 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
24210 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
24220 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
24230 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
24240 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
24250 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
24260 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
24270 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
24280 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
24290 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20  .. *. */.struct 
242a0 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
242b0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
242c0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
242d0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
242e0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
242f0 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
24300 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
24310 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
24320 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
24330 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
24340 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
24350 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
24360 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
24370 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
24380 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
24390 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48   statement or RH
243a0 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
243b0 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
243c0 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20   char *zTarget; 
243d0 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
243e0 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
243f0 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
24400 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
24410 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
24420 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
24430 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
24440 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
24450 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
24460 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
24470 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  e for UPDATE */.
24480 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
24490 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
244a0 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
244b0 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a 70  T */.  Upsert *p
244c0 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 55  Upsert;     /* U
244d0 70 73 65 72 74 20 63 6c 61 75 73 65 73 20 6f 6e  psert clauses on
244e0 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20   an INSERT */.  
244f0 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
24500 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
24510 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68 69   SQL text of thi
24520 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54  s command */.  T
24530 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
24540 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
24550 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
24560 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
24570 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
24580 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
24590 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
245a0 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
245b0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
245c0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
245d0 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
245e0 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  mation used by t
245f0 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a  he sqliteFix....
24600 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74  ** routines as t
24610 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72  hey walk the par
24620 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20  se tree to make 
24630 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e  database referen
24640 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e  ces.** explicit.
24650 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
24660 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
24670 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
24680 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
24690 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
246a0 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
246b0 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
246c0 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
246d0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
246e0 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
246f0 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
24700 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56  hema */.  int bV
24710 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a  arOnly;       /*
24720 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61   Check for varia
24730 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ble references o
24740 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nly */.  const c
24750 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
24760 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
24770 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
24780 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
24790 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
247a0 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
247b0 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
247c0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
247d0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
247e0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
247f0 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
24800 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
24810 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
24820 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
24830 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
24840 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
24850 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
24860 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
24870 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
24880 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
24890 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
248a0 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
248b0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
248c0 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72 20 7b  ct sqlite3_str {
248d0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
248e0 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
248f0 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
24900 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
24910 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
24920 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
24930 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
24940 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
24950 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c  r */.  u32  nAll
24960 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  oc;         /* A
24970 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61  mount of space a
24980 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78  llocated in zTex
24990 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c  t */.  u32  mxAl
249a0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  loc;        /* M
249b0 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61  aximum allowed a
249c0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f  llocation.  0 fo
249d0 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67  r no malloc usag
249e0 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61  e */.  u32  nCha
249f0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
24a00 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
24a10 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
24a20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20  u8   accError;  
24a30 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
24a40 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45 5f 54  OMEM or SQLITE_T
24a50 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20  OOBIG */.  u8   
24a60 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20  printfFlags;    
24a70 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  /* SQLITE_PRINTF
24a80 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a   flags below */.
24a90 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  };.#define SQLIT
24aa0 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
24ab0 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65 72  L 0x01  /* Inter
24ac0 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e  nal-use-only con
24ad0 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64 20  verters allowed 
24ae0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
24af0 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
24b00 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20 66    0x02  /* SQL f
24b10 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
24b20 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f  s to VXPrintf */
24b30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
24b40 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20  PRINTF_MALLOCED 
24b50 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0x04  /* True if
24b60 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63 61   xText is alloca
24b70 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64  ted space */..#d
24b80 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64  efine isMalloced
24b90 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69 6e  (X)  (((X)->prin
24ba0 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45  tfFlags & SQLITE
24bb0 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
24bc0 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20  )!=0).../*.** A 
24bd0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
24be0 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
24bf0 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65  d to communicate
24c00 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
24c10 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74  from sqlite3Init
24c20 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68   and OP_ParseSch
24c30 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c  ema into the sql
24c40 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
24c50 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
24c60 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  uct {.  sqlite3 
24c70 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
24c80 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e  he database bein
24c90 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
24ca0 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
24cb0 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20  sg;    /* Error 
24cc0 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68  message stored h
24cd0 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  ere */.  int iDb
24ce0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
24cf0 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62  0 for main datab
24d00 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50  ase.  1 for TEMP
24d10 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48  , 2.. for ATTACH
24d20 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ed */.  int rc; 
24d30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
24d40 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65  esult code store
24d50 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 33 32 20  d here */.  u32 
24d60 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20 20 20 20  mInitFlags;     
24d70 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  /* Flags control
24d80 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73 61  ling error messa
24d90 67 65 73 20 2a 2f 0a 20 20 75 33 32 20 6e 49 6e  ges */.  u32 nIn
24da0 69 74 52 6f 77 3b 20 20 20 20 20 20 20 2f 2a 20  itRow;       /* 
24db0 4e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 70  Number of rows p
24dc0 72 6f 63 65 73 73 65 64 20 2a 2f 0a 7d 20 49 6e  rocessed */.} In
24dd0 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41  itData;../*.** A
24de0 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
24df0 72 20 6d 49 6e 69 74 46 6c 61 67 73 0a 2a 2f 0a  r mInitFlags.*/.
24e00 23 64 65 66 69 6e 65 20 49 4e 49 54 46 4c 41 47  #define INITFLAG
24e10 5f 41 6c 74 65 72 54 61 62 6c 65 20 20 20 30 78  _AlterTable   0x
24e20 30 30 30 31 20 20 2f 2a 20 54 68 69 73 20 69 73  0001  /* This is
24e30 20 61 20 72 65 70 61 72 73 65 20 61 66 74 65 72   a reparse after
24e40 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a   ALTER TABLE */.
24e50 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65  ./*.** Structure
24e60 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62   containing glob
24e70 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  al configuration
24e80 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51   data for the SQ
24e90 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
24ea0 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
24eb0 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  re also contains
24ec0 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f   some state info
24ed0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
24ee0 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
24ef0 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61   {.  int bMemsta
24f00 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24f10 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
24f20 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20  o enable memory 
24f30 73 74 61 74 75 73 20 2a 2f 0a 20 20 75 38 20 62  status */.  u8 b
24f40 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20  CoreMutex;      
24f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24f60 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
24f70 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f  core mutexing */
24f80 0a 20 20 75 38 20 62 46 75 6c 6c 4d 75 74 65 78  .  u8 bFullMutex
24f90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24fa0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
24fb0 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65  enable full mute
24fc0 78 69 6e 67 20 2a 2f 0a 20 20 75 38 20 62 4f 70  xing */.  u8 bOp
24fd0 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20  enUri;          
24fe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
24ff0 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74  rue to interpret
25000 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52   filenames as UR
25010 49 73 20 2a 2f 0a 20 20 75 38 20 62 55 73 65 43  Is */.  u8 bUseC
25020 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  is;             
25030 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
25040 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65   covering indice
25050 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73  s for full-scans
25060 20 2a 2f 0a 20 20 75 38 20 62 53 6d 61 6c 6c 4d   */.  u8 bSmallM
25070 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  alloc;          
25080 20 20 20 20 20 20 20 20 2f 2a 20 41 76 6f 69 64          /* Avoid
25090 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c   large memory al
250a0 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20 74 72 75  locations if tru
250b0 65 20 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61  e */.  u8 bExtra
250c0 53 63 68 65 6d 61 43 68 65 63 6b 73 3b 20 20 20  SchemaChecks;   
250d0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69           /* Veri
250e0 66 79 20 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c  fy type,name,tbl
250f0 5f 6e 61 6d 65 20 69 6e 20 73 63 68 65 6d 61 20  _name in schema 
25100 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
25110 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
25120 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
25130 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
25140 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f  */.  int neverCo
25150 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20  rrupt;          
25160 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
25170 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c  se is always wel
25180 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e  l-formed */.  in
25190 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251b0 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
251c0 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
251d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
251e0 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
251f0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
25200 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
25210 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69  fer count */.  i
25220 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20  nt nStmtSpill;  
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25240 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c   /* Stmt-journal
25250 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74   spill-to-disk t
25260 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71  hreshold */.  sq
25270 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
25280 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  s m;            
25290 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  /* Low-level mem
252a0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
252b0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
252c0 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
252d0 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20  ods mutex;      
252e0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74  /* Low-level mut
252f0 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  ex interface */.
25300 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65    sqlite3_pcache
25310 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65  _methods2 pcache
25320 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c  2;  /* Low-level
25330 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65   page-cache inte
25340 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  rface */.  void 
25350 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20  *pHeap;         
25360 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25370 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61  Heap storage spa
25380 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61  ce */.  int nHea
25390 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
253a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
253b0 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a  e of pHeap[] */.
253c0 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52    int mnReq, mxR
253d0 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
253e0 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d      /* Min and m
253f0 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73  ax heap requests
25400 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69   sizes */.  sqli
25410 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70  te3_int64 szMmap
25420 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
25430 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65   mmap() space pe
25440 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20  r open file */. 
25450 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
25460 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  xMmap;          
25470 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61     /* Maximum va
25480 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a  lue for szMmap *
25490 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
254a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254b0 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
254c0 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
254d0 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254f0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
25500 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
25510 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
25520 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25530 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
25540 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
25550 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
25560 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25580 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
25590 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
255a0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
255b0 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
255c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
255d0 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
255e0 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
255f0 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20  /.  u32 szPma;  
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25610 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
25620 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65   Sorter PMA size
25630 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
25640 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
25650 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
25660 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
25670 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
25680 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
25690 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
256a0 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
256b0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
256c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
256d0 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
256e0 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
256f0 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
25700 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
25710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
25720 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
25730 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
25740 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
25750 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
25760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
25770 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
25780 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
25790 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
257a0 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
257b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
257c0 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
257d0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
257e0 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
257f0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
25800 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
25810 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
25820 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
25830 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
25840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25850 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
25860 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
25870 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
25880 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
25890 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
258a0 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
258b0 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
258c0 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
258d0 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
258e0 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
258f0 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
25900 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
25910 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
25920 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
25930 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
25940 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  og() */.#ifdef S
25950 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
25960 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
25970 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
25980 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
25990 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
259a0 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
259b0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
259c0 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
259d0 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
259e0 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
259f0 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
25a00 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
25a10 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
25a20 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
25a30 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
25a40 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
25a50 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
25a60 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
25a70 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
25a80 75 6e 73 69 67 6e 65 64 20 69 53 72 63 4c 69 6e  unsigned iSrcLin
25a90 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d  e,u8 eThis,u8 eM
25aa0 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  x);  /* Callback
25ab0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62   */.  void *pVdb
25ac0 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20  eBranchArg;     
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25af0 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
25b00 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  */.#endif.#ifdef
25b10 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44   SQLITE_ENABLE_D
25b20 45 53 45 52 49 41 4c 49 5a 45 0a 20 20 73 71 6c  ESERIALIZE.  sql
25b30 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 65 6d  ite3_int64 mxMem
25b40 64 62 53 69 7a 65 3b 20 20 20 20 20 20 20 20 2f  dbSize;        /
25b50 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 20 6d 65  * Default max me
25b60 6d 64 62 20 73 69 7a 65 20 2a 2f 0a 23 65 6e 64  mdb size */.#end
25b70 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
25b80 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 69  E_UNTESTABLE.  i
25b90 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61  nt (*xTestCallba
25ba0 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20  ck)(int);       
25bb0 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73   /* Invoked by s
25bc0 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29  qlite3FaultSim()
25bd0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
25be0 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74   bLocaltimeFault
25bf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
25c00 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c  * True to fail l
25c10 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73  ocaltime() calls
25c20 20 2a 2f 0a 20 20 69 6e 74 20 62 49 6e 74 65 72   */.  int bInter
25c30 6e 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 20 20 20  nalFunctions;   
25c40 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 72          /* Inter
25c50 6e 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  nal SQL function
25c60 73 20 61 72 65 20 76 69 73 69 62 6c 65 20 2a 2f  s are visible */
25c70 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65 73 65  .  int iOnceRese
25c80 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20 20 20  tThreshold;     
25c90 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20       /* When to 
25ca0 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f  reset OP_Once co
25cb0 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33 32 20  unters */.  u32 
25cc0 73 7a 53 6f 72 74 65 72 52 65 66 3b 20 20 20 20  szSorterRef;    
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25ce0 20 4d 69 6e 20 73 69 7a 65 20 69 6e 20 62 79 74   Min size in byt
25cf0 65 73 20 74 6f 20 75 73 65 20 73 6f 72 74 65 72  es to use sorter
25d00 2d 72 65 66 73 20 2a 2f 0a 20 20 75 6e 73 69 67  -refs */.  unsig
25d10 6e 65 64 20 69 6e 74 20 69 50 72 6e 67 53 65 65  ned int iPrngSee
25d20 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
25d30 41 6c 74 65 72 6e 61 74 69 76 65 20 66 69 78 65  Alternative fixe
25d40 64 20 73 65 65 64 20 66 6f 72 20 74 68 65 20 50  d seed for the P
25d50 52 4e 47 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  RNG */.};../*.**
25d60 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
25d70 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73  sed inside of as
25d80 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
25d90 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68  s to indicate th
25da0 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74  at.** the assert
25db0 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f   is only valid o
25dc0 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
25dd0 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65  database.  Inste
25de0 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ad of:.**.**    
25df0 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a   assert( X );.**
25e00 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a  .** One writes:.
25e10 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
25e20 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44  ( X || CORRUPT_D
25e30 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55  B );.**.** CORRU
25e40 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75  PT_DB is true du
25e50 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72  ring normal oper
25e60 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f  ation.  CORRUPT_
25e70 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69  DB does not indi
25e80 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65  cate.** that the
25e90 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66   database is def
25ea0 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c  initely corrupt,
25eb0 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69   only that it mi
25ec0 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a  ght be corrupt..
25ed0 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74  ** For most test
25ee0 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f   cases, CORRUPT_
25ef0 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c  DB is set to fal
25f00 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69  se using a speci
25f10 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  al.** sqlite3_te
25f20 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54  st_control().  T
25f30 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65  his enables asse
25f40 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
25f50 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e  to prove.** thin
25f60 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61  gs that are alwa
25f70 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c  ys true for well
25f80 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
25f90 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s..*/.#define CO
25fa0 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74  RRUPT_DB  (sqlit
25fb0 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f  e3Config.neverCo
25fc0 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  rrupt==0)../*.**
25fd0 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72   Context pointer
25fe0 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72   passed down thr
25ff0 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61  ough the tree-wa
26000 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61  lk..*/.struct Wa
26010 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  lker {.  Parse *
26020 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
26030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26040 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e     /* Parser con
26050 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20  text.  */.  int 
26060 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29  (*xExprCallback)
26070 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
26080 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63  ;     /* Callbac
26090 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  k for expression
260a0 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65  s */.  int (*xSe
260b0 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61  lectCallback)(Wa
260c0 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20  lker*,Select*); 
260d0 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
260e0 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f   SELECTs */.  vo
260f0 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  id (*xSelectCall
26100 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53  back2)(Walker*,S
26110 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e  elect*);/* Secon
26120 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  d callback for S
26130 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20  ELECTs */.  int 
26140 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20  walkerDepth;    
26150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26160 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
26170 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f  of subqueries */
26180 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20  .  u8 eCode;    
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
261b0 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69  A small processi
261c0 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  ng code */.  uni
261d0 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  on {            
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261f0 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20         /* Extra 
26200 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63  data for callbac
26210 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e  k */.    NameCon
26220 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20  text *pNC;      
26230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26240 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e     /* Naming con
26250 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  text */.    int 
26260 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
26270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26280 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74        /* A count
26290 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
262a0 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262c0 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20      /* A cursor 
262d0 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72  number */.    Sr
262e0 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
262f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26300 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20          /* FROM 
26310 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74  clause */.    st
26320 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70  ruct SrcCount *p
26330 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20  SrcCount;       
26340 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
26350 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72  ing column refer
26360 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72  ences */.    str
26370 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43  uct CCurHint *pC
26380 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20  CurHint;        
26390 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62         /* Used b
263a0 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74  y codeCursorHint
263b0 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61  () */.    int *a
263c0 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  iCol;           
263d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263e0 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66 20      /* array of 
263f0 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a  column indexes *
26400 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78  /.    struct Idx
26410 43 6f 76 65 72 20 2a 70 49 64 78 43 6f 76 65 72  Cover *pIdxCover
26420 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26430 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 69 6e 64  /* Check for ind
26440 65 78 20 63 6f 76 65 72 61 67 65 20 2a 2f 0a 20  ex coverage */. 
26450 20 20 20 73 74 72 75 63 74 20 49 64 78 45 78 70     struct IdxExp
26460 72 54 72 61 6e 73 20 2a 70 49 64 78 54 72 61 6e  rTrans *pIdxTran
26470 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
26480 43 6f 6e 76 65 72 74 20 69 64 78 65 64 20 65 78  Convert idxed ex
26490 70 72 20 74 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  pr to column */.
264a0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47      ExprList *pG
264b0 72 6f 75 70 42 79 3b 20 20 20 20 20 20 20 20 20  roupBy;         
264c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
264d0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
264e0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
264f0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
26500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26510 20 20 2f 2a 20 48 41 56 49 4e 47 20 74 6f 20 57    /* HAVING to W
26520 48 45 52 45 20 63 6c 61 75 73 65 20 63 74 78 20  HERE clause ctx 
26530 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57 69  */.    struct Wi
26540 6e 64 6f 77 52 65 77 72 69 74 65 20 2a 70 52 65  ndowRewrite *pRe
26550 77 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20  write;          
26560 20 2f 2a 20 57 69 6e 64 6f 77 20 72 65 77 72 69   /* Window rewri
26570 74 65 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  te context */.  
26580 20 20 73 74 72 75 63 74 20 57 68 65 72 65 43 6f    struct WhereCo
26590 6e 73 74 20 2a 70 43 6f 6e 73 74 3b 20 20 20 20  nst *pConst;    
265a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
265b0 48 45 52 45 20 63 6c 61 75 73 65 20 63 6f 6e 73  HERE clause cons
265c0 74 61 6e 74 73 20 2a 2f 0a 20 20 20 20 73 74 72  tants */.    str
265d0 75 63 74 20 52 65 6e 61 6d 65 43 74 78 20 2a 70  uct RenameCtx *p
265e0 52 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  Rename;         
265f0 20 20 20 20 20 20 20 2f 2a 20 52 45 4e 41 4d 45         /* RENAME
26600 20 43 4f 4c 55 4d 4e 20 63 6f 6e 74 65 78 74 20   COLUMN context 
26610 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
26620 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61   Forward declara
26630 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c  tions */.int sql
26640 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c  ite3WalkExpr(Wal
26650 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
26660 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
26670 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45  rList(Walker*, E
26680 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
26690 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
266a0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
266b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
266c0 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61  alkSelectExpr(Wa
266d0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
266e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
266f0 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65  SelectFrom(Walke
26700 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
26710 74 20 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c  t sqlite3ExprWal
26720 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45  kNoop(Walker*, E
26730 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
26740 65 33 53 65 6c 65 63 74 57 61 6c 6b 4e 6f 6f 70  e3SelectWalkNoop
26750 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
26760 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
26770 65 6c 65 63 74 57 61 6c 6b 46 61 69 6c 28 57 61  electWalkFail(Wa
26780 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
26790 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
267a0 45 42 55 47 0a 76 6f 69 64 20 73 71 6c 69 74 65  EBUG.void sqlite
267b0 33 53 65 6c 65 63 74 57 61 6c 6b 41 73 73 65 72  3SelectWalkAsser
267c0 74 32 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  t2(Walker*, Sele
267d0 63 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ct*);.#endif../*
267e0 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20  .** Return code 
267f0 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74  from the parse-t
26800 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d  ree walking prim
26810 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72  itives and their
26820 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a  .** callbacks..*
26830 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f  /.#define WRC_Co
26840 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a  ntinue    0   /*
26850 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69   Continue down i
26860 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a  nto children */.
26870 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e  #define WRC_Prun
26880 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f  e       1   /* O
26890 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74  mit children but
268a0 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e   continue walkin
268b0 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64  g siblings */.#d
268c0 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20  efine WRC_Abort 
268d0 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61        2   /* Aba
268e0 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61  ndon the tree wa
268f0 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  lk */../*.** An 
26900 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
26910 20 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65   structure repre
26920 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f  sents a set of o
26930 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a  ne or more CTEs.
26940 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ** (common table
26950 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72   expressions) cr
26960 65 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c  eated by a singl
26970 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a  e WITH clause..*
26980 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a  /.struct With {.
26990 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20    int nCte;     
269a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43    /* Number of C
269c0 54 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20  TEs in the WITH 
269d0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68  clause */.  With
269e0 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20   *pOuter;       
269f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
26a00 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63  ontaining WITH c
26a10 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a  lause, or NULL *
26a20 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b  /.  struct Cte {
26a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a40 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
26a50 43 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20  CTE in the WITH 
26a60 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20  clause.... */.  
26a70 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
26a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a90 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
26aa0 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70  s CTE */.    Exp
26ab0 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20  rList *pCols;   
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26ad0 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74  List of explicit
26ae0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f   column names, o
26af0 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65  r NULL */.    Se
26b00 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
26b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26b20 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
26b30 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
26b40 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
26b50 43 74 65 45 72 72 3b 20 20 20 20 20 20 20 20 20  CteErr;         
26b60 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
26b70 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72  age for circular
26b80 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
26b90 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66   } a[1];.};..#if
26ba0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
26bb0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
26bc0 63 65 20 6f 66 20 74 68 65 20 54 72 65 65 56 69  ce of the TreeVi
26bd0 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65  ew object is use
26be0 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74  d for printing t
26bf0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
26c00 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
26c10 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67   on sqlite3Debug
26c20 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61  Printf() using a
26c30 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e   tree-like view.
26c40 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56  .*/.struct TreeV
26c50 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76  iew {.  int iLev
26c60 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
26c70 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f  /* Which level o
26c80 66 20 74 68 65 20 74 72 65 65 20 77 65 20 61 72  f the tree we ar
26c90 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c  e on */.  u8  bL
26ca0 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20  ine[100];       
26cb0 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63    /* Draw vertic
26cc0 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69  al in column i i
26cd0 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72  f bLine[i] is tr
26ce0 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20  ue */.};.#endif 
26cf0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
26d00 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f  */../*.** This o
26d10 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 69 6e  bject is used in
26d20 20 76 61 72 69 6f 75 73 20 77 61 79 73 2c 20 6d   various ways, m
26d30 6f 73 74 20 28 62 75 74 20 6e 6f 74 20 61 6c 6c  ost (but not all
26d40 29 20 72 65 6c 61 74 65 64 20 74 6f 20 77 69 6e  ) related to win
26d50 64 6f 77 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  dow.** functions
26d60 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 31 29 20 41 20  ..**.**   (1) A 
26d70 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20  single instance 
26d80 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
26d90 65 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  e is attached to
26da0 20 74 68 65 0a 2a 2a 20 20 20 20 20 20 20 74 68   the.**       th
26db0 65 20 45 78 70 72 2e 79 2e 70 57 69 6e 20 66 69  e Expr.y.pWin fi
26dc0 65 6c 64 20 66 6f 72 20 65 61 63 68 20 77 69 6e  eld for each win
26dd0 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20  dow function in 
26de0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 72  an expression tr
26df0 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20 54 68 69  ee..**       Thi
26e00 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 74  s object holds t
26e10 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63  he information c
26e20 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
26e30 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a 2a 2a 20  OVER clause,.** 
26e40 20 20 20 20 20 20 70 6c 75 73 20 61 64 64 69 74        plus addit
26e50 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 73 65  ional fields use
26e60 64 20 64 75 72 69 6e 67 20 63 6f 64 65 20 67 65  d during code ge
26e70 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  neration..**.** 
26e80 20 20 28 32 29 20 41 6c 6c 20 77 69 6e 64 6f 77    (2) All window
26e90 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 61 20   functions in a 
26ea0 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 66 6f  single SELECT fo
26eb0 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74  rm a linked-list
26ec0 0a 2a 2a 20 20 20 20 20 20 20 61 74 74 61 63 68  .**       attach
26ed0 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70 57 69  ed to Select.pWi
26ee0 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f 77 2e 70  n.  The Window.p
26ef0 46 75 6e 63 20 61 6e 64 20 57 69 6e 64 6f 77 2e  Func and Window.
26f00 70 45 78 70 72 0a 2a 2a 20 20 20 20 20 20 20 66  pExpr.**       f
26f10 69 65 6c 64 73 20 70 6f 69 6e 74 20 62 61 63 6b  ields point back
26f20 20 74 6f 20 74 68 65 20 65 78 70 72 65 73 73 69   to the expressi
26f30 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 77  on that is the w
26f40 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 2e 0a  indow function..
26f50 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54 68 65 20  **.**   (3) The 
26f60 74 65 72 6d 73 20 6f 66 20 74 68 65 20 57 49 4e  terms of the WIN
26f70 44 4f 57 20 63 6c 61 75 73 65 20 6f 66 20 61 20  DOW clause of a 
26f80 53 45 4c 45 43 54 20 61 72 65 20 69 6e 73 74 61  SELECT are insta
26f90 6e 63 65 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20  nces of this.** 
26fa0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6f 6e 20        object on 
26fb0 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 61 74  a linked list at
26fc0 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74  tached to Select
26fd0 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a 2a 2a  .pWinDefn..**.**
26fe0 20 20 20 28 34 29 20 46 6f 72 20 61 6e 20 61 67     (4) For an ag
26ff0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
27000 20 77 69 74 68 20 61 20 46 49 4c 54 45 52 20 63   with a FILTER c
27010 6c 61 75 73 65 2c 20 61 6e 20 69 6e 73 74 61 6e  lause, an instan
27020 63 65 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 74  ce.**       of t
27030 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 73 74  his object is st
27040 6f 72 65 64 20 69 6e 20 45 78 70 72 2e 79 2e 70  ored in Expr.y.p
27050 57 69 6e 20 77 69 74 68 20 65 46 72 6d 54 79 70  Win with eFrmTyp
27060 65 20 73 65 74 20 74 6f 0a 2a 2a 20 20 20 20 20  e set to.**     
27070 20 20 54 4b 5f 46 49 4c 54 45 52 2e 20 49 6e 20    TK_FILTER. In 
27080 74 68 69 73 20 63 61 73 65 20 74 68 65 20 6f 6e  this case the on
27090 6c 79 20 66 69 65 6c 64 20 75 73 65 64 20 69 73  ly field used is
270a0 20 57 69 6e 64 6f 77 2e 70 46 69 6c 74 65 72 2e   Window.pFilter.
270b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 73 65 73 20  .**.** The uses 
270c0 28 31 29 20 61 6e 64 20 28 32 29 20 61 72 65 20  (1) and (2) are 
270d0 72 65 61 6c 6c 79 20 74 68 65 20 73 61 6d 65 20  really the same 
270e0 57 69 6e 64 6f 77 20 6f 62 6a 65 63 74 20 74 68  Window object th
270f0 61 74 20 6a 75 73 74 20 68 61 70 70 65 6e 73 0a  at just happens.
27100 2a 2a 20 74 6f 20 62 65 20 61 63 63 65 73 73 69  ** to be accessi
27110 62 6c 65 20 69 6e 20 74 77 6f 20 64 69 66 66 65  ble in two diffe
27120 72 65 6e 74 20 77 61 79 73 2e 20 20 55 73 65 20  rent ways.  Use 
27130 63 61 73 65 20 28 33 29 20 61 72 65 20 73 65 70  case (3) are sep
27140 61 72 61 74 65 20 6f 62 6a 65 63 74 73 2e 0a 2a  arate objects..*
27150 2f 0a 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20  /.struct Window 
27160 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
27170 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
27180 61 6d 65 20 6f 66 20 77 69 6e 64 6f 77 20 28 6d  ame of window (m
27190 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
271a0 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20   char *zBase;   
271b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
271c0 20 6f 66 20 62 61 73 65 20 77 69 6e 64 6f 77 20   of base window 
271d0 66 6f 72 20 63 68 61 69 6e 69 6e 67 20 28 6d 61  for chaining (ma
271e0 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20  y be NULL) */.  
271f0 45 78 70 72 4c 69 73 74 20 2a 70 50 61 72 74 69  ExprList *pParti
27200 74 69 6f 6e 3b 20 20 20 2f 2a 20 50 41 52 54 49  tion;   /* PARTI
27210 54 49 4f 4e 20 42 59 20 63 6c 61 75 73 65 20 2a  TION BY clause *
27220 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
27230 72 64 65 72 42 79 3b 20 20 20 20 20 2f 2a 20 4f  rderBy;     /* O
27240 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a  RDER BY clause *
27250 2f 0a 20 20 75 38 20 65 46 72 6d 54 79 70 65 3b  /.  u8 eFrmType;
27260 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
27270 4b 5f 52 41 4e 47 45 2c 20 54 4b 5f 47 52 4f 55  K_RANGE, TK_GROU
27280 50 53 2c 20 54 4b 5f 52 4f 57 53 2c 20 6f 72 20  PS, TK_ROWS, or 
27290 30 20 2a 2f 0a 20 20 75 38 20 65 53 74 61 72 74  0 */.  u8 eStart
272a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
272b0 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52  * UNBOUNDED, CUR
272c0 52 45 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20  RENT, PRECEDING 
272d0 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a  or FOLLOWING */.
272e0 20 20 75 38 20 65 45 6e 64 3b 20 20 20 20 20 20    u8 eEnd;      
272f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42            /* UNB
27300 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c  OUNDED, CURRENT,
27310 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f   PRECEDING or FO
27320 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20  LLOWING */.  u8 
27330 62 49 6d 70 6c 69 63 69 74 46 72 61 6d 65 3b 20  bImplicitFrame; 
27340 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
27350 66 72 61 6d 65 20 77 61 73 20 69 6d 70 6c 69 63  frame was implic
27360 69 74 6c 79 20 73 70 65 63 69 66 69 65 64 20 2a  itly specified *
27370 2f 0a 20 20 75 38 20 65 45 78 63 6c 75 64 65 3b  /.  u8 eExclude;
27380 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
27390 4b 5f 4e 4f 2c 20 54 4b 5f 43 55 52 52 45 4e 54  K_NO, TK_CURRENT
273a0 2c 20 54 4b 5f 54 49 45 53 2c 20 54 4b 5f 47 52  , TK_TIES, TK_GR
273b0 4f 55 50 2c 20 6f 72 20 30 20 2a 2f 0a 20 20 45  OUP, or 0 */.  E
273c0 78 70 72 20 2a 70 53 74 61 72 74 3b 20 20 20 20  xpr *pStart;    
273d0 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
273e0 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e  sion for "<expr>
273f0 20 50 52 45 43 45 44 49 4e 47 22 20 2a 2f 0a 20   PRECEDING" */. 
27400 20 45 78 70 72 20 2a 70 45 6e 64 3b 20 20 20 20   Expr *pEnd;    
27410 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
27420 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70  ession for "<exp
27430 72 3e 20 46 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f  r> FOLLOWING" */
27440 0a 20 20 57 69 6e 64 6f 77 20 2a 2a 70 70 54 68  .  Window **ppTh
27450 69 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  is;        /* Po
27460 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 6f 62  inter to this ob
27470 6a 65 63 74 20 69 6e 20 53 65 6c 65 63 74 2e 70  ject in Select.p
27480 57 69 6e 20 6c 69 73 74 20 2a 2f 0a 20 20 57 69  Win list */.  Wi
27490 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20  ndow *pNextWin; 
274a0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
274b0 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62 65  ndow function be
274c0 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69 73 20  longing to this 
274d0 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70 72  SELECT */.  Expr
274e0 20 2a 70 46 69 6c 74 65 72 3b 20 20 20 20 20 20   *pFilter;      
274f0 20 20 20 20 2f 2a 20 54 68 65 20 46 49 4c 54 45      /* The FILTE
27500 52 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  R expression */.
27510 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
27520 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
27530 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69   function */.  i
27540 6e 74 20 69 45 70 68 43 73 72 3b 20 20 20 20 20  nt iEphCsr;     
27550 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74 69 74         /* Partit
27560 69 6f 6e 20 62 75 66 66 65 72 20 6f 72 20 50 65  ion buffer or Pe
27570 65 72 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69  er buffer */.  i
27580 6e 74 20 72 65 67 41 63 63 75 6d 3b 20 20 20 20  nt regAccum;    
27590 20 20 20 20 20 20 20 2f 2a 20 41 63 63 75 6d 75         /* Accumu
275a0 6c 61 74 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 72  lator */.  int r
275b0 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20 20 20  egResult;       
275c0 20 20 20 2f 2a 20 49 6e 74 65 72 69 6d 20 72 65     /* Interim re
275d0 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 63 73  sult */.  int cs
275e0 72 41 70 70 3b 20 20 20 20 20 20 20 20 20 20 20  rApp;           
275f0 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 63 75    /* Function cu
27600 72 73 6f 72 20 28 75 73 65 64 20 62 79 20 6d 69  rsor (used by mi
27610 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20  n/max) */.  int 
27620 72 65 67 41 70 70 3b 20 20 20 20 20 20 20 20 20  regApp;         
27630 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20      /* Function 
27640 72 65 67 69 73 74 65 72 20 28 61 6c 73 6f 20 75  register (also u
27650 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20  sed by min/max) 
27660 2a 2f 0a 20 20 69 6e 74 20 72 65 67 50 61 72 74  */.  int regPart
27670 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
27680 41 72 72 61 79 20 6f 66 20 72 65 67 69 73 74 65  Array of registe
27690 72 73 20 66 6f 72 20 50 41 52 54 49 54 49 4f 4e  rs for PARTITION
276a0 20 42 59 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20   BY values */.  
276b0 45 78 70 72 20 2a 70 4f 77 6e 65 72 3b 20 20 20  Expr *pOwner;   
276c0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
276d0 73 73 69 6f 6e 20 6f 62 6a 65 63 74 20 74 68 69  ssion object thi
276e0 73 20 77 69 6e 64 6f 77 20 69 73 20 61 74 74 61  s window is atta
276f0 63 68 65 64 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  ched to */.  int
27700 20 6e 42 75 66 66 65 72 43 6f 6c 3b 20 20 20 20   nBufferCol;    
27710 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
27720 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 62 75 66  f columns in buf
27730 66 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  fer table */.  i
27740 6e 74 20 69 41 72 67 43 6f 6c 3b 20 20 20 20 20  nt iArgCol;     
27750 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
27760 20 6f 66 20 66 69 72 73 74 20 61 72 67 75 6d 65   of first argume
27770 6e 74 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  nt for this func
27780 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 65  tion */.  int re
27790 67 4f 6e 65 3b 20 20 20 20 20 20 20 20 20 20 20  gOne;           
277a0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 63 6f    /* Register co
277b0 6e 74 61 69 6e 69 6e 67 20 63 6f 6e 73 74 61 6e  ntaining constan
277c0 74 20 76 61 6c 75 65 20 31 20 2a 2f 0a 20 20 69  t value 1 */.  i
277d0 6e 74 20 72 65 67 53 74 61 72 74 52 6f 77 69 64  nt regStartRowid
277e0 3b 0a 20 20 69 6e 74 20 72 65 67 45 6e 64 52 6f  ;.  int regEndRo
277f0 77 69 64 3b 0a 20 20 75 38 20 62 45 78 70 72 41  wid;.  u8 bExprA
27800 72 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  rgs;           /
27810 2a 20 44 65 66 65 72 20 65 76 61 6c 75 61 74 69  * Defer evaluati
27820 6f 6e 20 6f 66 20 77 69 6e 64 6f 77 20 66 75 6e  on of window fun
27830 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 0a  ction arguments.
27840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27850 20 20 20 20 20 20 20 20 20 20 2a 2a 20 64 75 65            ** due
27860 20 74 6f 20 74 68 65 20 53 51 4c 49 54 45 5f 53   to the SQLITE_S
27870 55 42 54 59 50 45 20 66 6c 61 67 20 2a 2f 0a 7d  UBTYPE flag */.}
27880 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
27890 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
278a0 43 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  C.void sqlite3Wi
278b0 6e 64 6f 77 44 65 6c 65 74 65 28 73 71 6c 69 74  ndowDelete(sqlit
278c0 65 33 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76  e3*, Window*);.v
278d0 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
278e0 77 55 6e 6c 69 6e 6b 46 72 6f 6d 53 65 6c 65 63  wUnlinkFromSelec
278f0 74 28 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64  t(Window*);.void
27900 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69   sqlite3WindowLi
27910 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
27920 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29   *db, Window *p)
27930 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65  ;.Window *sqlite
27940 33 57 69 6e 64 6f 77 41 6c 6c 6f 63 28 50 61 72  3WindowAlloc(Par
27950 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 45  se*, int, int, E
27960 78 70 72 2a 2c 20 69 6e 74 20 2c 20 45 78 70 72  xpr*, int , Expr
27970 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
27980 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68  ite3WindowAttach
27990 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
279a0 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73  Window*);.void s
279b0 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69 6e 6b  qlite3WindowLink
279c0 28 53 65 6c 65 63 74 20 2a 70 53 65 6c 2c 20 57  (Select *pSel, W
279d0 69 6e 64 6f 77 20 2a 70 57 69 6e 29 3b 0a 69 6e  indow *pWin);.in
279e0 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43  t sqlite3WindowC
279f0 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 20 57  ompare(Parse*, W
27a00 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 2c  indow*, Window*,
27a10 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27a20 74 65 33 57 69 6e 64 6f 77 43 6f 64 65 49 6e 69  te3WindowCodeIni
27a30 74 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77  t(Parse*, Window
27a40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27a50 57 69 6e 64 6f 77 43 6f 64 65 53 74 65 70 28 50  WindowCodeStep(P
27a60 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
27a70 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2c  WhereInfo*, int,
27a80 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
27a90 65 33 57 69 6e 64 6f 77 52 65 77 72 69 74 65 28  e3WindowRewrite(
27aa0 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 29  Parse*, Select*)
27ab0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
27ac0 61 6e 64 53 75 62 71 75 65 72 79 28 50 61 72 73  andSubquery(Pars
27ad0 65 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69  e*, struct SrcLi
27ae0 73 74 5f 69 74 65 6d 2a 29 3b 0a 76 6f 69 64 20  st_item*);.void 
27af0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 55 70 64  sqlite3WindowUpd
27b00 61 74 65 28 50 61 72 73 65 2a 2c 20 57 69 6e 64  ate(Parse*, Wind
27b10 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 46 75  ow*, Window*, Fu
27b20 6e 63 44 65 66 2a 29 3b 0a 57 69 6e 64 6f 77 20  ncDef*);.Window 
27b30 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 75  *sqlite3WindowDu
27b40 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 45  p(sqlite3 *db, E
27b50 78 70 72 20 2a 70 4f 77 6e 65 72 2c 20 57 69 6e  xpr *pOwner, Win
27b60 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20  dow *p);.Window 
27b70 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69  *sqlite3WindowLi
27b80 73 74 44 75 70 28 73 71 6c 69 74 65 33 20 2a 64  stDup(sqlite3 *d
27b90 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 76  b, Window *p);.v
27ba0 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
27bb0 77 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  wFunctions(void)
27bc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
27bd0 6e 64 6f 77 43 68 61 69 6e 28 50 61 72 73 65 2a  ndowChain(Parse*
27be0 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f  , Window*, Windo
27bf0 77 2a 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c  w*);.Window *sql
27c00 69 74 65 33 57 69 6e 64 6f 77 41 73 73 65 6d 62  ite3WindowAssemb
27c10 6c 65 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f  le(Parse*, Windo
27c20 77 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45  w*, ExprList*, E
27c30 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
27c40 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
27c50 65 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44  e sqlite3WindowD
27c60 65 6c 65 74 65 28 61 2c 62 29 0a 23 20 64 65 66  elete(a,b).# def
27c70 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  ine sqlite3Windo
27c80 77 46 75 6e 63 74 69 6f 6e 73 28 29 0a 23 20 64  wFunctions().# d
27c90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e  efine sqlite3Win
27ca0 64 6f 77 41 74 74 61 63 68 28 61 2c 62 2c 63 29  dowAttach(a,b,c)
27cb0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
27cc0 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e  ssuming zIn poin
27cd0 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
27ce0 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20  byte of a UTF-8 
27cf0 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64  character,.** ad
27d00 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69  vance zIn to poi
27d10 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  nt to the first 
27d20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74  byte of the next
27d30 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
27d40 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
27d50 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49  ITE_SKIP_UTF8(zI
27d60 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  n) {            
27d70 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
27d80 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d  if( (*(zIn++))>=
27d90 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20  0xc0 ){         
27da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27db0 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65       \.    while
27dc0 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d  ( (*zIn & 0xc0)=
27dd0 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20  =0x80 ){ zIn++; 
27de0 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a  }             \.
27df0 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20    }             
27e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a         \.}../*.*
27e30 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42  * The SQLITE_*_B
27e40 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73  KPT macros are s
27e50 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74  ubstitutes for t
27e60 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77  he error codes w
27e70 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  ith.** the same 
27e80 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74  name but without
27e90 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69   the _BKPT suffi
27ea0 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73  x.  These macros
27eb0 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69   invoke.** routi
27ec0 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20  nes that report 
27ed0 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20  the line-number 
27ee0 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72  on which the err
27ef0 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a  or originated.**
27f00 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c   using sqlite3_l
27f10 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69  og().  The routi
27f20 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65  nes also provide
27f30 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
27f40 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20  ace.** to set a 
27f50 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f  debugger breakpo
27f60 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  int..*/.int sqli
27f70 74 65 33 52 65 70 6f 72 74 45 72 72 6f 72 28 69  te3ReportError(i
27f80 6e 74 20 69 45 72 72 2c 20 69 6e 74 20 6c 69 6e  nt iErr, int lin
27f90 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  eno, const char 
27fa0 2a 7a 54 79 70 65 29 3b 0a 69 6e 74 20 73 71 6c  *zType);.int sql
27fb0 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
27fc0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
27fd0 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e  e3MisuseError(in
27fe0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  t);.int sqlite3C
27ff0 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74  antopenError(int
28000 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
28010 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73  E_CORRUPT_BKPT s
28020 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
28030 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
28040 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55  fine SQLITE_MISU
28050 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d  SE_BKPT sqlite3M
28060 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e  isuseError(__LIN
28070 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
28080 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50  ITE_CANTOPEN_BKP
28090 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  T sqlite3Cantope
280a0 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  nError(__LINE__)
280b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
280c0 45 42 55 47 0a 20 20 69 6e 74 20 73 71 6c 69 74  EBUG.  int sqlit
280d0 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74  e3NomemError(int
280e0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
280f0 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28  IoerrnomemError(
28100 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
28110 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72  te3CorruptPgnoEr
28120 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23  ror(int,Pgno);.#
28130 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
28140 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65  OMEM_BKPT sqlite
28150 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49  3NomemError(__LI
28160 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53  NE__).# define S
28170 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
28180 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 49 6f  M_BKPT sqlite3Io
28190 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f  errnomemError(__
281a0 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65  LINE__).# define
281b0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
281c0 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43  PGNO(P) sqlite3C
281d0 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28  orruptPgnoError(
281e0 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a 23 65  __LINE__,(P)).#e
281f0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
28200 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53  ITE_NOMEM_BKPT S
28210 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65  QLITE_NOMEM.# de
28220 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  fine SQLITE_IOER
28230 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c  R_NOMEM_BKPT SQL
28240 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a  ITE_IOERR_NOMEM.
28250 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
28260 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20  CORRUPT_PGNO(P) 
28270 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
28280 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65  ror(__LINE__).#e
28290 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33  ndif../*.** FTS3
282a0 20 61 6e 64 20 46 54 53 34 20 62 6f 74 68 20 72   and FTS4 both r
282b0 65 71 75 69 72 65 20 76 69 72 74 75 61 6c 20 74  equire virtual t
282c0 61 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f 0a  able support.*/.
282d0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
282e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
282f0 41 42 4c 45 29 0a 23 20 75 6e 64 65 66 20 53 51  ABLE).# undef SQ
28300 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
28310 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
28320 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e 64  ENABLE_FTS4.#end
28330 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69  if../*.** FTS4 i
28340 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65  s really an exte
28350 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20  nsion for FTS3. 
28360 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75   It is enabled u
28370 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49  sing the.** SQLI
28380 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d  TE_ENABLE_FTS3 m
28390 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76  acro.  But to av
283a0 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65  oid confusion we
283b0 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68   also call.** th
283c0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
283d0 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65  FTS4 macro to se
283e0 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20  rve as an alias 
283f0 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  for SQLITE_ENABL
28400 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64  E_FTS3..*/.#if d
28410 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
28420 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64  ABLE_FTS4) && !d
28430 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
28440 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66  ABLE_FTS3).# def
28450 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
28460 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a  E_FTS3 1.#endif.
28470 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65  ./*.** The ctype
28480 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65  .h header is nee
28490 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49  ded for non-ASCI
284a0 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69  I systems.  It i
284b0 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64  s also.** needed
284c0 20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54   by FTS3 when FT
284d0 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  S3 is included i
284e0 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69  n the amalgamati
284f0 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  on..*/.#if !defi
28500 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49  ned(SQLITE_ASCII
28510 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69  ) || \.    (defi
28520 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
28530 45 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e  E_FTS3) && defin
28540 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ed(SQLITE_AMALGA
28550 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75  MATION)).# inclu
28560 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e  de <ctype.h>.#en
28570 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
28580 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
28590 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61  mimic the standa
285a0 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74  rd library funct
285b0 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a  ions toupper(),.
285c0 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73  ** isspace(), is
285d0 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74  alnum(), isdigit
285e0 28 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28  () and isxdigit(
285f0 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  ), respectively.
28600 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76   The.** sqlite v
28610 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72  ersions only wor
28620 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72  k for ASCII char
28630 61 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65  acters, regardle
28640 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f  ss of locale..*/
28650 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  .#ifdef SQLITE_A
28660 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71  SCII.# define sq
28670 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
28680 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43   ((x)&~(sqlite3C
28690 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
286a0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30  d char)(x)]&0x20
286b0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
286c0 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
286d0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
286e0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
286f0 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66  (x)]&0x01).# def
28700 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
28710 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  um(x)   (sqlite3
28720 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
28730 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
28740 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  6).# define sqli
28750 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
28760 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
28770 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
28780 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66  (x)]&0x02).# def
28790 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
287a0 69 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  it(x)   (sqlite3
287b0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
287c0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
287d0 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  4).# define sqli
287e0 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
287f0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
28800 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
28810 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66  (x)]&0x08).# def
28820 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
28830 65 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  er(x)   (sqlite3
28840 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e  UpperToLower[(un
28850 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
28860 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28870 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20 28  e3Isquote(x)   (
28880 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
28890 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
288a0 78 29 5d 26 30 78 38 30 29 0a 23 65 6c 73 65 0a  x)]&0x80).#else.
288b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
288c0 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75  Toupper(x)   tou
288d0 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  pper((unsigned c
288e0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
288f0 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
28900 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75  (x)   isspace((u
28910 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
28920 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28930 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69  e3Isalnum(x)   i
28940 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64  salnum((unsigned
28950 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
28960 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
28970 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28  ha(x)   isalpha(
28980 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
28990 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
289a0 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
289b0 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e   isdigit((unsign
289c0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
289d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
289e0 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67  digit(x)  isxdig
289f0 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
28a00 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
28a10 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
28a20 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73  )   tolower((uns
28a30 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
28a40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28a50 49 73 71 75 6f 74 65 28 78 29 20 20 20 28 28 78  Isquote(x)   ((x
28a60 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d 27 5c 27  )=='"'||(x)=='\'
28a70 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28 78 29  '||(x)=='['||(x)
28a80 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66 0a 69 6e  =='`').#endif.in
28a90 74 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61  t sqlite3IsIdCha
28aa0 72 28 75 38 29 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e  r(u8);../*.** In
28ab0 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20  ternal function 
28ac0 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e  prototypes.*/.in
28ad0 74 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  t sqlite3StrICmp
28ae0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
28af0 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
28b00 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63  qlite3Strlen30(c
28b10 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
28b20 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 6c  fine sqlite3Strl
28b30 65 6e 33 30 4e 4e 28 43 29 20 28 73 74 72 6c 65  en30NN(C) (strle
28b40 6e 28 43 29 26 30 78 33 66 66 66 66 66 66 66 29  n(C)&0x3fffffff)
28b50 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f  .char *sqlite3Co
28b60 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a  lumnType(Column*
28b70 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65  ,char*);.#define
28b80 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
28b90 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
28ba0 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
28bb0 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
28bc0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
28bd0 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
28be0 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
28bf0 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
28c00 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75  ite3MallocZero(u
28c10 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
28c20 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
28c30 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
28c40 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
28c50 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
28c60 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
28c70 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
28c80 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  NN(sqlite3*, u64
28c90 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
28ca0 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33  DbStrDup(sqlite3
28cb0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
28cc0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
28cd0 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  trNDup(sqlite3*,
28ce0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34  const char*, u64
28cf0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
28d00 44 62 53 70 61 6e 44 75 70 28 73 71 6c 69 74 65  DbSpanDup(sqlite
28d10 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  3*,const char*,c
28d20 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
28d30 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
28d40 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76  c(void*, u64);.v
28d50 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
28d60 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69  allocOrFree(sqli
28d70 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
28d80 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
28d90 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69  e3DbRealloc(sqli
28da0 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
28db0 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  64);.void sqlite
28dc0 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a  3DbFree(sqlite3*
28dd0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
28de0 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 73  qlite3DbFreeNN(s
28df0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
28e00 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
28e10 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69  ocSize(void*);.i
28e20 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  nt sqlite3DbMall
28e30 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c  ocSize(sqlite3*,
28e40 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73   void*);.void *s
28e50 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63  qlite3PageMalloc
28e60 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
28e70 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64  te3PageFree(void
28e80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28e90 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f  MemSetDefault(vo
28ea0 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  id);.#ifndef SQL
28eb0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76  ITE_UNTESTABLE.v
28ec0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67  oid sqlite3Benig
28ed0 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69  nMallocHooks(voi
28ee0 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69  d (*)(void), voi
28ef0 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65  d (*)(void));.#e
28f00 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
28f10 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76  HeapNearlyFull(v
28f20 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20  oid);../*.** On 
28f30 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70  systems with amp
28f40 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61  le stack space a
28f50 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20  nd that support 
28f60 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a  alloca(), make.*
28f70 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28  * use of alloca(
28f80 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63  ) to obtain spac
28f90 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f  e for large auto
28fa0 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20  matic objects.  
28fb0 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f  By default,.** o
28fc0 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d  btain space from
28fd0 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a   malloc()..**.**
28fe0 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f   The alloca() ro
28ff0 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75  utine never retu
29000 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20  rns NULL.  This 
29010 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20  will cause code 
29020 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65  paths.** that de
29030 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53  al with sqlite3S
29040 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c  tackAlloc() fail
29050 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61  ures to be unrea
29060 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  chable..*/.#ifde
29070 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c  f SQLITE_USE_ALL
29080 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  OCA.# define sql
29090 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
290a0 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28  w(D,N)   alloca(
290b0 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
290c0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
290d0 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61  o(D,N)  memset(a
290e0 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a  lloca(N), 0, N).
290f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29100 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 0a 23  StackFree(D,P).#
29110 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
29120 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
29130 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65  aw(D,N)   sqlite
29140 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e  3DbMallocRaw(D,N
29150 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29160 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
29170 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62  (D,N)  sqlite3Db
29180 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a  MallocZero(D,N).
29190 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
291a0 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
291b0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
291c0 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ee(D,P).#endif..
291d0 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  /* Do not allow 
291e0 62 6f 74 68 20 4d 45 4d 53 59 53 35 20 61 6e 64  both MEMSYS5 and
291f0 20 4d 45 4d 53 59 53 33 20 74 6f 20 62 65 20 64   MEMSYS3 to be d
29200 65 66 69 6e 65 64 20 74 6f 67 65 74 68 65 72 2e  efined together.
29210 20 20 49 66 20 74 68 65 79 0a 2a 2a 20 61 72 65    If they.** are
29220 2c 20 64 69 73 61 62 6c 65 20 4d 45 4d 53 59 53  , disable MEMSYS
29230 33 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  3.*/.#ifdef SQLI
29240 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
29250 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  5.const sqlite3_
29260 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
29270 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
29280 35 28 76 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20  5(void);.#undef 
29290 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
292a0 4d 53 59 53 33 0a 23 65 6e 64 69 66 0a 23 69 66  MSYS3.#endif.#if
292b0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
292c0 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
292d0 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
292e0 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
292f0 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
29300 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
29310 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  f SQLITE_MUTEX_O
29320 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  MIT.  sqlite3_mu
29330 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
29340 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c  t *sqlite3Defaul
29350 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  tMutex(void);.  
29360 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
29370 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
29380 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f  ite3NoopMutex(vo
29390 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
293a0 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74  utex *sqlite3Mut
293b0 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20  exAlloc(int);.  
293c0 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
293d0 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e  Init(void);.  in
293e0 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e  t sqlite3MutexEn
293f0 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  d(void);.#endif.
29400 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
29410 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20  ITE_MUTEX_OMIT) 
29420 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
29430 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20  TE_MUTEX_NOOP). 
29440 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
29450 6f 72 79 42 61 72 72 69 65 72 28 76 6f 69 64 29  oryBarrier(void)
29460 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
29470 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61   sqlite3MemoryBa
29480 72 72 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a  rrier().#endif..
29490 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
294a0 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
294b0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
294c0 74 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c  te3StatusUp(int,
294d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
294e0 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e  te3StatusDown(in
294f0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
29500 6c 69 74 65 33 53 74 61 74 75 73 48 69 67 68 77  lite3StatusHighw
29510 61 74 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  ater(int, int);.
29520 69 6e 74 20 73 71 6c 69 74 65 33 4c 6f 6f 6b 61  int sqlite3Looka
29530 73 69 64 65 55 73 65 64 28 73 71 6c 69 74 65 33  sideUsed(sqlite3
29540 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63  *,int*);../* Acc
29550 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75  ess to mutexes u
29560 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73  sed by sqlite3_s
29570 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74  tatus() */.sqlit
29580 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
29590 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f  3Pcache1Mutex(vo
295a0 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74  id);.sqlite3_mut
295b0 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  ex *sqlite3Mallo
295c0 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23  cMutex(void);..#
295d0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
295e0 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 54 48  E_ENABLE_MULTITH
295f0 52 45 41 44 45 44 5f 43 48 45 43 4b 53 29 20 26  READED_CHECKS) &
29600 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
29610 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 0a 76 6f  E_MUTEX_OMIT).vo
29620 69 64 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57  id sqlite3MutexW
29630 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28  arnOnContention(
29640 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 2a 29 3b  sqlite3_mutex*);
29650 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
29660 73 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e  sqlite3MutexWarn
29670 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 78 29 0a  OnContention(x).
29680 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
29690 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
296a0 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66  TING_POINT.# def
296b0 69 6e 65 20 45 58 50 37 35 34 20 28 28 28 75 36  ine EXP754 (((u6
296c0 34 29 30 78 37 66 66 29 3c 3c 35 32 29 0a 23 20  4)0x7ff)<<52).# 
296d0 64 65 66 69 6e 65 20 4d 41 4e 37 35 34 20 28 28  define MAN754 ((
296e0 28 28 75 36 34 29 31 29 3c 3c 35 32 29 2d 31 29  ((u64)1)<<52)-1)
296f0 0a 23 20 64 65 66 69 6e 65 20 49 73 4e 61 4e 28  .# define IsNaN(
29700 58 29 20 28 28 28 58 29 26 45 58 50 37 35 34 29  X) (((X)&EXP754)
29710 3d 3d 45 58 50 37 35 34 20 26 26 20 28 28 58 29  ==EXP754 && ((X)
29720 26 4d 41 4e 37 35 34 29 21 3d 30 29 0a 20 20 69  &MAN754)!=0).  i
29730 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
29740 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
29750 20 64 65 66 69 6e 65 20 49 73 4e 61 4e 28 58 29   define IsNaN(X)
29760 20 20 20 20 20 20 20 20 20 30 0a 23 20 64 65 66           0.# def
29770 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  ine sqlite3IsNaN
29780 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  (X)  0.#endif../
29790 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
297a0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
297b0 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  g structure hold
297c0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
297d0 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74  out SQL.** funct
297e0 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74  ions arguments t
297f0 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61  hat are the para
29800 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72  meters to the pr
29810 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e  intf() function.
29820 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74  .*/.struct Print
29830 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69  fArguments {.  i
29840 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  nt nArg;        
29850 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c          /* Total
29860 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
29870 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55  ents */.  int nU
29880 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  sed;            
29890 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
298a0 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73  arguments used s
298b0 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74  o far */.  sqlit
298c0 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67  e3_value **apArg
298d0 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d  ;   /* The argum
298e0 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b  ent values */.};
298f0 0a 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ..char *sqlite3M
29900 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
29910 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
29920 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
29930 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  VMPrintf(sqlite3
29940 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  *,const char*, v
29950 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66  a_list);.#if def
29960 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
29970 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
29980 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
29990 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CE).  void sqlit
299a0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
299b0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
299c0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
299d0 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
299e0 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
299f0 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
29a00 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
29a10 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
29a20 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
29a30 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
29a40 56 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65  ViewExpr(TreeVie
29a50 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c  w*, const Expr*,
29a60 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
29a70 69 74 65 33 54 72 65 65 56 69 65 77 42 61 72 65  ite3TreeViewBare
29a80 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65  ExprList(TreeVie
29a90 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69  w*, const ExprLi
29aa0 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
29ab0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29ac0 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73  3TreeViewExprLis
29ad0 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
29ae0 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38  st ExprList*, u8
29af0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
29b00 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
29b10 65 65 56 69 65 77 53 72 63 4c 69 73 74 28 54 72  eeViewSrcList(Tr
29b20 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53  eeView*, const S
29b30 72 63 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64  rcList*);.  void
29b40 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
29b50 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a  Select(TreeView*
29b60 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c  , const Select*,
29b70 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
29b80 69 74 65 33 54 72 65 65 56 69 65 77 57 69 74 68  ite3TreeViewWith
29b90 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
29ba0 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 69  t With*, u8);.#i
29bb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29bc0 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 76  T_WINDOWFUNC.  v
29bd0 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
29be0 69 65 77 57 69 6e 64 6f 77 28 54 72 65 65 56 69  iewWindow(TreeVi
29bf0 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f  ew*, const Windo
29c00 77 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  w*, u8);.  void 
29c10 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57  sqlite3TreeViewW
29c20 69 6e 46 75 6e 63 28 54 72 65 65 56 69 65 77 2a  inFunc(TreeView*
29c30 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c  , const Window*,
29c40 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 23 65 6e   u8);.#endif.#en
29c50 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74  dif...void sqlit
29c60 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
29c70 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63   **, sqlite3*, c
29c80 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
29c90 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
29ca0 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
29cb0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74  char*, ...);.int
29cc0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 54 6f 50   sqlite3ErrorToP
29cd0 61 72 73 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  arser(sqlite3*,i
29ce0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29cf0 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b  3Dequote(char*);
29d00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71  .void sqlite3Deq
29d10 75 6f 74 65 45 78 70 72 28 45 78 70 72 2a 29 3b  uoteExpr(Expr*);
29d20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b  .void sqlite3Tok
29d30 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68  enInit(Token*,ch
29d40 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
29d50 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
29d60 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
29d70 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
29d80 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
29d90 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
29da0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
29db0 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
29dc0 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
29dd0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
29de0 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
29df0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
29e00 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
29e10 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
29e20 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
29e30 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
29e40 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
29e50 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
29e60 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
29e70 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
29e80 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
29e90 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
29ea0 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e  BUG.int sqlite3N
29eb0 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61  oTempsInRange(Pa
29ec0 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23  rse*,int,int);.#
29ed0 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69  endif.Expr *sqli
29ee0 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c  te3ExprAlloc(sql
29ef0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
29f00 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70  Token*,int);.Exp
29f10 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73  r *sqlite3Expr(s
29f20 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
29f30 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
29f40 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68  qlite3ExprAttach
29f50 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33  Subtrees(sqlite3
29f60 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78  *,Expr*,Expr*,Ex
29f70 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
29f80 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c  te3PExpr(Parse*,
29f90 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70   int, Expr*, Exp
29fa0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
29fb0 33 50 45 78 70 72 41 64 64 53 65 6c 65 63 74 28  3PExprAddSelect(
29fc0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53  Parse*, Expr*, S
29fd0 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73  elect*);.Expr *s
29fe0 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 50 61  qlite3ExprAnd(Pa
29ff0 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  rse*,Expr*, Expr
2a000 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2a010 33 45 78 70 72 53 69 6d 70 6c 69 66 69 65 64 41  3ExprSimplifiedA
2a020 6e 64 4f 72 28 45 78 70 72 2a 29 3b 0a 45 78 70  ndOr(Expr*);.Exp
2a030 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
2a040 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
2a050 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
2a060 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2a070 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72  te3ExprAssignVar
2a080 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45  Number(Parse*, E
2a090 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  xpr*, u32);.void
2a0a0 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65   sqlite3ExprDele
2a0b0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
2a0c0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2a0d0 33 45 78 70 72 55 6e 6d 61 70 41 6e 64 44 65 6c  3ExprUnmapAndDel
2a0e0 65 74 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ete(Parse*, Expr
2a0f0 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
2a100 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
2a110 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  end(Parse*,ExprL
2a120 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  ist*,Expr*);.Exp
2a130 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
2a140 70 72 4c 69 73 74 41 70 70 65 6e 64 56 65 63 74  prListAppendVect
2a150 6f 72 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  or(Parse*,ExprLi
2a160 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72  st*,IdList*,Expr
2a170 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a180 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f  ExprListSetSortO
2a190 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69  rder(ExprList*,i
2a1a0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
2a1b0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
2a1c0 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72  Name(Parse*,Expr
2a1d0 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  List*,Token*,int
2a1e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a1f0 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50  xprListSetSpan(P
2a200 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
2a210 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2a220 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2a230 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65  qlite3ExprListDe
2a240 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
2a250 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73  xprList*);.u32 s
2a260 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c  qlite3ExprListFl
2a270 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69  ags(const ExprLi
2a280 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2a290 33 49 6e 64 65 78 48 61 73 44 75 70 6c 69 63 61  3IndexHasDuplica
2a2a0 74 65 52 6f 6f 74 50 61 67 65 28 49 6e 64 65 78  teRootPage(Index
2a2b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
2a2c0 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68  nit(sqlite3*, ch
2a2d0 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
2a2e0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
2a2f0 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  oid*, int, char*
2a300 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
2a310 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28 73  sqlite3InitOne(s
2a320 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 68  qlite3*, int, ch
2a330 61 72 2a 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  ar**, u32);.void
2a340 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
2a350 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
2a360 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
2a370 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a380 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2a390 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65  E.Module *sqlite
2a3a0 33 50 72 61 67 6d 61 56 74 61 62 52 65 67 69 73  3PragmaVtabRegis
2a3b0 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ter(sqlite3*,con
2a3c0 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b  st char *zName);
2a3d0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2a3e0 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
2a3f0 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
2a400 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
2a410 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
2a420 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69  chema(sqlite3*,i
2a430 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2a440 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73  3CollapseDatabas
2a450 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29  eArray(sqlite3*)
2a460 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
2a470 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e  mmitInternalChan
2a480 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ges(sqlite3*);.v
2a490 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2a4a0 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c  eColumnNames(sql
2a4b0 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69  ite3*,Table*);.i
2a4c0 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  nt sqlite3Column
2a4d0 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61  sFromExprList(Pa
2a4e0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  rse*,ExprList*,i
2a4f0 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76  16*,Column**);.v
2a500 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2a510 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e  tAddColumnTypeAn
2a520 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65  dCollation(Parse
2a530 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a  *,Table*,Select*
2a540 2c 63 68 61 72 29 3b 0a 54 61 62 6c 65 20 2a 73  ,char);.Table *s
2a550 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f  qlite3ResultSetO
2a560 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53  fSelect(Parse*,S
2a570 65 6c 65 63 74 2a 2c 63 68 61 72 29 3b 0a 76 6f  elect*,char);.vo
2a580 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61  id sqlite3OpenMa
2a590 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20  sterTable(Parse 
2a5a0 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a  *, int);.Index *
2a5b0 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
2a5c0 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a  yIndex(Table*);.
2a5d0 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  i16 sqlite3Colum
2a5e0 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c  nOfIndex(Index*,
2a5f0 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69   i16);.void sqli
2a600 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61  te3StartTable(Pa
2a610 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
2a620 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  n*,int,int,int,i
2a630 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  nt);.#if SQLITE_
2a640 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
2a650 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c  LUMNS.  void sql
2a660 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72  ite3ColumnProper
2a670 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62  tiesFromName(Tab
2a680 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23  le*, Column*);.#
2a690 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2a6a0 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65  lite3ColumnPrope
2a6b0 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c  rtiesFromName(T,
2a6c0 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  C) /* no-op */.#
2a6d0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2a6e0 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  e3AddColumn(Pars
2a6f0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
2a700 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2a710 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a  ddNotNull(Parse*
2a720 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a730 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65  ite3AddPrimaryKe
2a740 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
2a750 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  st*, int, int, i
2a760 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2a770 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61  3AddCheckConstra
2a780 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  int(Parse*, Expr
2a790 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a7a0 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28  AddDefaultValue(
2a7b0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
2a7c0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2a7d0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2a7e0 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70  te3AddCollateTyp
2a7f0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2a800 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a810 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ndTable(Parse*,T
2a820 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c  oken*,Token*,u8,
2a830 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
2a840 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f  lite3ParseUri(co
2a850 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
2a860 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69  char*,unsigned i
2a870 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  nt*,.           
2a880 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
2a890 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68  _vfs**,char**,ch
2a8a0 61 72 20 2a 2a 29 3b 0a 23 69 66 64 65 66 20 53  ar **);.#ifdef S
2a8b0 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a  QLITE_HAS_CODEC.
2a8c0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64    int sqlite3Cod
2a8d0 65 63 51 75 65 72 79 50 61 72 61 6d 65 74 65 72  ecQueryParameter
2a8e0 73 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  s(sqlite3*,const
2a8f0 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2a900 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
2a910 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 63  ine sqlite3Codec
2a920 51 75 65 72 79 50 61 72 61 6d 65 74 65 72 73 28  QueryParameters(
2a930 41 2c 42 2c 43 29 20 30 0a 23 65 6e 64 69 66 0a  A,B,C) 0.#endif.
2a940 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62  Btree *sqlite3Db
2a950 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69  NameToBtree(sqli
2a960 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
2a970 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
2a980 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64  E_UNTESTABLE.# d
2a990 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75  efine sqlite3Fau
2a9a0 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f  ltSim(X) SQLITE_
2a9b0 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73  OK.#else.  int s
2a9c0 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69  qlite3FaultSim(i
2a9d0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74  nt);.#endif..Bit
2a9e0 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76  vec *sqlite3Bitv
2a9f0 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69  ecCreate(u32);.i
2aa00 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
2aa10 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33  Test(Bitvec*, u3
2aa20 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
2aa30 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c  itvecTestNotNull
2aa40 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
2aa50 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
2aa60 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33  cSet(Bitvec*, u3
2aa70 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
2aa80 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76  BitvecClear(Bitv
2aa90 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29  ec*, u32, void*)
2aaa0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
2aab0 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76  tvecDestroy(Bitv
2aac0 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  ec*);.u32 sqlite
2aad0 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76  3BitvecSize(Bitv
2aae0 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  ec*);.#ifndef SQ
2aaf0 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
2ab00 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
2ab10 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74  cBuiltinTest(int
2ab20 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ,int*);.#endif..
2ab30 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
2ab40 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
2ab50 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
2ab60 33 52 6f 77 53 65 74 44 65 6c 65 74 65 28 76 6f  3RowSetDelete(vo
2ab70 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
2ab80 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 76 6f  e3RowSetClear(vo
2ab90 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
2aba0 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52  e3RowSetInsert(R
2abb0 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e  owSet*, i64);.in
2abc0 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  t sqlite3RowSetT
2abd0 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74  est(RowSet*, int
2abe0 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69   iBatch, i64);.i
2abf0 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
2ac00 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  Next(RowSet*, i6
2ac10 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  4*);..void sqlit
2ac20 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72  e3CreateView(Par
2ac30 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
2ac40 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
2ac50 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69  t*,Select*,int,i
2ac60 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
2ac70 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
2ac80 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64  IEW) || !defined
2ac90 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
2aca0 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74  TUALTABLE).  int
2acb0 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
2acc0 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65  olumnNames(Parse
2acd0 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  *,Table*);.#else
2ace0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2acf0 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
2ad00 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69  mes(A,B) 0.#endi
2ad10 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  f..#if SQLITE_MA
2ad20 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
2ad30 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73  int sqlite3DbMas
2ad40 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b  kAllZero(yDbMask
2ad50 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2ad60 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28  qlite3DropTable(
2ad70 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2ad80 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2ad90 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f  d sqlite3CodeDro
2ada0 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54  pTable(Parse*, T
2adb0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  able*, int, int)
2adc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2add0 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
2ade0 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  3*, Table*);.voi
2adf0 64 20 73 71 6c 69 74 65 33 46 72 65 65 49 6e 64  d sqlite3FreeInd
2ae00 65 78 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64  ex(sqlite3*, Ind
2ae10 65 78 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  ex*);.#ifndef SQ
2ae20 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
2ae30 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73  CREMENT.  void s
2ae40 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
2ae50 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a  entBegin(Parse *
2ae60 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20  pParse);.  void 
2ae70 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
2ae80 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70  mentEnd(Parse *p
2ae90 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20  Parse);.#else.# 
2aea0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2aeb0 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
2aec0 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
2aed0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
2aee0 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76  tEnd(X).#endif.v
2aef0 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
2af00 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  t(Parse*, SrcLis
2af10 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c  t*, Select*, IdL
2af20 69 73 74 2a 2c 20 69 6e 74 2c 20 55 70 73 65 72  ist*, int, Upser
2af30 74 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  t*);.void *sqlit
2af40 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28  e3ArrayAllocate(
2af50 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69  sqlite3*,void*,i
2af60 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49  nt,int*,int*);.I
2af70 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
2af80 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
2af90 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65  *, IdList*, Toke
2afa0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2afb0 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69  IdListIndex(IdLi
2afc0 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  st*,const char*)
2afd0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
2afe0 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65  e3SrcListEnlarge
2aff0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2b000 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72  *, int, int);.Sr
2b010 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
2b020 63 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73  cListAppend(Pars
2b030 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
2b040 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53  ken*, Token*);.S
2b050 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
2b060 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d  rcListAppendFrom
2b070 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  Term(Parse*, Src
2b080 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
2b090 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b               Tok
2b0c0 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  en*, Select*, Ex
2b0d0 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  pr*, IdList*);.v
2b0e0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
2b0f0 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73  stIndexedBy(Pars
2b100 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  e *, SrcList *, 
2b110 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
2b120 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e  qlite3SrcListFun
2b130 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72  cArgs(Parse*, Sr
2b140 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
2b150 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
2b160 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50  ndexedByLookup(P
2b170 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53  arse *, struct S
2b180 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
2b190 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
2b1a0 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
2b1b0 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  (SrcList*);.void
2b1c0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41   sqlite3SrcListA
2b1d0 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72  ssignCursors(Par
2b1e0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
2b1f0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69  void sqlite3IdLi
2b200 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
2b210 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
2b220 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
2b230 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
2b240 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65   SrcList*);.Inde
2b250 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61  x *sqlite3Alloca
2b260 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71  teIndexObject(sq
2b270 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63  lite3*,i16,int,c
2b280 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
2b290 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28  ite3CreateIndex(
2b2a0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
2b2b0 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ken*,SrcList*,Ex
2b2c0 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65  prList*,int,Toke
2b2d0 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
2b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
2b2f0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  pr*, int, int, u
2b300 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2b310 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
2b320 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
2b330 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
2b340 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
2b350 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
2b360 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
2b370 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
2b380 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
2b390 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
2b3a0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
2b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3c0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
2b3d0 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  u32,Expr*);.void
2b3e0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
2b3f0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
2b400 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
2b410 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
2b420 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
2b430 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2b440 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
2b450 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2b460 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b470 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
2b480 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
2b490 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
2b4a0 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
2b4b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
2b4c0 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
2b4d0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2b4e0 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
2b4f0 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  RY).Expr *sqlite
2b500 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73  3LimitWhere(Pars
2b510 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
2b520 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
2b530 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  *,char*);.#endif
2b540 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
2b550 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20  eteFrom(Parse*, 
2b560 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  SrcList*, Expr*,
2b570 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72   ExprList*, Expr
2b580 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b590 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53  Update(Parse*, S
2b5a0 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
2b5b0 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70  t*,Expr*,int,Exp
2b5c0 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20  rList*,Expr*,.  
2b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5e0 20 55 70 73 65 72 74 2a 29 3b 0a 57 68 65 72 65   Upsert*);.Where
2b5f0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
2b600 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
2b610 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
2b620 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
2b630 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
2b640 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
2b650 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f  (WhereInfo*);.Lo
2b660 67 45 73 74 20 73 71 6c 69 74 65 33 57 68 65 72  gEst sqlite3Wher
2b670 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28  eOutputRowCount(
2b680 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2b690 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
2b6a0 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66  istinct(WhereInf
2b6b0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2b6c0 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57  WhereIsOrdered(W
2b6d0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2b6e0 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65  sqlite3WhereOrde
2b6f0 72 42 79 4c 69 6d 69 74 4f 70 74 4c 61 62 65 6c  rByLimitOptLabel
2b700 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2b710 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
2b720 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f  Sorted(WhereInfo
2b730 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2b740 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65  hereContinueLabe
2b750 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
2b760 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  nt sqlite3WhereB
2b770 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49  reakLabel(WhereI
2b780 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
2b790 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73  e3WhereOkOnePass
2b7a0 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74  (WhereInfo*, int
2b7b0 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50  *);.#define ONEP
2b7c0 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20  ASS_OFF      0  
2b7d0 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20        /* Use of 
2b7e0 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f  ONEPASS not allo
2b7f0 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wed */.#define O
2b800 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20  NEPASS_SINGLE   
2b810 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50  1        /* ONEP
2b820 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20  ASS valid for a 
2b830 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74  single row updat
2b840 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45  e */.#define ONE
2b850 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20  PASS_MULTI    2 
2b860 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53         /* ONEPAS
2b870 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d  S is valid for m
2b880 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
2b890 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2b8a0 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c  CodeLoadIndexCol
2b8b0 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  umn(Parse*, Inde
2b8c0 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  x*, int, int, in
2b8d0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2b8e0 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
2b8f0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2b900 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
2b910 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2b920 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
2b930 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c  mnOfTable(Vdbe*,
2b940 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
2b950 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2b960 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76  lite3ExprCodeMov
2b970 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
2b980 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2b990 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
2b9a0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2b9b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b9c0 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72  ExprCodeCopy(Par
2b9d0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2b9e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2b9f0 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65  prCodeFactorable
2ba00 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2ba10 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2ba20 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28  3ExprCodeAtInit(
2ba30 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2ba40 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2ba50 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72  ExprCodeTemp(Par
2ba60 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a  se*, Expr*, int*
2ba70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2ba80 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72  prCodeTarget(Par
2ba90 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2baa0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2bab0 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50  prCodeAndCache(P
2bac0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2bad0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2bae0 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28  xprCodeExprList(
2baf0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2bb00 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  *, int, int, u8)
2bb10 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
2bb20 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30  _ECEL_DUP      0
2bb30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f  x01  /* Deep, no
2bb40 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73  t shallow copies
2bb50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
2bb60 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20  TE_ECEL_FACTOR  
2bb70 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72   0x02  /* Factor
2bb80 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65   out constant te
2bb90 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  rms */.#define S
2bba0 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20  QLITE_ECEL_REF  
2bbb0 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65      0x04  /* Use
2bbc0 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f   ExprList.u.x.iO
2bbd0 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65  rderByCol */.#de
2bbe0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
2bbf0 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20 20  _OMITREF  0x08  
2bc00 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c  /* Omit if ExprL
2bc10 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79  ist.u.x.iOrderBy
2bc20 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  Col */.void sqli
2bc30 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61  te3ExprIfTrue(Pa
2bc40 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2bc50 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2bc60 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28  ite3ExprIfFalse(
2bc70 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2bc80 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2bc90 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
2bca0 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70  eDup(Parse*, Exp
2bcb0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54  r*, int, int);.T
2bcc0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e  able *sqlite3Fin
2bcd0 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  dTable(sqlite3*,
2bce0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2bcf0 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  st char*);.#defi
2bd00 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20  ne LOCATE_VIEW  
2bd10 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c    0x01.#define L
2bd20 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78  OCATE_NOERR   0x
2bd30 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  02.Table *sqlite
2bd40 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72  3LocateTable(Par
2bd50 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f  se*,u32 flags,co
2bd60 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2bd70 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
2bd80 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
2bd90 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33  leItem(Parse*,u3
2bda0 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53  2 flags,struct S
2bdb0 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
2bdc0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69  Index *sqlite3Fi
2bdd0 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  ndIndex(sqlite3*
2bde0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
2bdf0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2be00 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2be10 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  dDeleteTable(sql
2be20 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
2be30 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2be40 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2be50 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33  eteIndex(sqlite3
2be60 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
2be70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2be80 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f  Vacuum(Parse*,To
2be90 6b 65 6e 2a 2c 45 78 70 72 2a 29 3b 0a 69 6e 74  ken*,Expr*);.int
2bea0 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
2beb0 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
2bec0 33 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33  3*, int, sqlite3
2bed0 5f 76 61 6c 75 65 2a 29 3b 0a 63 68 61 72 20 2a  _value*);.char *
2bee0 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
2bef0 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54  oken(sqlite3*, T
2bf00 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2bf10 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 50  te3ExprCompare(P
2bf20 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70  arse*,Expr*, Exp
2bf30 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2bf40 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
2bf50 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78 70 72  Skip(Expr*, Expr
2bf60 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2bf70 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70  ite3ExprListComp
2bf80 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45  are(ExprList*, E
2bf90 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
2bfa0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2bfb0 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72 73 65  mpliesExpr(Parse
2bfc0 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  *,Expr*, Expr*, 
2bfd0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2bfe0 33 45 78 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e  3ExprImpliesNonN
2bff0 75 6c 6c 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74  ullRow(Expr*,int
2c000 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2c010 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67  xprAnalyzeAggreg
2c020 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ates(NameContext
2c030 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2c040 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
2c050 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f  zeAggList(NameCo
2c060 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a  ntext*,ExprList*
2c070 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2c080 70 72 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78  prCoveredByIndex
2c090 28 45 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72  (Expr*, int iCur
2c0a0 2c 20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a  , Index *pIdx);.
2c0b0 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74  int sqlite3Funct
2c0c0 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45  ionUsesThisSrc(E
2c0d0 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xpr*, SrcList*);
2c0e0 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65  .Vdbe *sqlite3Ge
2c0f0 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23  tVdbe(Parse*);.#
2c100 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
2c110 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71  TESTABLE.void sq
2c120 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61  lite3PrngSaveSta
2c130 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
2c140 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72  qlite3PrngRestor
2c150 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65  eState(void);.#e
2c160 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2c170 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
2c180 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2c190 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
2c1a0 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  fySchema(Parse*,
2c1b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2c1c0 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d  te3CodeVerifyNam
2c1d0 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  edSchema(Parse*,
2c1e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
2c1f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
2c200 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
2c210 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
2c220 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61  id sqlite3EndTra
2c230 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
2c240 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c250 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73  e3Savepoint(Pars
2c260 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29  e*, int, Token*)
2c270 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
2c280 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71  oseSavepoints(sq
2c290 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73  lite3 *);.void s
2c2a0 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78  qlite3LeaveMutex
2c2b0 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73  AndCloseZombie(s
2c2c0 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
2c2d0 6c 69 74 65 33 45 78 70 72 49 64 54 6f 54 72 75  lite3ExprIdToTru
2c2e0 65 46 61 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69  eFalse(Expr*);.i
2c2f0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 54 72  nt sqlite3ExprTr
2c300 75 74 68 56 61 6c 75 65 28 63 6f 6e 73 74 20 45  uthValue(const E
2c310 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2c320 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
2c330 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
2c340 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
2c350 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
2c360 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2c370 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
2c380 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29  ction(Expr*, u8)
2c390 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2c3a0 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f  rIsConstantOrGro
2c3b0 75 70 42 79 28 50 61 72 73 65 2a 2c 20 45 78 70  upBy(Parse*, Exp
2c3c0 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
2c3d0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2c3e0 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45  sTableConstant(E
2c3f0 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65  xpr*,int);.#ifde
2c400 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2c410 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74  CURSOR_HINTS.int
2c420 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74   sqlite3ExprCont
2c430 61 69 6e 73 53 75 62 71 75 65 72 79 28 45 78 70  ainsSubquery(Exp
2c440 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  r*);.#endif.int 
2c450 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74  sqlite3ExprIsInt
2c460 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a  eger(Expr*, int*
2c470 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2c480 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73  prCanBeNull(cons
2c490 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t Expr*);.int sq
2c4a0 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f  lite3ExprNeedsNo
2c4b0 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63  AffinityChange(c
2c4c0 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72  onst Expr*, char
2c4d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2c4e0 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72  Rowid(const char
2c4f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c500 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74  GenerateRowDelet
2c510 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61  e(.    Parse*,Ta
2c520 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e  ble*,Trigger*,in
2c530 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38  t,int,int,i16,u8
2c540 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69  ,u8,u8,int);.voi
2c550 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
2c560 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28  eRowIndexDelete(
2c570 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2c580 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
2c590 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2c5a0 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65  3GenerateIndexKe
2c5b0 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  y(Parse*, Index*
2c5c0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
2c5d0 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74   int*,Index*,int
2c5e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2c5f0 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62  esolvePartIdxLab
2c600 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  el(Parse*,int);.
2c610 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 52  int sqlite3ExprR
2c620 65 66 65 72 65 6e 63 65 73 55 70 64 61 74 65 64  eferencesUpdated
2c630 43 6f 6c 75 6d 6e 28 45 78 70 72 2a 2c 69 6e 74  Column(Expr*,int
2c640 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2c650 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
2c660 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
2c670 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
2c680 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
2c690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6b0 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
2c6c0 69 6e 74 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74  int*,int*,Upsert
2c6d0 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
2c6e0 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52  E_ENABLE_NULL_TR
2c6f0 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  IM.  void sqlite
2c700 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35  3SetMakeRecordP5
2c710 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  (Vdbe*,Table*);.
2c720 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2c730 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63  qlite3SetMakeRec
2c740 6f 72 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69  ordP5(A,B).#endi
2c750 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  f.void sqlite3Co
2c760 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28  mpleteInsertion(
2c770 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2c780 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69  t,int,int,int*,i
2c790 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74  nt,int,int);.int
2c7a0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
2c7b0 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73  eAndIndices(Pars
2c7c0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2c7d0 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69   u8, int, u8*, i
2c7e0 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64  nt*, int*);.void
2c7f0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69   sqlite3BeginWri
2c800 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73  teOperation(Pars
2c810 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
2c820 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69  oid sqlite3Multi
2c830 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76  Write(Parse*);.v
2c840 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62  oid sqlite3MayAb
2c850 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ort(Parse*);.voi
2c860 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e  d sqlite3HaltCon
2c870 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
2c880 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c  int, int, char*,
2c890 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73   i8, u8);.void s
2c8a0 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73  qlite3UniqueCons
2c8b0 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
2c8c0 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  nt, Index*);.voi
2c8d0 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f  d sqlite3RowidCo
2c8e0 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
2c8f0 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45   int, Table*);.E
2c900 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2c910 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
2c920 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73  r*,int);.ExprLis
2c930 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
2c940 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  stDup(sqlite3*,E
2c950 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53  xprList*,int);.S
2c960 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
2c970 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  rcListDup(sqlite
2c980 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29  3*,SrcList*,int)
2c990 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
2c9a0 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
2c9b0 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
2c9c0 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
2c9d0 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
2c9e0 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 46 75  Select*,int);.Fu
2c9f0 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 75  ncDef *sqlite3Fu
2ca00 6e 63 74 69 6f 6e 53 65 61 72 63 68 28 69 6e 74  nctionSearch(int
2ca10 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
2ca20 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
2ca30 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75  tBuiltinFuncs(Fu
2ca40 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e  ncDef*,int);.Fun
2ca50 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
2ca60 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2ca70 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
2ca80 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  nt,u8,u8);.void 
2ca90 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
2caa0 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
2cab0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2cac0 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
2cad0 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
2cae0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2caf0 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65  RegisterPerConne
2cb00 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63  ctionBuiltinFunc
2cb10 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
2cb20 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
2cb30 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65  tyCheckOk(sqlite
2cb40 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2cb50 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f  SafetyCheckSickO
2cb60 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  rOk(sqlite3*);.v
2cb70 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67  oid sqlite3Chang
2cb80 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20  eCookie(Parse*, 
2cb90 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
2cba0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2cbb0 56 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65  VIEW) && !define
2cbc0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
2cbd0 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69  IGGER).void sqli
2cbe0 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69  te3MaterializeVi
2cbf0 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ew(Parse*, Table
2cc00 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69  *, Expr*, ExprLi
2cc10 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  st*,Expr*,int);.
2cc20 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2cc30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2cc40 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  GER.  void sqlit
2cc50 65 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50  e3BeginTrigger(P
2cc60 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f  arse*, Token*,To
2cc70 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c  ken*,int,int,IdL
2cc80 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20  ist*,SrcList*,. 
2cc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cca0 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
2ccb0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
2ccc0 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54  d sqlite3FinishT
2ccd0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
2cce0 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b  riggerStep*, Tok
2ccf0 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  en*);.  void sql
2cd00 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28  ite3DropTrigger(
2cd10 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2cd20 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2cd30 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
2cd40 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69  rPtr(Parse*, Tri
2cd50 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65  gger*);.  Trigge
2cd60 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
2cd70 72 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c  rsExist(Parse *,
2cd80 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78   Table*, int, Ex
2cd90 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d  prList*, int *pM
2cda0 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20  ask);.  Trigger 
2cdb0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c  *sqlite3TriggerL
2cdc0 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
2cdd0 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  le *);.  void sq
2cde0 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
2cdf0 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
2ce00 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72  ger *, int, Expr
2ce10 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  List*, int, Tabl
2ce20 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  e *,.           
2ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce40 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2ce50 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2ce60 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
2ce70 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69  ect(Parse *, Tri
2ce80 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  gger *, Table *,
2ce90 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2cea0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69  .  void sqliteVi
2ceb0 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65  ewTriggers(Parse
2cec0 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
2ced0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
2cee0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2cef0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74  3DeleteTriggerSt
2cf00 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  ep(sqlite3*, Tri
2cf10 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72  ggerStep*);.  Tr
2cf20 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2cf30 65 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53  e3TriggerSelectS
2cf40 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  tep(sqlite3*,Sel
2cf50 65 63 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ect*,.          
2cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2cf80 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
2cf90 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65  char*);.  Trigge
2cfa0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
2cfb0 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28  iggerInsertStep(
2cfc0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  Parse*,Token*, I
2cfd0 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
2cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d000 53 65 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72  Select*,u8,Upser
2d010 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2d020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d030 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
2d040 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2d050 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ar*);.  TriggerS
2d060 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2d070 67 65 72 55 70 64 61 74 65 53 74 65 70 28 50 61  gerUpdateStep(Pa
2d080 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  rse*,Token*,Expr
2d090 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38  List*, Expr*, u8
2d0a0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2d0d0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2d0e0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2d0f0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2d100 72 44 65 6c 65 74 65 53 74 65 70 28 50 61 72 73  rDeleteStep(Pars
2d110 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a  e*,Token*, Expr*
2d120 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d140 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2d150 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2d160 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2d170 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
2d180 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
2d190 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
2d1a0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2d1b0 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
2d1c0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
2d1d0 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  r*);.  u32 sqlit
2d1e0 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
2d1f0 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a  (Parse*,Trigger*
2d200 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69  ,ExprList*,int,i
2d210 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  nt,Table*,int);.
2d220 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d230 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
2d240 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
2d250 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65   ? (p)->pTopleve
2d260 6c 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e  l : (p)).# defin
2d270 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65  e sqlite3IsTople
2d280 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f  vel(p) ((p)->pTo
2d290 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65  plevel==0).#else
2d2a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2d2b0 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42  3TriggersExist(B
2d2c0 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65  ,C,D,E,F) 0.# de
2d2d0 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65  fine sqlite3Dele
2d2e0 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23  teTrigger(A,B).#
2d2f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
2d300 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c  ropTriggerPtr(A,
2d310 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
2d320 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2d330 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29  teTrigger(A,B,C)
2d340 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2d350 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
2d360 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c  A,B,C,D,E,F,G,H,
2d370 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  I).# define sqli
2d380 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
2d390 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c  rDirect(A,B,C,D,
2d3a0 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E,F).# define sq
2d3b0 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
2d3c0 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e  (X, Y) 0.# defin
2d3d0 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
2d3e0 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65  plevel(p) p.# de
2d3f0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f  fine sqlite3IsTo
2d400 70 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65  plevel(p) 1.# de
2d410 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
2d420 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43  gerColmask(A,B,C
2d430 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64  ,D,E,F,G) 0.#end
2d440 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
2d450 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20  oinType(Parse*, 
2d460 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
2d470 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2d480 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69  lite3CreateForei
2d490 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  gnKey(Parse*, Ex
2d4a0 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
2d4b0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
2d4c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2d4d0 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ferForeignKey(Pa
2d4e0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e  rse*, int);.#ifn
2d4f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d500 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
2d510 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
2d520 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72  Read(Parse*,Expr
2d530 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73  *,Schema*,SrcLis
2d540 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
2d550 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73  e3AuthCheck(Pars
2d560 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  e*,int, const ch
2d570 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2d580 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2d590 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
2d5a0 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61  thContextPush(Pa
2d5b0 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78  rse*, AuthContex
2d5c0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2d5d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2d5e0 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41  AuthContextPop(A
2d5f0 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20  uthContext*);.  
2d600 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52  int sqlite3AuthR
2d610 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63  eadCol(Parse*, c
2d620 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
2d630 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
2d640 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2d650 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
2d660 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e  a,b,c,d).# defin
2d670 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  e sqlite3AuthChe
2d680 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20  ck(a,b,c,d,e)   
2d690 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66   SQLITE_OK.# def
2d6a0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
2d6b0 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63  ontextPush(a,b,c
2d6c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2d6d0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
2d6e0 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29  (a)  ((void)(a))
2d6f0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2d700 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65  ite3Attach(Parse
2d710 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  *, Expr*, Expr*,
2d720 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2d730 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73  lite3Detach(Pars
2d740 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
2d750 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28   sqlite3FixInit(
2d760 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a  DbFixer*, Parse*
2d770 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2d780 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
2d790 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2d7a0 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72  xSrcList(DbFixer
2d7b0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
2d7c0 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65  t sqlite3FixSele
2d7d0 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c  ct(DbFixer*, Sel
2d7e0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
2d7f0 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65  e3FixExpr(DbFixe
2d800 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
2d810 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69  sqlite3FixExprLi
2d820 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  st(DbFixer*, Exp
2d830 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2d840 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74  ite3FixTriggerSt
2d850 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69  ep(DbFixer*, Tri
2d860 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20  ggerStep*);.int 
2d870 73 71 6c 69 74 65 33 52 65 61 6c 53 61 6d 65 41  sqlite3RealSameA
2d880 73 49 6e 74 28 64 6f 75 62 6c 65 2c 73 71 6c 69  sInt(double,sqli
2d890 74 65 33 5f 69 6e 74 36 34 29 3b 0a 69 6e 74 20  te3_int64);.int 
2d8a0 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73  sqlite3AtoF(cons
2d8b0 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c  t char *z, doubl
2d8c0 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  e*, int, u8);.in
2d8d0 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33  t sqlite3GetInt3
2d8e0 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  2(const char *, 
2d8f0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
2d900 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61  e3Atoi(const cha
2d910 72 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  r*);.#ifndef SQL
2d920 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69  ITE_OMIT_UTF16.i
2d930 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42  nt sqlite3Utf16B
2d940 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69  yteLen(const voi
2d950 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43  d *pData, int nC
2d960 68 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  har);.#endif.int
2d970 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72   sqlite3Utf8Char
2d980 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Len(const char *
2d990 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65  pData, int nByte
2d9a0 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74  );.u32 sqlite3Ut
2d9b0 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a  f8Read(const u8*
2d9c0 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
2d9d0 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c  e3LogEst(u64);.L
2d9e0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
2d9f0 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f  EstAdd(LogEst,Lo
2da00 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  gEst);.#ifndef S
2da10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2da20 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73  ALTABLE.LogEst s
2da30 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d  qlite3LogEstFrom
2da40 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a  Double(double);.
2da50 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
2da60 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2da70 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
2da80 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e  ) || \.    defin
2da90 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2daa0 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20  _STAT4) || \.   
2dab0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2dac0 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45  EXPLAIN_ESTIMATE
2dad0 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69  D_ROWS).u64 sqli
2dae0 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c  te3LogEstToInt(L
2daf0 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56  ogEst);.#endif.V
2db00 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c 69  List *sqlite3VLi
2db10 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c 56  stAdd(sqlite3*,V
2db20 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
2db30 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73  *,int,int);.cons
2db40 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  t char *sqlite3V
2db50 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c  ListNumToName(VL
2db60 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ist*,int);.int s
2db70 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65 54  qlite3VListNameT
2db80 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73  oNum(VList*,cons
2db90 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f  t char*,int);../
2dba0 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f  *.** Routines to
2dbb0 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
2dbc0 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
2dbd0 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65  integers.  These
2dbe0 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64   used to.** be d
2dbf0 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20  efined locally, 
2dc00 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74  but now we use t
2dc10 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e  he varint routin
2dc20 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63  es in the util.c
2dc30 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74  .** file..*/.int
2dc40 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2dc50 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t(unsigned char*
2dc60 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74  , u64);.u8 sqlit
2dc70 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73  e3GetVarint(cons
2dc80 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2dc90 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71  *, u64 *);.u8 sq
2dca0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
2dcb0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2dcc0 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a  char *, u32 *);.
2dcd0 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e  int sqlite3Varin
2dce0 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a  tLen(u64 v);../*
2dcf0 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63  .** The common c
2dd00 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72  ase is for a var
2dd10 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67  int to be a sing
2dd20 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66  le byte.  They f
2dd30 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72  ollowing.** macr
2dd40 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f  os handle the co
2dd50 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75  mmon case withou
2dd60 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61  t a procedure ca
2dd70 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c  ll, but then cal
2dd80 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75  l.** the procedu
2dd90 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61  re for larger va
2dda0 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rints..*/.#defin
2ddb0 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c  e getVarint32(A,
2ddc0 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28  B)  \.  (u8)((*(
2ddd0 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42  A)<(u8)0x80)?((B
2dde0 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73  )=(u32)*(A)),1:s
2ddf0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
2de00 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42  2((A),(u32 *)&(B
2de10 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56  ))).#define putV
2de20 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
2de30 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29    (u8)(((u32)(B)
2de40 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41  <(u32)0x80)?(*(A
2de50 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  )=(unsigned char
2de60 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69  )(B)),1:\.  sqli
2de70 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29  te3PutVarint((A)
2de80 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67  ,(B))).#define g
2de90 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  etVarint    sqli
2dea0 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65  te3GetVarint.#de
2deb0 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20  fine putVarint  
2dec0 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
2ded0 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  nt...const char 
2dee0 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66  *sqlite3IndexAff
2def0 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33  inityStr(sqlite3
2df00 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  *, Index*);.void
2df10 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66   sqlite3TableAff
2df20 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62  inity(Vdbe*, Tab
2df30 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  le*, int);.char 
2df40 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66  sqlite3CompareAf
2df50 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
2df60 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a  pr, char aff2);.
2df70 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
2df80 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20  AffinityOk(Expr 
2df90 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78  *pExpr, char idx
2dfa0 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72  _affinity);.char
2dfb0 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c   sqlite3TableCol
2dfc0 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62 6c  umnAffinity(Tabl
2dfd0 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73 71  e*,int);.char sq
2dfe0 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74  lite3ExprAffinit
2dff0 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  y(Expr *pExpr);.
2e000 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36  int sqlite3Atoi6
2e010 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
2e020 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  64*, int, u8);.i
2e030 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48  nt sqlite3DecOrH
2e040 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68  exToI64(const ch
2e050 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64  ar*, i64*);.void
2e060 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74   sqlite3ErrorWit
2e070 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69  hMsg(sqlite3*, i
2e080 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
2e090 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
2e0a0 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
2e0b0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2e0c0 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73  te3SystemError(s
2e0d0 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
2e0e0 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
2e0f0 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
2e100 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
2e110 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
2e120 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
2e130 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
2e140 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
2e150 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
2e160 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23  *, Token **);..#
2e170 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2e180 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29  E_NEED_ERR_NAME)
2e190 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2e1a0 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29  ite3ErrName(int)
2e1b0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
2e1c0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44   SQLITE_ENABLE_D
2e1d0 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74 20 73  ESERIALIZE.int s
2e1e0 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69 74 28  qlite3MemdbInit(
2e1f0 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 63  void);.#endif..c
2e200 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2e210 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69  e3ErrStr(int);.i
2e220 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
2e230 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
2e240 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  se);.CollSeq *sq
2e250 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
2e260 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63  (sqlite3*,u8 enc
2e270 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  , const char*,in
2e280 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
2e290 73 42 69 6e 61 72 79 28 63 6f 6e 73 74 20 43 6f  sBinary(const Co
2e2a0 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c 53 65 71  llSeq*);.CollSeq
2e2b0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43   *sqlite3LocateC
2e2c0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
2e2d0 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
2e2e0 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71  *zName);.CollSeq
2e2f0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c   *sqlite3ExprCol
2e300 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
2e310 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29  se, Expr *pExpr)
2e320 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2e330 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28  e3ExprNNCollSeq(
2e340 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
2e350 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
2e360 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c   sqlite3ExprColl
2e370 53 65 71 4d 61 74 63 68 28 50 61 72 73 65 2a 2c  SeqMatch(Parse*,
2e380 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
2e390 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
2e3a0 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50  ddCollateToken(P
2e3b0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2e3c0 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
2e3d0 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
2e3e0 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
2e3f0 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
2e400 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
2e410 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
2e420 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
2e430 74 65 28 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  te(Expr*);.Expr 
2e440 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70  *sqlite3ExprSkip
2e450 43 6f 6c 6c 61 74 65 41 6e 64 4c 69 6b 65 6c 79  CollateAndLikely
2e460 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
2e470 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71  ite3CheckCollSeq
2e480 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65  (Parse *, CollSe
2e490 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  q *);.int sqlite
2e4a0 33 57 72 69 74 61 62 6c 65 53 63 68 65 6d 61 28  3WritableSchema(
2e4b0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2e4c0 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
2e4d0 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 20 63 6f  tName(Parse*, co
2e4e0 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
2e4f0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2e500 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e510 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73  VdbeSetChanges(s
2e520 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a  qlite3 *, int);.
2e530 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e  int sqlite3AddIn
2e540 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
2e550 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74  nt sqlite3SubInt
2e560 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
2e570 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  t sqlite3MulInt6
2e580 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2e590 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
2e5a0 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  (int);.#ifdef SQ
2e5b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f  LITE_ENABLE_8_3_
2e5c0 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74  NAMES.void sqlit
2e5d0 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f  e3FileSuffix3(co
2e5e0 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a  nst char*, char*
2e5f0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2e600 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  e sqlite3FileSuf
2e610 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66  fix3(X,Y).#endif
2e620 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f  .u8 sqlite3GetBo
2e630 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72  olean(const char
2e640 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20   *z,u8);..const 
2e650 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c  void *sqlite3Val
2e660 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76  ueText(sqlite3_v
2e670 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  alue*, u8);.int 
2e680 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
2e690 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  s(sqlite3_value*
2e6a0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
2e6b0 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73  te3ValueSetStr(s
2e6c0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69  qlite3_value*, i
2e6d0 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  nt, const void *
2e6e0 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ,u8,.           
2e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69               voi
2e700 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
2e710 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
2e720 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76  etNull(sqlite3_v
2e730 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  alue*);.void sql
2e740 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71  ite3ValueFree(sq
2e750 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 23  lite3_value*);.#
2e760 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
2e770 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71  TESTABLE.void sq
2e780 6c 69 74 65 33 52 65 73 75 6c 74 49 6e 74 52 65  lite3ResultIntRe
2e790 61 6c 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  al(sqlite3_conte
2e7a0 78 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 73 71 6c  xt*);.#endif.sql
2e7b0 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
2e7c0 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
2e7d0 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20  te3 *);.#ifndef 
2e7e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
2e7f0 36 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  6.char *sqlite3U
2e800 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20  tf16to8(sqlite3 
2e810 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
2e820 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66  int, u8);.#endif
2e830 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
2e840 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65  eFromExpr(sqlite
2e850 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c  3 *, Expr *, u8,
2e860 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
2e870 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ue **);.void sql
2e880 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
2e890 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76  finity(sqlite3_v
2e8a0 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b  alue *, u8, u8);
2e8b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e8c0 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74  AMALGAMATION.ext
2e8d0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2e8e0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f  ed char sqlite3O
2e8f0 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b  pcodeProperty[];
2e900 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68  .extern const ch
2e910 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e  ar sqlite3StrBIN
2e920 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  ARY[];.extern co
2e930 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2e940 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f  r sqlite3UpperTo
2e950 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20  Lower[];.extern 
2e960 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2e970 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65  har sqlite3Ctype
2e980 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  Map[];.extern SQ
2e990 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
2e9a0 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
2e9b0 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
2e9c0 65 72 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20  ern FuncDefHash 
2e9d0 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
2e9e0 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66  nctions;.#ifndef
2e9f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
2ea00 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
2ea10 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a  te3PendingByte;.
2ea20 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69  #endif.#endif.#i
2ea30 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
2ea40 45 0a 65 78 74 65 72 6e 20 73 71 6c 69 74 65 33  E.extern sqlite3
2ea50 5f 75 69 6e 74 36 34 20 73 71 6c 69 74 65 33 4e  _uint64 sqlite3N
2ea60 50 72 6f 66 69 6c 65 43 6e 74 3b 0a 23 65 6e 64  ProfileCnt;.#end
2ea70 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
2ea80 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c  ootPageMoved(sql
2ea90 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
2eaa0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2eab0 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65  te3Reindex(Parse
2eac0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2ead0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2eae0 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76  AlterFunctions(v
2eaf0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2eb00 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62  e3AlterRenameTab
2eb10 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
2eb20 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  st*, Token*);.vo
2eb30 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
2eb40 65 6e 61 6d 65 43 6f 6c 75 6d 6e 28 50 61 72 73  enameColumn(Pars
2eb50 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
2eb60 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ken*, Token*);.i
2eb70 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b  nt sqlite3GetTok
2eb80 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  en(const unsigne
2eb90 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29  d char *, int *)
2eba0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65  ;.void sqlite3Ne
2ebb0 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a  stedParse(Parse*
2ebc0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
2ebd0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
2ebe0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
2ebf0 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65  tatements(sqlite
2ec00 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  3*, int);.void s
2ec10 71 6c 69 74 65 33 43 6f 64 65 52 68 73 4f 66 49  qlite3CodeRhsOfI
2ec20 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  N(Parse*, Expr*,
2ec30 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2ec40 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28  e3CodeSubselect(
2ec50 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2ec60 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2ec70 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53  ctPrep(Parse*, S
2ec80 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
2ec90 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
2eca0 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75  te3SelectWrongNu
2ecb0 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73  mTermsError(Pars
2ecc0 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63  e *pParse, Selec
2ecd0 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74  t *p);.int sqlit
2ece0 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28  e3MatchSpanName(
2ecf0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2ed00 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2ed10 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2ed20 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2ed30 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73  ResolveExprNames
2ed40 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2ed50 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2ed60 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73  e3ResolveExprLis
2ed70 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  tNames(NameConte
2ed80 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  xt*, ExprList*);
2ed90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2eda0 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28  olveSelectNames(
2edb0 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2edc0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
2edd0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2ede0 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
2edf0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2ee00 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
2ee10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2ee20 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
2ee30 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
2ee40 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
2ee50 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2ee60 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
2ee70 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
2ee80 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
2ee90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2eea0 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
2eeb0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
2eec0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
2eed0 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
2eee0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2eef0 53 72 63 4c 69 73 74 20 2a 29 3b 0a 76 6f 69 64  SrcList *);.void
2ef00 20 2a 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 54   *sqlite3RenameT
2ef10 6f 6b 65 6e 4d 61 70 28 50 61 72 73 65 2a 2c 20  okenMap(Parse*, 
2ef20 76 6f 69 64 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  void*, Token*);.
2ef30 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61  void sqlite3Rena
2ef40 6d 65 54 6f 6b 65 6e 52 65 6d 61 70 28 50 61 72  meTokenRemap(Par
2ef50 73 65 2a 2c 20 76 6f 69 64 20 2a 70 54 6f 2c 20  se*, void *pTo, 
2ef60 76 6f 69 64 20 2a 70 46 72 6f 6d 29 3b 0a 76 6f  void *pFrom);.vo
2ef70 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65  id sqlite3Rename
2ef80 45 78 70 72 55 6e 6d 61 70 28 50 61 72 73 65 2a  ExprUnmap(Parse*
2ef90 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2efa0 71 6c 69 74 65 33 52 65 6e 61 6d 65 45 78 70 72  qlite3RenameExpr
2efb0 6c 69 73 74 55 6e 6d 61 70 28 50 61 72 73 65 2a  listUnmap(Parse*
2efc0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 43 6f  , ExprList*);.Co
2efd0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
2efe0 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
2eff0 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
2f000 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
2f010 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
2f020 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
2f030 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f  r*, Column*);.vo
2f040 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
2f050 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2f060 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2f070 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
2f080 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
2f090 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ler*, sqlite3_fi
2f0a0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
2f0b0 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
2f0c0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2f0d0 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
2f0e0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2f0f0 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
2f100 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
2f110 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
2f120 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
2f130 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
2f140 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
2f150 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2f160 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
2f170 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
2f180 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
2f190 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
2f1a0 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
2f1b0 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
2f1c0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
2f1d0 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
2f1e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
2f1f0 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
2f200 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
2f210 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
2f220 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
2f230 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
2f240 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
2f250 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
2f260 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2f270 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73  e3KeyInfoAlloc(s
2f280 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29  qlite3*,int,int)
2f290 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65  ;.void sqlite3Ke
2f2a0 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e  yInfoUnref(KeyIn
2f2b0 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
2f2c0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66  qlite3KeyInfoRef
2f2d0 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
2f2e0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2f2f0 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65  nfoOfIndex(Parse
2f300 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49  *, Index*);.KeyI
2f310 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2f320 6e 66 6f 46 72 6f 6d 45 78 70 72 4c 69 73 74 28  nfoFromExprList(
2f330 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2f340 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
2f350 74 20 73 71 6c 69 74 65 33 48 61 73 45 78 70 6c  t sqlite3HasExpl
2f360 69 63 69 74 4e 75 6c 6c 73 28 50 61 72 73 65 2a  icitNulls(Parse*
2f370 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 0a 23  , ExprList*);..#
2f380 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2f390 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  UG.int sqlite3Ke
2f3a0 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65  yInfoIsWriteable
2f3b0 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64  (KeyInfo*);.#end
2f3c0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72  if.int sqlite3Cr
2f3d0 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33  eateFunc(sqlite3
2f3e0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2f3f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64  , int, int, void
2f400 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73   *,.  void (*)(s
2f410 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2f420 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2f430 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
2f440 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2f450 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2f460 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 76 6f 69  alue **), .  voi
2f470 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2f480 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20  ntext*),.  void 
2f490 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2f4a0 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  ext*),.  void (*
2f4b0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2f4c0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2f4d0 61 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 46 75 6e  alue **), .  Fun
2f4e0 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
2f4f0 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64  structor.);.void
2f500 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74   sqlite3NoopDest
2f510 72 75 63 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76  ructor(void*);.v
2f520 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61  oid sqlite3OomFa
2f530 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ult(sqlite3*);.v
2f540 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c  oid sqlite3OomCl
2f550 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ear(sqlite3*);.i
2f560 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
2f570 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
2f580 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2f590 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
2f5a0 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
2f5b0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2f5c0 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
2f5d0 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c  sqlite3*, char*,
2f5e0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72   int, int);.char
2f5f0 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75   *sqlite3StrAccu
2f600 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d  mFinish(StrAccum
2f610 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f620 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
2f630 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
2f640 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2f650 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
2f660 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
2f670 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
2f680 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
2f690 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
2f6a0 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
2f6b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
2f6c0 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
2f6d0 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
2f6e0 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
2f6f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2f700 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e  OMIT_SUBQUERY.in
2f710 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
2f720 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70  ckIN(Parse*, Exp
2f730 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
2f740 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
2f750 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49  heckIN(x,y) SQLI
2f760 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69  TE_OK.#endif..#i
2f770 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2f780 4c 45 5f 53 54 41 54 34 0a 69 6e 74 20 73 71 6c  LE_STAT4.int sql
2f790 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65  ite3Stat4ProbeSe
2f7a0 74 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73  tValue(.    Pars
2f7b0 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
2f7c0 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
2f7d0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  ,int,int,int*);.
2f7e0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2f7f0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61  ValueFromExpr(Pa
2f800 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  rse*, Expr*, u8,
2f810 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
2f820 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2f830 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e  tat4ProbeFree(Un
2f840 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a  packedRecord*);.
2f850 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2f860 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c  Column(sqlite3*,
2f870 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
2f880 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  t, int, sqlite3_
2f890 76 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73  value**);.char s
2f8a0 71 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d  qlite3IndexColum
2f8b0 6e 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  nAffinity(sqlite
2f8c0 33 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29  3*, Index*, int)
2f8d0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
2f8e0 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
2f8f0 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
2f900 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23  ated parser.*/.#
2f910 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
2f920 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69  ALGAMATION.  voi
2f930 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72  d *sqlite3Parser
2f940 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75  Alloc(void*(*)(u
2f950 36 34 29 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20  64), Parse*);.  
2f960 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2f970 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
2f980 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23  id(*)(void*));.#
2f990 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2f9a0 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20  e3Parser(void*, 
2f9b0 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74  int, Token);.int
2f9c0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 61   sqlite3ParserFa
2f9d0 6c 6c 62 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66  llback(int);.#if
2f9e0 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
2f9f0 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73  ACKDEPTH.  int s
2fa00 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63  qlite3ParserStac
2fa10 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65  kPeak(void*);.#e
2fa20 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
2fa30 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73  e3AutoLoadExtens
2fa40 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2fa50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2fa60 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
2fa70 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
2fa80 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
2fa90 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73  (sqlite3*);.#els
2faa0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2fab0 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
2fac0 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  s(X).#endif..#if
2fad0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2fae0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
2faf0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
2fb00 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69  eLock(Parse *, i
2fb10 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e  nt, int, u8, con
2fb20 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73  st char *);.#els
2fb30 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2fb40 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77  te3TableLock(v,w
2fb50 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a  ,x,y,z).#endif..
2fb60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
2fb70 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ST.  int sqlite3
2fb80 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64  Utf8To8(unsigned
2fb90 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
2fba0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2fbb0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2fbc0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2fbd0 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23  e3VtabClear(Y).#
2fbe0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2fbf0 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51  VtabSync(X,Y) SQ
2fc00 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2fc10 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  e sqlite3VtabRol
2fc20 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69  lback(X).#  defi
2fc30 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  ne sqlite3VtabCo
2fc40 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e  mmit(X).#  defin
2fc50 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
2fc60 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66  ync(db) 0.#  def
2fc70 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ine sqlite3VtabL
2fc80 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
2fc90 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2fca0 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2fcb0 73 71 6c 69 74 65 33 56 74 61 62 4d 6f 64 75 6c  sqlite3VtabModul
2fcc0 65 55 6e 72 65 66 28 44 2c 58 29 0a 23 20 20 64  eUnref(D,X).#  d
2fcd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2fce0 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
2fcf0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2fd00 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c  VtabSavepoint(X,
2fd10 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b   Y, Z) SQLITE_OK
2fd20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2fd30 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29  e3GetVTable(X,Y)
2fd40 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23    ((VTable*)0).#
2fd50 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
2fd60 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
2fd70 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
2fd80 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2fd90 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63  te3VtabDisconnec
2fda0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  t(sqlite3 *db, T
2fdb0 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74  able *p);.   int
2fdc0 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
2fdd0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64  (sqlite3 *db, Vd
2fde0 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  be*);.   int sql
2fdf0 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
2fe00 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2fe10 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2fe20 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
2fe30 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
2fe40 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
2fe50 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
2fe60 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2fe70 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
2fe80 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2fe90 62 4d 6f 64 75 6c 65 55 6e 72 65 66 28 73 71 6c  bModuleUnref(sql
2fea0 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a  ite3*,Module*);.
2feb0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2fec0 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71  tabUnlockList(sq
2fed0 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20  lite3*);.   int 
2fee0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
2fef0 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  oint(sqlite3 *, 
2ff00 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f  int, int);.   vo
2ff10 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  id sqlite3VtabIm
2ff20 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a  portErrmsg(Vdbe*
2ff30 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29  , sqlite3_vtab*)
2ff40 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c  ;.   VTable *sql
2ff50 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71  ite3GetVTable(sq
2ff60 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
2ff70 0a 20 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69  .   Module *sqli
2ff80 74 65 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64  te3VtabCreateMod
2ff90 75 6c 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65  ule(.     sqlite
2ffa0 33 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63  3*,.     const c
2ffb0 68 61 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74  har*,.     const
2ffc0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a   sqlite3_module*
2ffd0 2c 0a 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20  ,.     void*,.  
2ffe0 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a     void(*)(void*
2fff0 29 0a 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e  ).   );.#  defin
30000 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
30010 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e  ync(db) ((db)->n
30020 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29  VTrans>0 && (db)
30030 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65  ->aVTrans==0).#e
30040 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
30050 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62  VtabEponymousTab
30060 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f  leInit(Parse*,Mo
30070 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dule*);.void sql
30080 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
30090 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69  sTableClear(sqli
300a0 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  te3*,Module*);.v
300b0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d  oid sqlite3VtabM
300c0 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73  akeWritable(Pars
300d0 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  e*,Table*);.void
300e0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
300f0 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  nParse(Parse*, T
30100 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
30110 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
30120 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e  d sqlite3VtabFin
30130 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ishParse(Parse*,
30140 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
30150 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69  qlite3VtabArgIni
30160 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
30170 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78  sqlite3VtabArgEx
30180 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b  tend(Parse*, Tok
30190 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
301a0 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
301b0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
301c0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61  onst char *, cha
301d0 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  r **);.int sqlit
301e0 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63  e3VtabCallConnec
301f0 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  t(Parse*, Table*
30200 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
30210 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71  abCallDestroy(sq
30220 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
30230 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
30240 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
30250 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62  (sqlite3 *, VTab
30260 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a  le *);.FuncDef *
30270 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c  sqlite3VtabOverl
30280 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  oadFunction(sqli
30290 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20  te3 *,FuncDef*, 
302a0 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29  int nArg, Expr*)
302b0 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  ;.sqlite3_int64 
302c0 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65  sqlite3StmtCurre
302d0 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63  ntTime(sqlite3_c
302e0 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
302f0 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74  lite3VdbeParamet
30300 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63  erIndex(Vdbe*, c
30310 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
30320 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61  ;.int sqlite3Tra
30330 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71  nsferBindings(sq
30340 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71  lite3_stmt *, sq
30350 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76  lite3_stmt *);.v
30360 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
30370 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a  rReset(Parse*);.
30380 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
30390 41 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 63  ABLE_NORMALIZE.c
303a0 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 6f 72 6d  har *sqlite3Norm
303b0 61 6c 69 7a 65 28 56 64 62 65 2a 2c 20 63 6f 6e  alize(Vdbe*, con
303c0 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
303d0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70  f.int sqlite3Rep
303e0 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76  repare(Vdbe*);.v
303f0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
30400 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50  istCheckLength(P
30410 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
30420 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
30430 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
30440 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c  BinaryCompareCol
30450 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78  lSeq(Parse *, Ex
30460 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69  pr *, Expr *);.i
30470 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e  nt sqlite3TempIn
30480 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c  Memory(const sql
30490 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68  ite3*);.const ch
304a0 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ar *sqlite3Journ
304b0 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b  alModename(int);
304c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
304d0 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73  OMIT_WAL.  int s
304e0 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
304f0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
30500 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  int, int*, int*)
30510 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57  ;.  int sqlite3W
30520 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f  alDefaultHook(vo
30530 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  id*,sqlite3*,con
30540 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23  st char*,int);.#
30550 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
30560 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20  LITE_OMIT_CTE.  
30570 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74  With *sqlite3Wit
30580 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68  hAdd(Parse*,With
30590 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
305a0 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76  t*,Select*);.  v
305b0 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44  oid sqlite3WithD
305c0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57  elete(sqlite3*,W
305d0 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ith*);.  void sq
305e0 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61  lite3WithPush(Pa
305f0 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29  rse*, With*, u8)
30600 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ;.#else.#define 
30610 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
30620 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73  x,y,z).#define s
30630 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65  qlite3WithDelete
30640 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 23 69 66  (x,y).#endif.#if
30650 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30660 5f 55 50 53 45 52 54 0a 20 20 55 70 73 65 72 74  _UPSERT.  Upsert
30670 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e   *sqlite3UpsertN
30680 65 77 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  ew(sqlite3*,Expr
30690 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
306a0 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20  List*,Expr*);.  
306b0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 73 65  void sqlite3Upse
306c0 72 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  rtDelete(sqlite3
306d0 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 55 70  *,Upsert*);.  Up
306e0 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73  sert *sqlite3Ups
306f0 65 72 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ertDup(sqlite3*,
30700 55 70 73 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20  Upsert*);.  int 
30710 73 71 6c 69 74 65 33 55 70 73 65 72 74 41 6e 61  sqlite3UpsertAna
30720 6c 79 7a 65 54 61 72 67 65 74 28 50 61 72 73 65  lyzeTarget(Parse
30730 2a 2c 53 72 63 4c 69 73 74 2a 2c 55 70 73 65 72  *,SrcList*,Upser
30740 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
30750 74 65 33 55 70 73 65 72 74 44 6f 55 70 64 61 74  te3UpsertDoUpdat
30760 65 28 50 61 72 73 65 2a 2c 55 70 73 65 72 74 2a  e(Parse*,Upsert*
30770 2c 54 61 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69  ,Table*,Index*,i
30780 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  nt);.#else.#defi
30790 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  ne sqlite3Upsert
307a0 4e 65 77 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28  New(v,w,x,y,z) (
307b0 28 55 70 73 65 72 74 2a 29 30 29 0a 23 64 65 66  (Upsert*)0).#def
307c0 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72  ine sqlite3Upser
307d0 74 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 64 65  tDelete(x,y).#de
307e0 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65  fine sqlite3Upse
307f0 72 74 44 75 70 28 78 2c 79 29 20 20 20 20 20 20  rtDup(x,y)      
30800 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23 65   ((Upsert*)0).#e
30810 6e 64 69 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72  ndif.../* Declar
30820 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74  ations for funct
30830 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20  ions in fkey.c. 
30840 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65  All of these are
30850 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20   replaced by.** 
30860 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20  no-op macros if 
30870 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
30880 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20   is defined. In 
30890 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72  this case no for
308a0 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63  eign.** key func
308b0 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61  tionality is ava
308c0 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f  ilable. If OMIT_
308d0 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e  TRIGGER is defin
308e0 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46  ed but.** OMIT_F
308f0 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f  OREIGN_KEY is no
30900 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20  t, only some of 
30910 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  the functions ar
30920 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a  e no-oped. In.**
30930 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69   this case forei
30940 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73  gn keys are pars
30950 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72  ed, but no other
30960 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
30970 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65  s.** provided (e
30980 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b  nforcement of FK
30990 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71   constraints req
309a0 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65  uires the trigge
309b0 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a  rs sub-system)..
309c0 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
309d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
309e0 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66  IGN_KEY) && !def
309f0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
30a00 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64  _TRIGGER).  void
30a10 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
30a20 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
30a30 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
30a40 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
30a50 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
30a60 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20  Parse*, SrcList 
30a70 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f  *, Table*);.  vo
30a80 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  id sqlite3FkActi
30a90 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ons(Parse*, Tabl
30aa0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
30ab0 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
30ac0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52    int sqlite3FkR
30ad0 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20  equired(Parse*, 
30ae0 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e  Table*, int*, in
30af0 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  t);.  u32 sqlite
30b00 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65  3FkOldmask(Parse
30b10 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b  *, Table*);.  FK
30b20 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66  ey *sqlite3FkRef
30b30 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29  erences(Table *)
30b40 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
30b50 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  e sqlite3FkActio
30b60 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ns(a,b,c,d,e,f).
30b70 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
30b80 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  3FkCheck(a,b,c,d
30b90 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
30ba0 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
30bb0 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66  le(a,b,c).  #def
30bc0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  ine sqlite3FkOld
30bd0 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20  mask(a,b)       
30be0 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
30bf0 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
30c00 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 20 20  a,b,c,d)    0.  
30c10 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
30c20 6b 52 65 66 65 72 65 6e 63 65 73 28 61 29 20 20  kReferences(a)  
30c30 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23        0.#endif.#
30c40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30c50 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
30c60 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
30c70 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
30c80 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
30c90 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
30ca0 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
30cb0 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
30cc0 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
30cd0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30ce0 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
30cf0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
30d00 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
30d10 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
30d20 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
30d30 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
30d40 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
30d50 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
30d60 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
30d70 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
30d80 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
30d90 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
30da0 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
30db0 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
30dc0 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
30dd0 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
30de0 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
30df0 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
30e00 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
30e10 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
30e20 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
30e30 74 20 69 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  t if SQLITE_UNTE
30e40 53 54 41 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74  STABLE.** is not
30e50 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66   defined..*/.#if
30e60 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
30e70 53 54 41 42 4c 45 0a 20 20 76 6f 69 64 20 73 71  STABLE.  void sq
30e80 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
30e90 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20  Malloc(void);.  
30ea0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42  void sqlite3EndB
30eb0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
30ec0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
30ed0 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  ne sqlite3BeginB
30ee0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20  enignMalloc().  
30ef0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
30f00 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
30f10 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
30f20 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
30f30 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
30f40 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a  3FindInIndex().*
30f50 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
30f60 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20  EX_ROWID        
30f70 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68  1   /* Search th
30f80 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74  e rowid of the t
30f90 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
30fa0 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20  IN_INDEX_EPH    
30fb0 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61        2   /* Sea
30fc0 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c  rch an ephemeral
30fd0 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69   b-tree */.#defi
30fe0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
30ff0 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20  X_ASC    3   /* 
31000 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41  Existing index A
31010 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
31020 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
31030 45 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a  EX_DESC   4   /*
31040 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20   Existing index 
31050 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64  DESCENDING */.#d
31060 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
31070 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20  OOP         5   
31080 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69  /* No table avai
31090 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61  lable. Use compa
310a0 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20  risons */./*.** 
310b0 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f  Allowed flags fo
310c0 72 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65  r the 3rd parame
310d0 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69  ter to sqlite3Fi
310e0 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a  ndInIndex()..*/.
310f0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
31100 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30  _NOOP_OK     0x0
31110 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65  001  /* OK to re
31120 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  turn IN_INDEX_NO
31130 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  OP */.#define IN
31140 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49  _INDEX_MEMBERSHI
31150 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e  P  0x0002  /* IN
31160 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66   operator used f
31170 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65  or membership te
31180 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  st */.#define IN
31190 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20  _INDEX_LOOP     
311a0 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e     0x0004  /* IN
311b0 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61   operator used a
311c0 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20  s a loop */.int 
311d0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
311e0 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ex(Parse *, Expr
311f0 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69   *, u32, int*, i
31200 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74  nt*, int*);..int
31210 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f   sqlite3JournalO
31220 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20  pen(sqlite3_vfs 
31230 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
31240 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c   sqlite3_file *,
31250 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
31260 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
31270 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
31280 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
31290 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
312a0 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c  MIC_WRITE) \. ||
312b0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
312c0 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
312d0 4d 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74  MIC_WRITE).  int
312e0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
312f0 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
31300 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  le *);.#endif..i
31310 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
31320 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69  lIsInMemory(sqli
31330 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f  te3_file *p);.vo
31340 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
31350 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
31360 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  _file *);..void 
31370 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
31380 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72  ightAndFlags(Par
31390 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
313a0 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45   *p);.#if SQLITE
313b0 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
313c0 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53  0.  int sqlite3S
313d0 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
313e0 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74  Select *);.  int
313f0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
31400 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20  kHeight(Parse*, 
31410 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  int);.#else.  #d
31420 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
31430 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29  ectExprHeight(x)
31440 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
31450 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
31460 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ght(x,y).#endif.
31470 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34  .u32 sqlite3Get4
31480 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b  byte(const u8*);
31490 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74  .void sqlite3Put
314a0 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b  4byte(u8*, u32);
314b0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
314c0 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
314d0 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  TIFY.  void sqli
314e0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
314f0 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20  cked(sqlite3 *, 
31500 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f  sqlite3 *);.  vo
31510 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
31520 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c  tionUnlocked(sql
31530 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69  ite3 *db);.  voi
31540 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
31550 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65  ionClosed(sqlite
31560 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20  3 *db);.#else.  
31570 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
31580 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
31590 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
315a0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
315b0 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23  nUnlocked(x).  #
315c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
315d0 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78  nnectionClosed(x
315e0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
315f0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
31600 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
31610 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63  erTrace(FILE*, c
31620 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23  har *);.#endif.#
31630 69 66 20 64 65 66 69 6e 65 64 28 59 59 43 4f 56  if defined(YYCOV
31640 45 52 41 47 45 29 0a 20 20 69 6e 74 20 73 71 6c  ERAGE).  int sql
31650 69 74 65 33 50 61 72 73 65 72 43 6f 76 65 72 61  ite3ParserCovera
31660 67 65 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69  ge(FILE*);.#endi
31670 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
31680 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
31690 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
316a0 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
316b0 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
316c0 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
316d0 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
316e0 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
316f0 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
31700 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
31710 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ges..*/.#ifdef S
31720 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
31730 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f  RACE.# define IO
31740 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71  TRACE(A)  if( sq
31750 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20  lite3IoTrace ){ 
31760 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41  sqlite3IoTrace A
31770 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ; }.  void sqlit
31780 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
31790 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f  (Vdbe*);.SQLITE_
317a0 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52  API SQLITE_EXTER
317b0 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43  N void (SQLITE_C
317c0 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54  DECL *sqlite3IoT
317d0 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72  race)(const char
317e0 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20  *,...);.#else.# 
317f0 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
31800 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
31810 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
31820 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
31830 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73  * These routines
31840 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66   are available f
31850 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65  or the mem2.c de
31860 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61  bugging memory a
31870 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79  llocator.** only
31880 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64  .  They are used
31890 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
318a0 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73  different "types
318b0 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61  " of memory.** a
318c0 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70  llocations are p
318d0 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20  roperly tracked 
318e0 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a  by the system..*
318f0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
31900 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65  ebugSetType() se
31910 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66  ts the "type" of
31920 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74   an allocation t
31930 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20  o one of.** the 
31940 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73  MEMTYPE_* macros
31950 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20   defined below. 
31960 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62   The type must b
31970 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68  e a bitmask with
31980 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74  .** a single bit
31990 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69   set..**.** sqli
319a0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
319b0 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
319c0 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  e if any of the 
319d0 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
319e0 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
319f0 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
31a00 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
31a10 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
31a20 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73  gSetType()..** s
31a30 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
31a40 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e  sType() is inten
31a50 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69  ded for use insi
31a60 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  de assert() stat
31a70 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71  ements..**.** sq
31a80 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
31a90 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
31aa0 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ue if none of th
31ab0 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
31ac0 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
31ad0 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
31ae0 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
31af0 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
31b00 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
31b10 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20  .** Perhaps the 
31b20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70  most important p
31b30 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66  oint is the diff
31b40 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d  erence between M
31b50 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61  EMTYPE_HEAP.** a
31b60 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  nd MEMTYPE_LOOKA
31b70 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c  SIDE.  If an all
31b80 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59  ocation is MEMTY
31b90 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68  PE_LOOKASIDE, th
31ba0 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d  at means.** it m
31bb0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61  ight have been a
31bc0 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b  llocated by look
31bd0 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68  aside, except th
31be0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73  e allocation was
31bf0 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72  .** too large or
31c00 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61   lookaside was a
31c10 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74  lready full.  It
31c20 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
31c30 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20   verify.** that 
31c40 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74  allocations that
31c50 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
31c60 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f   satisfied by lo
31c70 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a  okaside are not.
31c80 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74  ** passed back t
31c90 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  o non-lookaside 
31ca0 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
31cb0 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61    Asserts such a
31cc0 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65  s the.** example
31cd0 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65   above are place
31ce0 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f  d on the non-loo
31cf0 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
31d00 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79  utines to verify
31d10 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61  .** this constra
31d20 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  int..**.** All o
31d30 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20  f this is no-op 
31d40 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e  for a production
31d50 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79   build.  It only
31d60 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70   comes into.** p
31d70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c  lay when the SQL
31d80 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d  ITE_MEMDEBUG com
31d90 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
31da0 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66   is used..*/.#if
31db0 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
31dc0 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
31dd0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
31de0 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
31df0 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
31e00 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c  ugHasType(void*,
31e10 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
31e20 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
31e30 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73  (void*,u8);.#els
31e40 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
31e50 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
31e60 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70  e(X,Y)  /* no-op
31e70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   */.# define sql
31e80 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
31e90 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65  ype(X,Y)  1.# de
31ea0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
31eb0 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20  ebugNoType(X,Y) 
31ec0 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69    1.#endif.#defi
31ed0 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20  ne MEMTYPE_HEAP 
31ee0 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47        0x01  /* G
31ef0 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f  eneral heap allo
31f00 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
31f10 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  ne MEMTYPE_LOOKA
31f20 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48  SIDE  0x02  /* H
31f30 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68  eap that might h
31f40 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
31f50 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  de */.#define ME
31f60 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
31f70 20 30 78 30 34 20 20 2f 2a 20 50 61 67 65 20 63   0x04  /* Page c
31f80 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
31f90 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61   */../*.** Threa
31fa0 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a  ding interface.*
31fb0 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
31fc0 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
31fd0 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  0.int sqlite3Thr
31fe0 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65  eadCreate(SQLite
31ff0 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a  Thread**,void*(*
32000 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b  )(void*),void*);
32010 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
32020 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72  adJoin(SQLiteThr
32030 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23  ead*, void**);.#
32040 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
32050 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
32060 5f 44 42 50 41 47 45 5f 56 54 41 42 29 20 7c 7c  _DBPAGE_VTAB) ||
32070 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
32080 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
32090 33 44 62 70 61 67 65 52 65 67 69 73 74 65 72 28  3DbpageRegister(
320a0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
320b0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
320c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54  LITE_ENABLE_DBST
320d0 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69  AT_VTAB) || defi
320e0 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
320f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74  .int sqlite3Dbst
32100 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  atRegister(sqlit
32110 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e3*);.#endif..in
32120 74 20 73 71 6c 69 74 65 33 45 78 70 72 56 65 63  t sqlite3ExprVec
32130 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45  torSize(Expr *pE
32140 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
32150 33 45 78 70 72 49 73 56 65 63 74 6f 72 28 45 78  3ExprIsVector(Ex
32160 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
32170 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46   *sqlite3VectorF
32180 69 65 6c 64 53 75 62 65 78 70 72 28 45 78 70 72  ieldSubexpr(Expr
32190 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
321a0 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65 63  qlite3ExprForVec
321b0 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c  torField(Parse*,
321c0 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  Expr*,int);.void
321d0 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72   sqlite3VectorEr
321e0 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45  rorMsg(Parse*, E
321f0 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  xpr*);..#ifndef 
32200 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
32210 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a  ILEOPTION_DIAGS.
32220 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c  const char **sql
32230 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f  ite3CompileOptio
32240 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a  ns(int *pnOpt);.
32250 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f  #endif..#endif /
32260 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f  * SQLITEINT_H */
32270 0a                                               .