/ Hex Artifact Content
Login

Artifact 88d98a058528319eebb598a71353faaf81ea6d070ebf3c83cccfb19418fdc1a0:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48  ed(HAVE_STDINT_H
1f20: 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  )   /* Use this 
1f30: 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20  case if we have 
1f40: 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a  ANSI headers */.
1f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1f60: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1f70: 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74  (void*)(intptr_t
1f80: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
1f90: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1fa0: 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70  (X)  ((int)(intp
1fb0: 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 69 66 20  tr_t)(X)).#elif 
1fc0: 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46  defined(__PTRDIF
1fd0: 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68  F_TYPE__)  /* Th
1fe0: 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77  is case should w
1ff0: 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23  ork for GCC */.#
2000: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2010: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2020: 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46  void*)(__PTRDIFF
2030: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64  _TYPE__)(X)).# d
2040: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
2050: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
2060: 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  t)(__PTRDIFF_TYP
2070: 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21  E__)(X)).#elif !
2080: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
2090: 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73  )       /* Works
20a0: 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f   for compilers o
20b0: 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a  ther than LLVM *
20c0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
20d0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
20e0: 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72   ((void*)&((char
20f0: 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e  *)0)[X]).# defin
2100: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2110: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28  INT(X)  ((int)((
2120: 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a  (char*)X)-(char*
2130: 29 30 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  )0)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 20 7c 7c 20  d(i386)      || 
6dd0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
6de0: 29 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  )      || define
6df0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6e00: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6e10: 5f 5f 78 38 36 5f 36 34 29 20 20 7c 7c 20 64 65  __x86_64)  || de
6e20: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
6e30: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
6e40: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
6e50: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
6e60: 5f 41 4d 44 36 34 29 20 20 7c 7c 20 64 65 66 69  _AMD64)  || defi
6e70: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6e80: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6e90: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6ea0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6eb0: 4d 45 4c 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEL__) || define
6ec0: 64 28 5f 5f 41 41 52 43 48 36 34 45 4c 5f 5f 29  d(__AARCH64EL__)
6ed0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
6ee0: 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e 65  RM64).#   define
6ef0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
6f00: 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69 66  R    1234.# elif
6f10: 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20   defined(sparc) 
6f20: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6f30: 5f 70 70 63 5f 5f 29 20 7c 7c 20 5c 0a 20 20 20  _ppc__) || \.   
6f40: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6f50: 4d 45 42 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEB__) || define
6f60: 64 28 5f 5f 41 41 52 43 48 36 34 45 42 5f 5f 29  d(__AARCH64EB__)
6f70: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6f80: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
6f90: 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20  4321.# else.#   
6fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6fb0: 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69  TEORDER 0.# endi
6fc0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  f.#endif.#if SQL
6fd0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34  ITE_BYTEORDER==4
6fe0: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
6ff0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
7000: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
7010: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
7020: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
7030: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
7040: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
7050: 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  lif SQLITE_BYTEO
7060: 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66  RDER==1234.# def
7070: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7080: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
7090: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
70a0: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
70b0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
70c0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
70d0: 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64  16LE.#else.# ifd
70e0: 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
70f0: 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69  MATION.  const i
7100: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
7110: 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65  1;.# else.  exte
7120: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
7130: 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66  ite3one;.# endif
7140: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7150: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
7160: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7170: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
7180: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7190: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
71a0: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
71b0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
71c0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
71d0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
71e0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
71f0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
7200: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
7210: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
7220: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
7230: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
7240: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
7250: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
7260: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
7270: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
7280: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
7290: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
72a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
72b0: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
72c0: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
72d0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
72e0: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
72f0: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
7300: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
7310: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
7320: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20  ./*.** Round up 
7330: 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20  a number to the 
7340: 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74  next larger mult
7350: 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73  iple of 8.  This
7360: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66   is used.** to f
7370: 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67  orce 8-byte alig
7380: 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20  nment on 64-bit 
7390: 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a  architectures..*
73a0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38  /.#define ROUND8
73b0: 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29  (x)     (((x)+7)
73c0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e  &~7)../*.** Roun
73d0: 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65  d down to the ne
73e0: 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f  arest multiple o
73f0: 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  f 8.*/.#define R
7400: 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78  OUNDDOWN8(x) ((x
7410: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  )&~7)../*.** Ass
7420: 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69  ert that the poi
7430: 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65  nter X is aligne
7440: 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62  d to an 8-byte b
7450: 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a  oundary.  This.*
7460: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
7470: 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65  only within asse
7480: 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74  rt() to verify t
7490: 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74  hat the code get
74a0: 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65  s.** all alignme
74b0: 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  nt restrictions 
74c0: 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45  correct..**.** E
74d0: 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45  xcept, if SQLITE
74e0: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
74f0: 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65  MALLOC is define
7500: 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75  d, then the.** u
7510: 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63  nderlying malloc
7520: 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  () implementatio
7530: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
7540: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
7550: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
7560: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
7570: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
7580: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
7590: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
75a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
75b0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
75c0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
75d0: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
75e0: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
75f0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
7600: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
7610: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
7620: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
7630: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
7640: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
7650: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
7660: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
7670: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
7680: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
7690: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
76a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
76b0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
76c0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
76d0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
76e0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
76f0: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
7700: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
7710: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
7720: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
7730: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
7740: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
7750: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
7760: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
7770: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e  ditionals.h>.#en
7780: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
7790: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
77a0: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
77b0: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
77c0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
77d0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
77e0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
77f0: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
7800: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7810: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
7820: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
7830: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
7840: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
7850: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
7860: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7870: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
7880: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
7890: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
78a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
78b0: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
78c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
78d0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
78e0: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
78f0: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
7900: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
7910: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
7920: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
7930: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
7940: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
7950: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
7960: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
7970: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
7980: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
7990: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
79a0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
79b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
79c0: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
79d0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
79e0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
79f0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7a00: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
7a10: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7a20: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
7a30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7a40: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
7a50: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
7a60: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
7a70: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
7a80: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
7a90: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
7aa0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
7ab0: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
7ac0: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
7ad0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
7ae0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
7af0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
7b00: 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
7b10: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  E).# define SELE
7b20: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
7b30: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
7b40: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7b50: 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  BLED 0.#endif../
7b60: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7b70: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7b80: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
7b90: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
7ba0: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7bb0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
7bc0: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
7bd0: 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  dle..**.** The s
7be0: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
7bf0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
7c00: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
7c10: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
7c20: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
7c30: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
7c40: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
7c50: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
7c60: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
7c70: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
7c80: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
7c90: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
7ca0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7cb0: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
7cc0: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
7cd0: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
7ce0: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
7cf0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
7d00: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
7d10: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
7d20: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
7d30: 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69  BusyHandler)(voi
7d40: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
7d50: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
7d60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79  */.  void *pBusy
7d70: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7d80: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
7d90: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
7da0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
7db0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
7dd0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7de0: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
7df0: 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c  /.  u8 bExtraFil
7e00: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7e10: 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65        /* Include
7e20: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73   sqlite3_file as
7e30: 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f   callback arg */
7e40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
7e50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7e60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
7e70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7e80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
7e90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
7ea0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
7eb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
7ec0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
7ed0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
7ee0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
7ef0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
7f00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
7f10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
7f20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
7f30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7f40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
7f50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
7f60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
7f70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
7f80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
7f90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
7fa0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
7fb0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
7fc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
7fd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
7fe0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
7ff0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
8000: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
8010: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
8020: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
8030: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
8040: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
8050: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
8060: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
8070: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
8080: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
8090: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
80a0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
80b0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
80c0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
80d0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
80e0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
80f0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
8100: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
8110: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
8120: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
8130: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
8140: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
8150: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
8160: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
8170: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
8180: 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61   the.** one para
8190: 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72  meter that destr
81a0: 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20  uctors normally 
81b0: 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76  want.  So we hav
81c0: 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a  e to introduce.*
81d0: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
81e0: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
81f0: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
8200: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
8210: 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  ny.** pointer wi
8220: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
8230: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
8240: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
8250: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
8260: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
8270: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
8280: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
8290: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
82a0: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
82b0: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
82c0: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
82d0: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
82e0: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
82f0: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
8300: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
8310: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
8320: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
8330: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
8340: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
8350: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
8360: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
8370: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
8380: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
8390: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
83a0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
83b0: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
83c0: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
83d0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
83e0: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
83f0: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
8400: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
8410: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
8420: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
8430: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
8440: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
8450: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
8460: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
8470: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
8480: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
8490: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
84a0: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
84b0: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
84c0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
84d0: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
84e0: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
84f0: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
8500: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
8510: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
8520: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
8530: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
8540: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
8550: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
8560: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
8570: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
8580: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
8590: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
85a0: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
85b0: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
85c0: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
85d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
85e0: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
85f0: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
8600: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8610: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
8620: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
8630: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
8640: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
8650: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
8660: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
8670: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
8680: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
8690: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
86a0: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
86b0: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
86c0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
86d0: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
86e0: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
86f0: 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  ITE_WSD.  #defin
8700: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
8710: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8720: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
8730: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
8740: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
8750: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
8760: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
8770: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
8780: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
8790: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
87a0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
87b0: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
87c0: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
87d0: 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74  berately.** left
87e0: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
87f0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
8800: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
8810: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
8820: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
8830: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
8840: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
8850: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
8860: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
8870: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
8880: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
8890: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
88a0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
88b0: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
88c0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
88d0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
88e0: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
88f0: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
8900: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
8910: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
8920: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
8930: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
8940: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
8950: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8960: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
8970: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
8980: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
8990: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
89a0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
89b0: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
89c0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
89d0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
89e0: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
89f0: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
8a00: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
8a10: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
8a20: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
8a30: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
8a40: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
8a50: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
8a60: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
8a70: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
8a80: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
8a90: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
8aa0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
8ab0: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
8ac0: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
8ad0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
8ae0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
8af0: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
8b00: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
8b10: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b20: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
8b30: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
8b40: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
8b50: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
8b60: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
8b70: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
8b80: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
8b90: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
8ba0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
8bb0: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
8bc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8bd0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
8be0: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
8bf0: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
8c00: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
8c10: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
8c20: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
8c30: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
8c40: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
8c50: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
8c60: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
8c70: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
8c80: 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61 50  f struct SchemaP
8c90: 6f 6f 6c 20 53 63 68 65 6d 61 50 6f 6f 6c 3b 0a  ool SchemaPool;.
8ca0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
8cb0: 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65  xpr Expr;.typede
8cc0: 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  f struct ExprLis
8cd0: 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65  t ExprList;.type
8ce0: 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20  def struct FKey 
8cf0: 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74  FKey;.typedef st
8d00: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
8d10: 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63 74  tor FuncDestruct
8d20: 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  or;.typedef stru
8d30: 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44  ct FuncDef FuncD
8d40: 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ef;.typedef stru
8d50: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 46  ct FuncDefHash F
8d60: 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65  uncDefHash;.type
8d70: 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69 73  def struct IdLis
8d80: 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65  t IdList;.typede
8d90: 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20 49  f struct Index I
8da0: 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74  ndex;.typedef st
8db0: 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
8dc0: 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79   IndexSample;.ty
8dd0: 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79  pedef struct Key
8de0: 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a  Class KeyClass;.
8df0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
8e00: 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a  eyInfo KeyInfo;.
8e10: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
8e20: 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69  ookaside Lookasi
8e30: 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  de;.typedef stru
8e40: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ct LookasideSlot
8e50: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a   LookasideSlot;.
8e60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4d  typedef struct M
8e70: 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79  odule Module;.ty
8e80: 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d  pedef struct Nam
8e90: 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e  eContext NameCon
8ea0: 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74  text;.typedef st
8eb0: 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73 65  ruct Parse Parse
8ec0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8ed0: 20 50 72 65 55 70 64 61 74 65 20 50 72 65 55 70   PreUpdate PreUp
8ee0: 64 61 74 65 3b 0a 74 79 70 65 64 65 66 20 73 74  date;.typedef st
8ef0: 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
8f00: 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75 6d  ents PrintfArgum
8f10: 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73 74  ents;.typedef st
8f20: 72 75 63 74 20 52 65 6e 61 6d 65 54 6f 6b 65 6e  ruct RenameToken
8f30: 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 3b 0a 74 79   RenameToken;.ty
8f40: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
8f50: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
8f60: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
8f70: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
8f80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
8f90: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
8fa0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c  pedef struct SQL
8fb0: 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65  iteThread SQLite
8fc0: 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20  Thread;.typedef 
8fd0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
8fe0: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
8ff0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
9000: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
9010: 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c  pedef struct sql
9020: 69 74 65 33 5f 73 74 72 20 53 74 72 41 63 63 75  ite3_str StrAccu
9030: 6d 3b 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20 61  m; /* Internal a
9040: 6c 69 61 73 20 66 6f 72 20 73 71 6c 69 74 65 33  lias for sqlite3
9050: 5f 73 74 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  _str */.typedef 
9060: 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62  struct Table Tab
9070: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
9080: 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62  ct TableLock Tab
9090: 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20  leLock;.typedef 
90a0: 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b  struct Token Tok
90b0: 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  en;.typedef stru
90c0: 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65 65  ct TreeView Tree
90d0: 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73 74  View;.typedef st
90e0: 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69  ruct Trigger Tri
90f0: 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  gger;.typedef st
9100: 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
9110: 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65  TriggerPrg;.type
9120: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
9130: 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74  erStep TriggerSt
9140: 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ep;.typedef stru
9150: 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ct UnpackedRecor
9160: 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  d UnpackedRecord
9170: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9180: 20 55 70 73 65 72 74 20 55 70 73 65 72 74 3b 0a   Upsert Upsert;.
9190: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56  typedef struct V
91a0: 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79  Table VTable;.ty
91b0: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61  pedef struct Vta
91c0: 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79  bCtx VtabCtx;.ty
91d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c  pedef struct Wal
91e0: 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65  ker Walker;.type
91f0: 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65  def struct Where
9200: 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a  Info WhereInfo;.
9210: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
9220: 69 6e 64 6f 77 20 57 69 6e 64 6f 77 3b 0a 74 79  indow Window;.ty
9230: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74  pedef struct Wit
9240: 68 20 57 69 74 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20  h With;.../*.** 
9250: 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61  The bitmask data
9260: 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c  type defined bel
9270: 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76  ow is used for v
9280: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
9290: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  ions..**.** Chan
92a0: 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61  ging this from a
92b0: 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d   64-bit to a 32-
92c0: 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20  bit type limits 
92d0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a  the number of.**
92e0: 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69   tables in a joi
92f0: 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20  n to 32 instead 
9300: 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61  of 64.  But it a
9310: 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20  lso reduces the 
9320: 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c  size.** of the l
9330: 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79  ibrary by 738 by
9340: 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a  tes on ix86..*/.
9350: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 42 49  #ifdef SQLITE_BI
9360: 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74 79 70  TMASK_TYPE.  typ
9370: 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d  edef SQLITE_BITM
9380: 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61 73 6b  ASK_TYPE Bitmask
9390: 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
93a0: 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23  f u64 Bitmask;.#
93b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
93c0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
93d0: 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
93e0: 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
93f0: 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
9400: 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
9410: 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
9420: 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
9430: 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
9440: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
9450: 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
9460: 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66  sk)1)<<(n)).#def
9470: 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29  ine MASKBIT32(n)
9480: 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74   (((unsigned int
9490: 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
94a0: 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20 20 28  e ALLBITS      (
94b0: 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a  (Bitmask)-1)../*
94c0: 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74 20   A VList object 
94d0: 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69 6e  records a mappin
94e0: 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d 65  g between parame
94f0: 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f 77  ters/variables/w
9500: 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20 74  ildcards.** in t
9510: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
9520: 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c 20   (such as $abc, 
9530: 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20 61  @pqr, or :xyz) a
9540: 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a 2a  nd the integer.*
9550: 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  * variable numbe
9560: 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
9570: 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65 72  h that parameter
9580: 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d 61  .  See the forma
9590: 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a 2a  t description.**
95a0: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 56   on the sqlite3V
95b0: 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69 6e  ListAdd() routin
95c0: 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72  e for more infor
95d0: 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73 74  mation.  A VList
95e0: 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75   is really.** ju
95f0: 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69  st an array of i
9600: 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70 65  ntegers..*/.type
9610: 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a 0a  def int VList;..
9620: 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72  /*.** Defer sour
9630: 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20  cing vdbe.h and 
9640: 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66  btree.h until af
9650: 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64  ter the "u8" and
9660: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
9670: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
9680: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
9690: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
96a0: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
96b0: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
96c0: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
96d0: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
96e0: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
96f0: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
9700: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
9710: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
9720: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  h".#include "os.
9730: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
9740: 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51  ex.h"../* The SQ
9750: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
9760: 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  LE compile-time 
9770: 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 73  option used to s
9780: 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2a  et the default.*
9790: 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  * synchronous se
97a0: 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e 20  tting to EXTRA. 
97b0: 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72   It is no longer
97c0: 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23   supported..*/.#
97d0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54  ifdef SQLITE_EXT
97e0: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61 72  RA_DURABLE.# war
97f0: 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45 5f  ning Use SQLITE_
9800: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9810: 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f 66  OUS=3 instead of
9820: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9830: 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 53  RABLE.# define S
9840: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9850: 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64  NCHRONOUS 3.#end
9860: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c  if../*.** Defaul
9870: 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65  t synchronous le
9880: 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  vels..**.** Note
9890: 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74 6f   that (for histo
98a0: 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74 68  rcal reasons) th
98b0: 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  e PAGER_SYNCHRON
98c0: 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66  OUS_* macros dif
98d0: 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  fer.** from the 
98e0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
98f0: 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65  YNCHRONOUS value
9900: 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20   by 1..**.**    
9910: 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59 4e         PAGER_SYN
9920: 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20 44  CHRONOUS       D
9930: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9940: 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20 20  US.**   OFF     
9950: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
9960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9970: 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20  0.**   NORMAL   
9980: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
99a0: 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20 20  .**   FULL      
99b0: 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20      3           
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 0a                2.
99d0: 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20 20  **   EXTRA      
99e0: 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20 20     4            
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a 2a               3.*
9a00: 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d 41  *.** The "PRAGMA
9a10: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74   synchronous" st
9a20: 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65  atement also use
9a30: 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  s the zero-based
9a40: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20   numbers..** In 
9a50: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
9a60: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9a70: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
9a80: 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e   all external in
9a90: 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20  terfaces.** and 
9aa0: 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76 61  the one-based va
9ab0: 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  lues are used in
9ac0: 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66  ternally..*/.#if
9ad0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
9ae0: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
9af0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9b00: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9b10: 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69 66  OUS 2.#endif.#if
9b20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
9b30: 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e  ULT_WAL_SYNCHRON
9b40: 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  OUS.# define SQL
9b50: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f  ITE_DEFAULT_WAL_
9b60: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49  SYNCHRONOUS SQLI
9b70: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9b80: 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f  RONOUS.#endif../
9b90: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
9ba0: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
9bb0: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
9bc0: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
9bd0: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
9be0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
9bf0: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
9c00: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
9c10: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
9c20: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
9c30: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
9c40: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
9c50: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
9c60: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
9c70: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
9c80: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
9c90: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
9ca0: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
9cb0: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
9cc0: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
9cd0: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
9ce0: 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20 20   *zDbSName;     
9cf0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
9d00: 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68 65   database. (sche
9d10: 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69 6c  ma name, not fil
9d20: 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72 65  ename) */.  Btre
9d30: 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
9d40: 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73   /* The B*Tree s
9d50: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 69  tructure for thi
9d60: 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  s database file 
9d70: 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c  */.  u8 safety_l
9d80: 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77  evel;     /* How
9d90: 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20 73   aggressive at s
9da0: 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64  yncing data to d
9db0: 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79 6e  isk */.  u8 bSyn
9dc0: 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  cSet;         /*
9dd0: 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d 41   True if "PRAGMA
9de0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22 20   synchronous=N" 
9df0: 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f 0a  has been run */.
9e00: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
9e10: 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a;     /* Pointe
9e20: 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63  r to database sc
9e30: 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73  hema (possibly s
9e40: 68 61 72 65 64 29 20 2a 2f 0a 23 69 66 64 65 66  hared) */.#ifdef
9e50: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
9e60: 48 41 52 45 44 5f 53 43 48 45 4d 41 0a 20 20 53  HARED_SCHEMA.  S
9e70: 63 68 65 6d 61 50 6f 6f 6c 20 2a 70 53 50 6f 6f  chemaPool *pSPoo
9e80: 6c 3b 20 20 2f 2a 20 46 6f 72 20 52 45 55 53 45  l;  /* For REUSE
9e90: 5f 53 43 48 45 4d 41 20 6d 6f 64 65 20 2a 2f 0a  _SCHEMA mode */.
9ea0: 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
9eb0: 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
9ec0: 66 20 61 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  f all VTable obj
9ed0: 65 63 74 73 20 28 52 45 55 53 45 5f 53 43 48 45  ects (REUSE_SCHE
9ee0: 4d 41 20 6d 6f 64 65 20 6f 6e 6c 79 29 20 2a 2f  MA mode only) */
9ef0: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
9f00: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
9f10: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
9f20: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
9f30: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
9f40: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
9f50: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
9f60: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
9f70: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
9f80: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
9f90: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
9fa0: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
9fb0: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
9fc0: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
9fd0: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
9fe0: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
9ff0: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
a000: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
a010: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
a020: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
a030: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
a040: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
a050: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
a060: 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  **.** Schema obj
a070: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
a080: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
a090: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
a0a0: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
a0b0: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
a0c0: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
a0d0: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
a0e0: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
a0f0: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
a100: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
a110: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
a120: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
a130: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
a140: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
a150: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
a160: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
a170: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
a180: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
a190: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
a1a0: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
a1b0: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
a1c0: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
a1d0: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
a1e0: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
a1f0: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
a200: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
a210: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
a220: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
a230: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
a240: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
a250: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
a260: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
a270: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
a280: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
a290: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
a2a0: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
a2b0: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
a2c0: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
a2d0: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
a2e0: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
a2f0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
a300: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
a310: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
a320: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
a330: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
a340: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
a350: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
a360: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
a370: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
a380: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
a390: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
a3a0: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
a3b0: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
a3c0: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
a3d0: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
a3e0: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
a3f0: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
a400: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
a410: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
a420: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
a430: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
a440: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
a450: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
a460: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
a470: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
a480: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
a490: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
a4a0: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
a4b0: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
a4c0: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
a4d0: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
a4e0: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
a4f0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
a500: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
a510: 68 65 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  he */.#ifdef SQL
a520: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 48 41 52 45  ITE_ENABLE_SHARE
a530: 44 5f 53 43 48 45 4d 41 0a 20 20 53 63 68 65 6d  D_SCHEMA.  Schem
a540: 61 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  a *pNext;       
a550: 2f 2a 20 4e 65 78 74 20 53 63 68 65 6d 61 20 6f  /* Next Schema o
a560: 62 6a 65 63 74 20 53 63 68 65 6d 61 50 6f 6f 6c  bject SchemaPool
a570: 20 28 52 45 55 53 45 5f 53 43 48 45 4d 41 29 20   (REUSE_SCHEMA) 
a580: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
a590: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
a5a0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
a5b0: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
a5c0: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a  ear bits in the.
a5d0: 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66  ** Db.pSchema->f
a5e0: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
a5f0: 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70  define DbHasProp
a600: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
a610: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
a620: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
a630: 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
a640: 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72  efine DbHasAnyPr
a650: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28  operty(D,I,P)  (
a660: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
a670: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a680: 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
a690: 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79  ne DbSetProperty
a6a0: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d  (D,I,P)     (D)-
a6b0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a6c0: 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50  >schemaFlags|=(P
a6d0: 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61  ).#define DbClea
a6e0: 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  rProperty(D,I,P)
a6f0: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
a700: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a710: 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a  ags&=~(P)../*.**
a720: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
a730: 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65  for the DB.pSche
a740: 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e  ma->flags field.
a750: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63  .**.** The DB_Sc
a760: 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20  hemaLoaded flag 
a770: 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65  is set after the
a780: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
a790: 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61   has been.** rea
a7a0: 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20  d into internal 
a7b0: 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  hash tables..**.
a7c0: 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ** DB_UnresetVie
a7d0: 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e  ws means that on
a7e0: 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20  e or more views 
a7f0: 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  have column name
a800: 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62  s that.** have b
a810: 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20  een filled out. 
a820: 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63   If the schema c
a830: 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f  hanges, these co
a840: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74  lumn names might
a850: 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20  .** changes and 
a860: 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c  so the view will
a870: 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65   need to be rese
a880: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  t..*/.#define DB
a890: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20  _SchemaLoaded   
a8a0: 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20   0x0001  /* The 
a8b0: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20  schema has been 
a8c0: 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e  loaded */.#defin
a8d0: 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  e DB_UnresetView
a8e0: 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  s    0x0002  /* 
a8f0: 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20  Some views have 
a900: 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e  defined column n
a910: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
a920: 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20  DB_Empty        
a930: 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68     0x0004  /* Th
a940: 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20  e file is empty 
a950: 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29  (length 0 bytes)
a960: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 52   */.#define DB_R
a970: 65 73 65 74 57 61 6e 74 65 64 20 20 20 20 20 30  esetWanted     0
a980: 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65 74 20  x0008  /* Reset 
a990: 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20  the schema when 
a9a0: 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a  nSchemaLock==0 *
a9b0: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  /../*.** The num
a9c0: 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74  ber of different
a9d0: 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73   kinds of things
a9e0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d   that can be lim
a9f0: 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68  ited.** using th
aa00: 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28  e sqlite3_limit(
aa10: 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a  ) interface..*/.
aa20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
aa30: 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c  _LIMIT (SQLITE_L
aa40: 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
aa50: 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f  ADS+1)../*.** Lo
aa60: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69  okaside malloc i
aa70: 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64  s a set of fixed
aa80: 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68  -size buffers th
aa90: 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a  at can be used.*
aaa0: 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61  * to satisfy sma
aab0: 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d  ll transient mem
aac0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
aad0: 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65  equests for obje
aae0: 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65  cts.** associate
aaf0: 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  d with a particu
ab00: 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e  lar database con
ab10: 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73  nection.  The us
ab20: 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64  e of.** lookasid
ab30: 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65  e malloc provide
ab40: 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20  s a significant 
ab50: 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61  performance enha
ab60: 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72  ncement.** (appr
ab70: 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64  ox 10%) by avoid
ab80: 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c  ing numerous mal
ab90: 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74  loc/free request
aba0: 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  s while parsing.
abb0: 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ** SQL statement
abc0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f  s..**.** The Loo
abd0: 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65  kaside structure
abe0: 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61   holds configura
abf0: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
ac00: 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f   about the.** lo
ac10: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73  okaside malloc s
ac20: 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20  ubsystem.  Each 
ac30: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
ac40: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a   allocation in.*
ac50: 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20  * the lookaside 
ac60: 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f  subsystem is sto
ac70: 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20  red on a linked 
ac80: 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64  list of Lookasid
ac90: 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73  eSlot.** objects
aca0: 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ..**.** Lookasid
acb0: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  e allocations ar
acc0: 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66  e only allowed f
acd0: 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  or objects that 
ace0: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a  are associated.*
acf0: 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  * with a particu
ad00: 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e  lar database con
ad10: 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c  nection.  Hence,
ad20: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
ad30: 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65  ion cannot.** be
ad40: 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61   stored in looka
ad50: 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20  side because in 
ad60: 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
ad70: 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66  e the schema inf
ad80: 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73  ormation.** is s
ad90: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
ada0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
adb0: 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f  ctions.  Therefo
adc0: 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e  re, while parsin
add0: 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f  g.** schema info
ade0: 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f  rmation, the Loo
adf0: 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20  kaside.bEnabled 
ae00: 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20  flag is cleared 
ae10: 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61  so that.** looka
ae20: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
ae30: 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f   are not used to
ae40: 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73   construct the s
ae50: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a  chema objects..*
ae60: 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  /.struct Lookasi
ae70: 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61  de {.  u32 bDisa
ae80: 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
ae90: 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74  * Only operate t
aea0: 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65  he lookaside whe
aeb0: 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20  n zero */.  u16 
aec0: 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sz;             
aed0: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
aee0: 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79  ach buffer in by
aef0: 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c  tes */.  u8 bMal
af00: 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20  loced;          
af10: 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61   /* True if pSta
af20: 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  rt obtained from
af30: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
af40: 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f 74  ) */.  u32 nSlot
af50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
af60: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b  * Number of look
af70: 61 73 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c 6f  aside slots allo
af80: 63 61 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 61  cated */.  u32 a
af90: 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20  nStat[3];       
afa0: 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20     /* 0: hits.  
afb0: 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20  1: size misses. 
afc0: 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20   2: full misses 
afd0: 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  */.  LookasideSl
afe0: 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a 20  ot *pInit;   /* 
aff0: 4c 69 73 74 20 6f 66 20 62 75 66 66 65 72 73 20  List of buffers 
b000: 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
b010: 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69  sed */.  Lookasi
b020: 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20  deSlot *pFree;  
b030: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69   /* List of avai
b040: 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f  lable buffers */
b050: 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b  .  void *pStart;
b060: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
b070: 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69  rst byte of avai
b080: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61  lable memory spa
b090: 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45  ce */.  void *pE
b0a0: 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
b0b0: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61  /* First byte pa
b0c0: 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61  st end of availa
b0d0: 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a  ble space */.};.
b0e0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
b0f0: 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69  Slot {.  Lookasi
b100: 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20  deSlot *pNext;  
b110: 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72    /* Next buffer
b120: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20   in the list of 
b130: 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  free buffers */.
b140: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68  };../*.** A hash
b150: 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74   table for built
b160: 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  -in function def
b170: 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c  initions.  (Appl
b180: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a  ication-defined.
b190: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65  ** functions use
b1a0: 20 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65   a regular table
b1b0: 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68   table from hash
b1c0: 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20  .h.).**.** Hash 
b1d0: 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72  each FuncDef str
b1e0: 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20  ucture into one 
b1f0: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61  of the FuncDefHa
b200: 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a  sh.a[] slots..**
b210: 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20   Collisions are 
b220: 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75  on the FuncDef.u
b230: 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 20 20 55  .pHash chain.  U
b240: 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  se the SQLITE_FU
b250: 4e 43 5f 48 41 53 48 28 29 0a 2a 2a 20 6d 61 63  NC_HASH().** mac
b260: 72 6f 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 20  ro to compute a 
b270: 68 61 73 68 20 6f 6e 20 74 68 65 20 66 75 6e 63  hash on the func
b280: 74 69 6f 6e 20 6e 61 6d 65 2e 0a 2a 2f 0a 23 64  tion name..*/.#d
b290: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
b2a0: 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74 72  C_HASH_SZ 23.str
b2b0: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
b2c0: 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 53  {.  FuncDef *a[S
b2d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b2e0: 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  SZ];       /* Ha
b2f0: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
b300: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 23 64 65  ctions */.};.#de
b310: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
b320: 5f 48 41 53 48 28 43 2c 4c 29 20 28 28 28 43 29  _HASH(C,L) (((C)
b330: 2b 28 4c 29 29 25 53 51 4c 49 54 45 5f 46 55 4e  +(L))%SQLITE_FUN
b340: 43 5f 48 41 53 48 5f 53 5a 29 0a 0a 23 69 66 64  C_HASH_SZ)..#ifd
b350: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
b360: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a  UTHENTICATION./*
b370: 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** Information 
b380: 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c  held in the "sql
b390: 69 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63  ite3" database c
b3a0: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
b3b0: 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
b3c0: 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68  manage user auth
b3d0: 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74  entication..*/.t
b3e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71  ypedef struct sq
b3f0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73  lite3_userauth s
b400: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b  qlite3_userauth;
b410: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f  .struct sqlite3_
b420: 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20  userauth {.  u8 
b430: 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20  authLevel;      
b440: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
b450: 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61  rrent authentica
b460: 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  tion level */.  
b470: 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20  int nAuthPW;    
b480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b490: 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75   Size of the zAu
b4a0: 74 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f  thPW in bytes */
b4b0: 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57  .  char *zAuthPW
b4c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b4d0: 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65   /* Password use
b4e0: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
b4f0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  e */.  char *zAu
b500: 74 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  thUser;         
b510: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d       /* User nam
b520: 65 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e  e used to authen
b530: 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ticate */.};../*
b540: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
b550: 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72  for sqlite3_user
b560: 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a  auth.authLevel *
b570: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
b580: 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20  Unknown     0   
b590: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
b5a0: 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63  ion not yet chec
b5b0: 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ked */.#define U
b5c0: 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20  AUTH_Fail       
b5d0: 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61   1     /* User a
b5e0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61  uthentication fa
b5f0: 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  iled */.#define 
b600: 55 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20  UAUTH_User      
b610: 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65    2     /* Authe
b620: 6e 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f  nticated as a no
b630: 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65  rmal user */.#de
b640: 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e  fine UAUTH_Admin
b650: 20 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20         3     /* 
b660: 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73  Authenticated as
b670: 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f   an administrato
b680: 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f  r */../* Functio
b690: 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20  ns used only by 
b6a0: 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69  user authorizati
b6b0: 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20  on logic */.int 
b6c0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54  sqlite3UserAuthT
b6d0: 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  able(const char*
b6e0: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  );.int sqlite3Us
b6f0: 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e  erAuthCheckLogin
b700: 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
b710: 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64  char*,u8*);.void
b720: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
b730: 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  Init(sqlite3*);.
b740: 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79 70  void sqlite3Cryp
b750: 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f  tFunc(sqlite3_co
b760: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
b770: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65  e3_value**);..#e
b780: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55  ndif /* SQLITE_U
b790: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
b7a0: 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70  ON */../*.** typ
b7b0: 65 64 65 66 20 66 6f 72 20 74 68 65 20 61 75 74  edef for the aut
b7c0: 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62  horization callb
b7d0: 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  ack function..*/
b7e0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
b7f0: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
b800: 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74  ON.  typedef int
b810: 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68   (*sqlite3_xauth
b820: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
b830: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
b840: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
b850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
b880: 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  st char*);.#else
b890: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
b8a0: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
b8b0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
b8c0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b8d0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
b900: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
b910: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
b920: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
b930: 45 44 0a 2f 2a 20 54 68 69 73 20 69 73 20 61 6e  ED./* This is an
b940: 20 65 78 74 72 61 20 53 51 4c 49 54 45 5f 54 52   extra SQLITE_TR
b950: 41 43 45 20 6d 61 63 72 6f 20 74 68 61 74 20 69  ACE macro that i
b960: 6e 64 69 63 61 74 65 73 20 22 6c 65 67 61 63 79  ndicates "legacy
b970: 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e 20  " tracing.** in 
b980: 74 68 65 20 73 74 79 6c 65 20 6f 66 20 73 71 6c  the style of sql
b990: 69 74 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f 0a  ite3_trace().*/.
b9a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
b9b0: 52 41 43 45 5f 4c 45 47 41 43 59 20 20 20 20 20  RACE_LEGACY     
b9c0: 20 20 20 20 20 30 78 34 30 20 20 20 20 20 2f 2a       0x40     /*
b9d0: 20 55 73 65 20 74 68 65 20 6c 65 67 61 63 79 20   Use the legacy 
b9e0: 78 54 72 61 63 65 20 2a 2f 0a 23 64 65 66 69 6e  xTrace */.#defin
b9f0: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 58  e SQLITE_TRACE_X
ba00: 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20 20 30  PROFILE        0
ba10: 78 38 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74  x80     /* Use t
ba20: 68 65 20 6c 65 67 61 63 79 20 78 50 72 6f 66 69  he legacy xProfi
ba30: 6c 65 20 2a 2f 0a 23 65 6c 73 65 0a 23 64 65 66  le */.#else.#def
ba40: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
ba50: 5f 4c 45 47 41 43 59 20 20 20 20 20 20 20 20 20  _LEGACY         
ba60: 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   0.#define SQLIT
ba70: 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45  E_TRACE_XPROFILE
ba80: 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66          0.#endif
ba90: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
baa0: 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 23 64  DEPRECATED */.#d
bab0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41  efine SQLITE_TRA
bac0: 43 45 5f 4e 4f 4e 4c 45 47 41 43 59 5f 4d 41 53  CE_NONLEGACY_MAS
bad0: 4b 20 20 30 78 30 66 20 20 20 20 20 2f 2a 20 4e  K  0x0f     /* N
bae0: 6f 72 6d 61 6c 20 66 6c 61 67 73 20 2a 2f 0a 0a  ormal flags */..
baf0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
bb00: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
bb10: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
bb20: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
bb30: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
bb40: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
bb50: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
bb60: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
bb70: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
bb80: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
bb90: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
bba0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
bbb0: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
bbc0: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
bbd0: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
bbe0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
bbf0: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
bc00: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
bc10: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
bc20: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
bc30: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
bc40: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
bc50: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bc70: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
bc80: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
bcb0: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
bcc0: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  in use */.  u32 
bcd0: 6d 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  mDbFlags;       
bce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61            /* fla
bcf0: 67 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e 74  gs recording int
bd00: 65 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20  ernal state */. 
bd10: 20 75 36 34 20 66 6c 61 67 73 3b 20 20 20 20 20   u64 flags;     
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bd30: 2a 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c 65  * flags settable
bd40: 20 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65 65   by pragmas. See
bd50: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20   below */.  i64 
bd60: 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20  lastRowid;      
bd70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57            /* ROW
bd80: 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e  ID of most recen
bd90: 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62  t insert (see ab
bda0: 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a  ove) */.  i64 sz
bdb0: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
bdc0: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
bdd0: 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74  lt mmap_size set
bde0: 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53  ting */.  u32 nS
bdf0: 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20  chemaLock;      
be00: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
be10: 74 20 72 65 73 65 74 20 74 68 65 20 73 63 68 65  t reset the sche
be20: 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f  ma when non-zero
be30: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
be40: 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20  nt openFlags;   
be50: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73      /* Flags pas
be60: 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76  sed to sqlite3_v
be70: 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20  fs.xOpen() */.  
be80: 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20  int errCode;    
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bea0: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
beb0: 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f  or code (SQLITE_
bec0: 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d  *) */.  int errM
bed0: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
bee0: 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c        /* & resul
bef0: 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69  t codes with thi
bf00: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
bf10: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73  ng */.  int iSys
bf20: 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20  Errno;          
bf30: 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76        /* Errno v
bf40: 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73  alue from last s
bf50: 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20  ystem error */. 
bf60: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
bf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf80: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
bf90: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
bfa0: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
bfb0: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
bfc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
bfd0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
bfe0: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c000: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
c010: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
c020: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
c030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
c040: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
c050: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
c060: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
c070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c080: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
c090: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
c0a0: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ailure */.  u8 b
c0b0: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20  BenignMalloc;   
c0c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
c0d0: 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73  not require OOMs
c0e0: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
c0f0: 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20   dfltLockMode;  
c100: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c110: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d  efault locking-m
c120: 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64  ode for attached
c130: 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64   dbs */.  signed
c140: 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61   char nextAutova
c150: 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76  c;      /* Autov
c160: 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72  ac setting after
c170: 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a   VACUUM if >=0 *
c180: 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45  /.  u8 suppressE
c190: 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
c1a0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75    /* Do not issu
c1b0: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  e error messages
c1c0: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
c1d0: 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
c1e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
c1f0: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66  alue to return f
c200: 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f  or s3_vtab_on_co
c210: 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38  nflict() */.  u8
c220: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
c230: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
c240: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
c250: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
c260: 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d  s a TS */.  u8 m
c270: 54 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20  Trace;          
c280: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72            /* zer
c290: 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45  o or more SQLITE
c2a0: 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a  _TRACE flags */.
c2b0: 20 20 75 38 20 6e 6f 53 68 61 72 65 64 43 61 63    u8 noSharedCac
c2c0: 68 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  he;             
c2d0: 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73 68  /* True if no sh
c2e0: 61 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b 65  ared-cache backe
c2f0: 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c  nds */.  u8 nSql
c300: 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  Exec;           
c310: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c320: 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53   of pending OP_S
c330: 71 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20 2a  qlExec opcodes *
c340: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
c350: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
c360: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
c370: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
c380: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
c390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3a0: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
c3b0: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
c3c0: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
c3d0: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3f0: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
c400: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
c410: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
c420: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
c430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
c440: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
c450: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
c460: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
c470: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
c480: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
c490: 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  mits */.  int nM
c4a0: 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20  axSorterMmap;   
c4b0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
c4c0: 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f  um size of regio
c4d0: 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72  ns mapped by sor
c4e0: 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ter */.  struct 
c4f0: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
c500: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
c510: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
c520: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
c530: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
c540: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
c550: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
c560: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
c570: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
c580: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c5a0: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
c5b0: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
c5c0: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
c5d0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
c5e0: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
c5f0: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
c600: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
c610: 75 6e 73 69 67 6e 65 64 20 6f 72 70 68 61 6e 54  unsigned orphanT
c620: 72 69 67 67 65 72 20 3a 20 31 3b 20 2f 2a 20 4c  rigger : 1; /* L
c630: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
c640: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
c650: 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 6e  rigger */.    un
c660: 73 69 67 6e 65 64 20 69 6d 70 6f 73 74 65 72 54  signed imposterT
c670: 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20 42 75 69  able : 1; /* Bui
c680: 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65  lding an imposte
c690: 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  r table */.    u
c6a0: 6e 73 69 67 6e 65 64 20 72 65 6f 70 65 6e 4d 65  nsigned reopenMe
c6b0: 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a 20 41 54  mdb : 1;   /* AT
c6c0: 54 41 43 48 20 69 73 20 72 65 61 6c 6c 79 20 61  TACH is really a
c6d0: 20 72 65 6f 70 65 6e 20 75 73 69 6e 67 20 4d 65   reopen using Me
c6e0: 6d 44 42 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  mDB */.    char 
c6f0: 2a 2a 61 7a 49 6e 69 74 3b 20 20 20 20 20 20 20  **azInit;       
c700: 20 20 20 20 20 20 20 2f 2a 20 22 74 79 70 65 22         /* "type"
c710: 2c 20 22 6e 61 6d 65 22 2c 20 61 6e 64 20 22 74  , "name", and "t
c720: 62 6c 5f 6e 61 6d 65 22 20 63 6f 6c 75 6d 6e 73  bl_name" columns
c730: 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20   */.  } init;.  
c740: 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b  int nVdbeActive;
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c760: 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73   Number of VDBEs
c770: 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69   currently runni
c780: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  ng */.  int nVdb
c790: 65 52 65 61 64 3b 20 20 20 20 20 20 20 20 20 20  eRead;          
c7a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c7b0: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
c7c0: 74 68 61 74 20 72 65 61 64 20 6f 72 20 77 72 69  that read or wri
c7d0: 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  te */.  int nVdb
c7e0: 65 57 72 69 74 65 3b 20 20 20 20 20 20 20 20 20  eWrite;         
c7f0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c800: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
c810: 74 68 61 74 20 72 65 61 64 20 61 6e 64 20 77 72  that read and wr
c820: 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ite */.  int nVd
c830: 62 65 45 78 65 63 3b 20 20 20 20 20 20 20 20 20  beExec;         
c840: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c850: 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
c860: 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a   to VdbeExec() *
c870: 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f  /.  int nVDestro
c880: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
c890: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c8a0: 63 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f  ctive OP_VDestro
c8b0: 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a  y operations */.
c8c0: 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e    int nExtension
c8d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c8e0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61  /* Number of loa
c8f0: 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a  ded extensions *
c900: 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65  /.  void **aExte
c910: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
c920: 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68    /* Array of sh
c930: 61 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e  ared library han
c940: 64 6c 65 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  dles */.  int (*
c950: 78 54 72 61 63 65 29 28 75 33 32 2c 76 6f 69 64  xTrace)(u32,void
c960: 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20  *,void*,void*); 
c970: 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e      /* Trace fun
c980: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
c990: 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20  *pTraceArg;     
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9b0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c9c0: 20 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75   to the trace fu
c9d0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65  nction */.#ifnde
c9e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  f SQLITE_OMIT_DE
c9f0: 50 52 45 43 41 54 45 44 0a 20 20 76 6f 69 64 20  PRECATED.  void 
ca00: 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64  (*xProfile)(void
ca10: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36  *,const char*,u6
ca20: 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e  4);  /* Profilin
ca30: 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  g function */.  
ca40: 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72  void *pProfileAr
ca50: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
ca60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
ca70: 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65  ument to profile
ca80: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
ca90: 64 69 66 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d  dif.  void *pCom
caa0: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
cab0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
cac0: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
cad0: 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e  llback() */.  in
cae0: 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  t (*xCommitCallb
caf0: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20  ack)(void*);    
cb00: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
cb10: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
cb20: 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b   void *pRollback
cb30: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
cb40: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
cb50: 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  o xRollbackCallb
cb60: 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ack() */.  void 
cb70: 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  (*xRollbackCallb
cb80: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20  ack)(void*); /* 
cb90: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
cba0: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
cbb0: 69 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a  id *pUpdateArg;.
cbc0: 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65    void (*xUpdate
cbd0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
cbe0: 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
cbf0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c  ,const char*,sql
cc00: 69 74 65 5f 69 6e 74 36 34 29 3b 0a 20 20 50 61  ite_int64);.  Pa
cc10: 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
cc30: 75 72 72 65 6e 74 20 70 61 72 73 65 20 2a 2f 0a  urrent parse */.
cc40: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
cc50: 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
cc60: 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65  OOK.  void *pPre
cc70: 55 70 64 61 74 65 41 72 67 3b 20 20 20 20 20 20  UpdateArg;      
cc80: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
cc90: 75 6d 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64  ument to xPreUpd
cca0: 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ateCallback */. 
ccb0: 20 76 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61   void (*xPreUpda
ccc0: 74 65 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f  teCallback)(   /
ccd0: 2a 20 52 65 67 69 73 74 65 72 65 64 20 75 73 69  * Registered usi
cce0: 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70  ng sqlite3_preup
ccf0: 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20  date_hook() */. 
cd00: 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33     void*,sqlite3
cd10: 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74  *,int,char const
cd20: 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71  *,char const*,sq
cd30: 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69  lite3_int64,sqli
cd40: 74 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20  te3_int64.  );. 
cd50: 20 50 72 65 55 70 64 61 74 65 20 2a 70 50 72 65   PreUpdate *pPre
cd60: 55 70 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f  Update;        /
cd70: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
cd80: 74 69 76 65 20 70 72 65 2d 75 70 64 61 74 65 20  tive pre-update 
cd90: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
cda0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
cdb0: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
cdc0: 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  OK */.#ifndef SQ
cdd0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
cde0: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
cdf0: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
ce00: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
ce10: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
ce20: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
ce30: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
ce40: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
ce50: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
ce60: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
ce70: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
ce80: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
ce90: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
cea0: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
ceb0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
cec0: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
ced0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
cee0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
cef0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
cf00: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
cf10: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
cf20: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
cf30: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
cf40: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
cf50: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
cf60: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
cf70: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
cf80: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
cf90: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
cfa0: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
cfb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
cfc0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
cfd0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
cfe0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
cff0: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
d000: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
d010: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
d020: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
d030: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
d040: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
d050: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
d060: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
d070: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
d080: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
d090: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
d0a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
d0b0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
d0c0: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
d0d0: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
d0e0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
d0f0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
d100: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
d110: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
d120: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
d130: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
d140: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
d150: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
d160: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d170: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
d180: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
d190: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
d1a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
d1b0: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
d1c0: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
d1d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
d1e0: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
d1f0: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
d200: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
d210: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
d220: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
d230: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
d240: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
d250: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
d260: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
d270: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
d280: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
d290: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
d2a0: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
d2b0: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
d2c0: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
d2d0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
d2e0: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
d2f0: 6e 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 2f  nect;          /
d300: 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65  * Disconnect the
d310: 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74  se in next sqlit
d320: 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a  e3_prepare() */.
d330: 23 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46  #endif.  Hash aF
d340: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
d350: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
d360: 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69  able of connecti
d370: 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  on functions */.
d380: 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b    Hash aCollSeq;
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3a0: 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67  /* All collating
d3b0: 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20   sequences */.  
d3c0: 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79  BusyHandler busy
d3d0: 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a  Handler;      /*
d3e0: 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   Busy callback *
d3f0: 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63  /.  Db aDbStatic
d400: 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [2];            
d410: 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63    /* Static spac
d420: 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61  e for the 2 defa
d430: 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  ult backends */.
d440: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61    Savepoint *pSa
d450: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
d460: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
d470: 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  e savepoints */.
d480: 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75    int busyTimeou
d490: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
d4a0: 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20  /* Busy handler 
d4b0: 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63  timeout, in msec
d4c0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70   */.  int nSavep
d4d0: 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
d4e0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
d4f0: 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e   non-transaction
d500: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
d510: 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b   int nStatement;
d520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d530: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
d540: 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  ed statement-tra
d550: 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20  nsactions  */.  
d560: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
d570: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
d580: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f   Net deferred co
d590: 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74  nstraints this t
d5a0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20  ransaction. */. 
d5b0: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
d5c0: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f  mCons;         /
d5d0: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69  * Net deferred i
d5e0: 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61  mmediate constra
d5f0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70  ints */.  int *p
d600: 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20  nBytesFreed;    
d610: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
d620: 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e  t NULL, incremen
d630: 74 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65  t this in DbFree
d640: 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  () */.#ifdef SQL
d650: 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
d660: 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68  K_NOTIFY.  /* Th
d670: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69  e following vari
d680: 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72  ables are all pr
d690: 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53  otected by the S
d6a0: 54 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a  TATIC_MASTER.  *
d6b0: 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20  * mutex, not by 
d6c0: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54  sqlite3.mutex. T
d6d0: 68 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20  hey are used by 
d6e0: 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63  code in notify.c
d6f0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
d700: 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63   X.pUnlockConnec
d710: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
d720: 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61  ans that X is wa
d730: 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20  iting for Y to. 
d740: 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68   ** unlock so th
d750: 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65  at it can procee
d760: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  d..  **.  ** Whe
d770: 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  n X.pBlockingCon
d780: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
d790: 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65   means that some
d7a0: 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69  thing that X tri
d7b0: 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f  ed.  ** tried to
d7c0: 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69   do recently fai
d7d0: 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49  led with an SQLI
d7e0: 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20  TE_LOCKED error 
d7f0: 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a  due to locks.  *
d800: 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a  * held by Y..  *
d810: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c  /.  sqlite3 *pBl
d820: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
d830: 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20  ; /* Connection 
d840: 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49  that caused SQLI
d850: 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73  TE_LOCKED */.  s
d860: 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43  qlite3 *pUnlockC
d870: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20  onnection;      
d880: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
d890: 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20  on to watch for 
d8a0: 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  unlock */.  void
d8b0: 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20   *pUnlockArg;   
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8d0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
d8e0: 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a   xUnlockNotify *
d8f0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f  /.  void (*xUnlo
d900: 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a  ckNotify)(void *
d910: 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c  *, int);  /* Unl
d920: 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62  ock notify callb
d930: 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ack */.  sqlite3
d940: 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20   *pNextBlocked; 
d950: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
d960: 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c  n list of all bl
d970: 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ocked connection
d980: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  s */.#endif.#ifd
d990: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
d9a0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
d9b0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
d9c0: 20 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a   auth;        /*
d9d0: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
d9e0: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
d9f0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23   */.#endif.};..#
da00: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
da10: 42 4c 45 5f 53 48 41 52 45 44 5f 53 43 48 45 4d  BLE_SHARED_SCHEM
da20: 41 0a 23 20 64 65 66 69 6e 65 20 49 73 53 68 61  A.# define IsSha
da30: 72 65 64 53 63 68 65 6d 61 28 64 62 29 20 28 28  redSchema(db) ((
da40: 28 64 62 29 2d 3e 6f 70 65 6e 46 6c 61 67 73 20  (db)->openFlags 
da50: 26 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 53 48  & SQLITE_OPEN_SH
da60: 41 52 45 44 5f 53 43 48 45 4d 41 29 21 3d 30 29  ARED_SCHEMA)!=0)
da70: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
da80: 49 73 53 68 61 72 65 64 53 63 68 65 6d 61 28 64  IsSharedSchema(d
da90: 62 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  b) 0.#endif../*.
daa0: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
dab0: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
dac0: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
dad0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
dae0: 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64  HEMA_ENC(db) ((d
daf0: 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65  b)->aDb[0].pSche
db00: 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65  ma->enc).#define
db10: 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20 20   ENC(db)        
db20: 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  ((db)->enc)../*.
db30: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
db40: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
db50: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20  e3.flags..**.** 
db60: 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
db70: 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
db80: 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
db90: 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53     SQLITE_FullFS
dba0: 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52  ync     == PAGER
dbb0: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
dbc0: 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75     SQLITE_CkptFu
dbd0: 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52  llFSync == PAGER
dbe0: 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a  _CKPT_FULLFSYNC.
dbf0: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43  **      SQLITE_C
dc00: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20  acheSpill    == 
dc10: 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c  PAGER_CACHE_SPIL
dc20: 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L.*/.#define SQL
dc30: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
dc40: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
dc50: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
dc60: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
dc70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
dc80: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
dc90: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65  00000002  /* Cre
dca0: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
dcb0: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
dcc0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dcd0: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
dce0: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68  x00000004  /* Sh
dcf0: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
dd00: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
dd10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dd20: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20  _FullFSync      
dd30: 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55  0x00000008  /* U
dd40: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e  se full fsync on
dd50: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a   the backend */.
dd60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
dd70: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78  kptFullFSync  0x
dd80: 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65  00000010  /* Use
dd90: 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20   full fsync for 
dda0: 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64  checkpoint */.#d
ddb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63  efine SQLITE_Cac
ddc0: 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30  heSpill     0x00
ddd0: 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f  000020  /* OK to
dde0: 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63   spill pager cac
ddf0: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
de00: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
de10: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
de20: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
de30: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
de40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
de50: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
de60: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
de70: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
de80: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
de90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
dec0: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
ded0: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df00: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
df10: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
df20: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
df30: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
df40: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
df50: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
df60: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
df70: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfa0: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
dfb0: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
dfc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
dfd0: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
dfe0: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20  00000200  /* Do 
dff0: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
e000: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
e010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e020: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30  ReadUncommit   0
e030: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45  x00000400  /* RE
e040: 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69  AD UNCOMMITTED i
e050: 6e 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a  n shared-cache *
e060: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e070: 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20  _NoCkptOnClose  
e080: 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e  0x00000800  /* N
e090: 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20  o checkpoint on 
e0a0: 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a  close()/DETACH *
e0b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e0c0: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
e0d0: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52  0x00001000  /* R
e0e0: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
e0f0: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
e100: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
e110: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 30  iggers    0x0000
e120: 32 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  2000  /* Enable 
e130: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
e140: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
e150: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
e160: 20 20 20 20 30 78 30 30 30 30 34 30 30 30 20 20      0x00004000  
e170: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
e180: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
e190: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
e1a0: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
e1b0: 20 20 20 20 20 30 78 30 30 30 30 38 30 30 30 20       0x00008000 
e1c0: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
e1d0: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
e1e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
e1f0: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78  oadExtension  0x
e200: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61  00010000  /* Ena
e210: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
e220: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e230: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63  LITE_LoadExtFunc
e240: 20 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20      0x00020000  
e250: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
e260: 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66  xtension() SQL f
e270: 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  unc */.#define S
e280: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
e290: 67 65 72 20 20 30 78 30 30 30 34 30 30 30 30 20  ger  0x00040000 
e2a0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
e2b0: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
e2c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
e2d0: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
e2e0: 30 30 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65  0080000  /* Defe
e2f0: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
e300: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
e310: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
e320: 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30        0x00100000
e330: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
e340: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
e350: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e360: 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30  CellSizeCk     0
e370: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68  x00200000  /* Ch
e380: 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73  eck btree cell s
e390: 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a  izes on load */.
e3a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e3b0: 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78  ts3Tokenizer  0x
e3c0: 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00400000  /* Ena
e3d0: 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a  ble fts3_tokeniz
e3e0: 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65  er(2) */.#define
e3f0: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50   SQLITE_EnableQP
e400: 53 47 20 20 20 20 20 30 78 30 30 38 30 30 30 30  SG     0x0080000
e410: 30 20 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e  0  /* Query Plan
e420: 6e 65 72 20 53 74 61 62 69 6c 69 74 79 20 47 75  ner Stability Gu
e430: 61 72 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e  arantee*/.#defin
e440: 65 20 53 51 4c 49 54 45 5f 54 72 69 67 67 65 72  e SQLITE_Trigger
e450: 45 51 50 20 20 20 20 20 30 78 30 31 30 30 30 30  EQP     0x010000
e460: 30 30 20 20 2f 2a 20 53 68 6f 77 20 74 72 69 67  00  /* Show trig
e470: 67 65 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52  ger EXPLAIN QUER
e480: 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e  Y PLAN */.#defin
e490: 65 20 53 51 4c 49 54 45 5f 52 65 73 65 74 44 61  e SQLITE_ResetDa
e4a0: 74 61 62 61 73 65 20 20 30 78 30 32 30 30 30 30  tabase  0x020000
e4b0: 30 30 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65  00  /* Reset the
e4c0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 23 64 65   database */.#de
e4d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
e4e0: 63 79 41 6c 74 65 72 20 20 20 20 30 78 30 34 30  cyAlter    0x040
e4f0: 30 30 30 30 30 20 20 2f 2a 20 4c 65 67 61 63 79  00000  /* Legacy
e500: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 62 65 68   ALTER TABLE beh
e510: 61 76 69 6f 75 72 20 2a 2f 0a 23 64 65 66 69 6e  aviour */.#defin
e520: 65 20 53 51 4c 49 54 45 5f 4e 6f 53 63 68 65 6d  e SQLITE_NoSchem
e530: 61 45 72 72 6f 72 20 20 30 78 30 38 30 30 30 30  aError  0x080000
e540: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65  00  /* Do not re
e550: 70 6f 72 74 20 73 63 68 65 6d 61 20 70 61 72 73  port schema pars
e560: 65 20 65 72 72 6f 72 73 2a 2f 0a 23 64 65 66 69  e errors*/.#defi
e570: 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 6e 73  ne SQLITE_Defens
e580: 69 76 65 20 20 20 20 20 20 30 78 31 30 30 30 30  ive      0x10000
e590: 30 30 30 20 20 2f 2a 20 49 6e 70 75 74 20 53 51  000  /* Input SQ
e5a0: 4c 20 69 73 20 6c 69 6b 65 6c 79 20 68 6f 73 74  L is likely host
e5b0: 69 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ile */.#define S
e5c0: 51 4c 49 54 45 5f 44 71 73 44 44 4c 20 20 20 20  QLITE_DqsDDL    
e5d0: 20 20 20 20 20 30 78 32 30 30 30 30 30 30 30 20       0x20000000 
e5e0: 20 2f 2a 20 64 62 6c 2d 71 75 6f 74 65 64 20 73   /* dbl-quoted s
e5f0: 74 72 69 6e 67 73 20 61 6c 6c 6f 77 65 64 20 69  trings allowed i
e600: 6e 20 44 44 4c 2a 2f 0a 23 64 65 66 69 6e 65 20  n DDL*/.#define 
e610: 53 51 4c 49 54 45 5f 44 71 73 44 4d 4c 20 20 20  SQLITE_DqsDML   
e620: 20 20 20 20 20 20 30 78 34 30 30 30 30 30 30 30        0x40000000
e630: 20 20 2f 2a 20 64 62 6c 2d 71 75 6f 74 65 64 20    /* dbl-quoted 
e640: 73 74 72 69 6e 67 73 20 61 6c 6c 6f 77 65 64 20  strings allowed 
e650: 69 6e 20 44 4d 4c 2a 2f 0a 23 64 65 66 69 6e 65  in DML*/.#define
e660: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 56 69   SQLITE_EnableVi
e670: 65 77 20 20 20 20 20 30 78 38 30 30 30 30 30 30  ew     0x8000000
e680: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 74 68 65  0  /* Enable the
e690: 20 75 73 65 20 6f 66 20 76 69 65 77 73 20 2a 2f   use of views */
e6a0: 0a 0a 2f 2a 20 46 6c 61 67 73 20 75 73 65 64 20  ../* Flags used 
e6b0: 6f 6e 6c 79 20 69 66 20 64 65 62 75 67 67 69 6e  only if debuggin
e6c0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 49 28  g */.#define HI(
e6d0: 58 29 20 20 28 28 75 36 34 29 28 58 29 3c 3c 33  X)  ((u64)(X)<<3
e6e0: 32 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  2).#ifdef SQLITE
e6f0: 5f 44 45 42 55 47 0a 23 64 65 66 69 6e 65 20 53  _DEBUG.#define S
e700: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
e710: 20 20 20 20 20 48 49 28 30 78 30 31 30 30 30 30       HI(0x010000
e720: 30 29 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e  0) /* Debug prin
e730: 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63  t SQL as it exec
e740: 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  utes */.#define 
e750: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
e760: 6e 67 20 20 20 20 48 49 28 30 78 30 32 30 30 30  ng    HI(0x02000
e770: 30 30 29 20 2f 2a 20 44 65 62 75 67 20 6c 69 73  00) /* Debug lis
e780: 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72  tings of VDBE pr
e790: 6f 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ogs */.#define S
e7a0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
e7b0: 20 20 20 20 20 48 49 28 30 78 30 34 30 30 30 30       HI(0x040000
e7c0: 30 29 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72  0) /* True to tr
e7d0: 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69  ace VDBE executi
e7e0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e7f0: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
e800: 61 63 65 20 48 49 28 30 78 30 38 30 30 30 30 30  ace HI(0x0800000
e810: 29 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74  ) /* Trace sqlit
e820: 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61  e3VdbeAddOp() ca
e830: 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lls */.#define S
e840: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
e850: 20 20 20 20 20 48 49 28 30 78 31 30 30 30 30 30       HI(0x100000
e860: 30 29 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0) /* Debug EXPL
e870: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
e880: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e890: 5f 50 61 72 73 65 72 54 72 61 63 65 20 20 20 20  _ParserTrace    
e8a0: 48 49 28 30 78 32 30 30 30 30 30 30 29 20 2f 2a  HI(0x2000000) /*
e8b0: 20 50 52 41 47 4d 41 20 70 61 72 73 65 72 5f 74   PRAGMA parser_t
e8c0: 72 61 63 65 3d 4f 4e 20 2a 2f 0a 23 65 6e 64 69  race=ON */.#endi
e8d0: 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  f../*.** Allowed
e8e0: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
e8f0: 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a 2a 2f 0a  te3.mDbFlags.*/.
e900: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53  #define DBFLAG_S
e910: 63 68 65 6d 61 43 68 61 6e 67 65 20 20 20 30 78  chemaChange   0x
e920: 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69  0001  /* Uncommi
e930: 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20  tted Hash table 
e940: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e950: 6e 65 20 44 42 46 4c 41 47 5f 50 72 65 66 65 72  ne DBFLAG_Prefer
e960: 42 75 69 6c 74 69 6e 20 20 30 78 30 30 30 32 20  Builtin  0x0002 
e970: 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74   /* Preference t
e980: 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73  o built-in funcs
e990: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c   */.#define DBFL
e9a0: 41 47 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20  AG_Vacuum       
e9b0: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 43 75 72    0x0004  /* Cur
e9c0: 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55  rently in a VACU
e9d0: 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  UM */.#define DB
e9e0: 46 4c 41 47 5f 56 61 63 75 75 6d 49 6e 74 6f 20  FLAG_VacuumInto 
e9f0: 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 43      0x0008  /* C
ea00: 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
ea10: 20 56 41 43 55 55 4d 20 49 4e 54 4f 20 2a 2f 0a   VACUUM INTO */.
ea20: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53  #define DBFLAG_S
ea30: 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20 30 78  chemaKnownOk  0x
ea40: 30 30 31 30 20 20 2f 2a 20 53 63 68 65 6d 61 20  0010  /* Schema 
ea50: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 62 65 20 76  is known to be v
ea60: 61 6c 69 64 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  alid */..#define
ea70: 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 49 6e   DBFLAG_SchemaIn
ea80: 75 73 65 20 20 20 20 30 78 30 30 32 30 20 20 2f  use    0x0020  /
ea90: 2a 20 44 6f 20 6e 6f 74 20 72 65 6c 65 61 73 65  * Do not release
eaa0: 20 73 68 61 72 61 62 6c 65 20 73 63 68 65 6d 61   sharable schema
eab0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46  s */.#define DBF
eac0: 4c 41 47 5f 46 72 65 65 53 63 68 65 6d 61 20 20  LAG_FreeSchema  
ead0: 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 46 72     0x0040  /* Fr
eae0: 65 65 20 65 78 74 72 61 20 73 68 61 72 65 64 20  ee extra shared 
eaf0: 73 63 68 65 6d 61 73 20 6f 6e 20 72 65 6c 65 61  schemas on relea
eb00: 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  se */../*.** Bit
eb10: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
eb20: 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c  .dbOptFlags fiel
eb30: 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  d that are used 
eb40: 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
eb50: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
eb60: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
eb70: 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e  PTIMIZATIONS,...
eb80: 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a  ) interface to.*
eb90: 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69  * selectively di
eba0: 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70  sable various op
ebb0: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a  timizations..*/.
ebc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
ebd0: 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78  ueryFlattener 0x
ebe0: 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20  0001   /* Query 
ebf0: 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64  flattening */.#d
ec00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 69 6e  efine SQLITE_Win
ec10: 64 6f 77 46 75 6e 63 20 20 20 20 20 30 78 30 30  dowFunc     0x00
ec20: 30 32 20 20 20 2f 2a 20 55 73 65 20 78 49 6e 76  02   /* Use xInv
ec30: 65 72 73 65 20 66 6f 72 20 77 69 6e 64 6f 77 20  erse for window 
ec40: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
ec50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
ec60: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
ec70: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
ec80: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
ec90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eca0: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
ecb0: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
ecc0: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
ecd0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ece0: 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20  E_DistinctOpt   
ecf0: 20 30 78 30 30 31 30 20 20 20 2f 2a 20 44 49 53   0x0010   /* DIS
ed00: 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65  TINCT using inde
ed10: 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  xes */.#define S
ed20: 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63  QLITE_CoverIdxSc
ed30: 61 6e 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a  an   0x0020   /*
ed40: 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   Covering index 
ed50: 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  scans */.#define
ed60: 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49   SQLITE_OrderByI
ed70: 64 78 4a 6f 69 6e 20 30 78 30 30 34 30 20 20 20  dxJoin 0x0040   
ed80: 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a  /* ORDER BY of j
ed90: 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a  oins via index *
eda0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
edb0: 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20  _Transitive     
edc0: 30 78 30 30 38 30 20 20 20 2f 2a 20 54 72 61 6e  0x0080   /* Tran
edd0: 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e  sitive constrain
ede0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
edf0: 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69  LITE_OmitNoopJoi
ee00: 6e 20 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20  n   0x0100   /* 
ee10: 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c  Omit unused tabl
ee20: 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23  es in joins */.#
ee30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
ee40: 75 6e 74 4f 66 56 69 65 77 20 20 20 20 30 78 30  untOfView    0x0
ee50: 32 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 75  200   /* The cou
ee60: 6e 74 2d 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d  nt-of-view optim
ee70: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
ee80: 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72  ne SQLITE_Cursor
ee90: 48 69 6e 74 73 20 20 20 20 30 78 30 34 30 30 20  Hints    0x0400 
eea0: 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73    /* Add OP_Curs
eeb0: 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a  orHint opcodes *
eec0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eed0: 5f 53 74 61 74 34 20 20 20 20 20 20 20 20 20 20  _Stat4          
eee0: 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20  0x0800   /* Use 
eef0: 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 20 20  STAT4 data */.  
ef00: 20 2f 2a 20 54 48 33 20 65 78 70 65 63 74 73 20   /* TH3 expects 
ef10: 74 68 65 20 53 74 61 74 34 20 20 20 5e 5e 5e 5e  the Stat4   ^^^^
ef20: 5e 5e 20 76 61 6c 75 65 20 74 6f 20 62 65 20 30  ^^ value to be 0
ef30: 78 30 38 30 30 2e 20 20 44 6f 6e 27 74 20 63 68  x0800.  Don't ch
ef40: 61 6e 67 65 20 69 74 20 2a 2f 0a 23 64 65 66 69  ange it */.#defi
ef50: 6e 65 20 53 51 4c 49 54 45 5f 50 75 73 68 44 6f  ne SQLITE_PushDo
ef60: 77 6e 20 20 20 20 20 20 20 30 78 31 30 30 30 20  wn       0x1000 
ef70: 20 20 2f 2a 20 54 68 65 20 70 75 73 68 2d 64 6f    /* The push-do
ef80: 77 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  wn optimization 
ef90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
efa0: 45 5f 53 69 6d 70 6c 69 66 79 4a 6f 69 6e 20 20  E_SimplifyJoin  
efb0: 20 30 78 32 30 30 30 20 20 20 2f 2a 20 43 6f 6e   0x2000   /* Con
efc0: 76 65 72 74 20 4c 45 46 54 20 4a 4f 49 4e 20 74  vert LEFT JOIN t
efd0: 6f 20 4a 4f 49 4e 20 2a 2f 0a 23 64 65 66 69 6e  o JOIN */.#defin
efe0: 65 20 53 51 4c 49 54 45 5f 53 6b 69 70 53 63 61  e SQLITE_SkipSca
eff0: 6e 20 20 20 20 20 20 20 30 78 34 30 30 30 20 20  n       0x4000  
f000: 20 2f 2a 20 53 6b 69 70 2d 73 63 61 6e 73 20 2a   /* Skip-scans *
f010: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f020: 5f 50 72 6f 70 61 67 61 74 65 43 6f 6e 73 74 20  _PropagateConst 
f030: 30 78 38 30 30 30 20 20 20 2f 2a 20 54 68 65 20  0x8000   /* The 
f040: 63 6f 6e 73 74 61 6e 74 20 70 72 6f 70 61 67 61  constant propaga
f050: 74 69 6f 6e 20 6f 70 74 20 2a 2f 0a 23 64 65 66  tion opt */.#def
f060: 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70  ine SQLITE_AllOp
f070: 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66  ts        0xffff
f080: 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69     /* All optimi
f090: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  zations */../*.*
f0a0: 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73  * Macros for tes
f0b0: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
f0c0: 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  not optimization
f0d0: 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72  s are enabled or
f0e0: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64   disabled..*/.#d
f0f0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
f100: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
f110: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
f120: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
f130: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
f140: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
f150: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
f160: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
f170: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a  (mask))==0)../*.
f180: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
f190: 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f  f it OK to facto
f1a0: 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  r constant expre
f1b0: 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20  ssions into the 
f1c0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
f1d0: 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75  * code. The argu
f1e0: 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20  ment is a Parse 
f1f0: 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63  object for the c
f200: 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a  ode generator..*
f210: 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46  /.#define ConstF
f220: 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d  actorOk(P) ((P)-
f230: 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a  >okConstFactor).
f240: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
f250: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
f260: 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c  qlite.magic fiel
f270: 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  d..** The number
f280: 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61  s are obtained a
f290: 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76  t random and hav
f2a0: 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61  e no special mea
f2b0: 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74  ning, other.** t
f2c0: 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e  han being distin
f2d0: 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74  ct from one anot
f2e0: 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
f2f0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
f300: 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37  N     0xa029a697
f310: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
f320: 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   open */.#define
f330: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
f340: 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33  OSED   0x9f3c2d3
f350: 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  3  /* Database i
f360: 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66  s closed */.#def
f370: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f380: 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37  _SICK     0x4b77
f390: 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61  1290  /* Error a
f3a0: 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73  nd awaiting clos
f3b0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
f3c0: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20  ITE_MAGIC_BUSY  
f3d0: 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f     0xf03b7906  /
f3e0: 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65  * Database curre
f3f0: 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23  ntly in use */.#
f400: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
f410: 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62  GIC_ERROR    0xb
f420: 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53  5357930  /* An S
f430: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72  QLITE_MISUSE err
f440: 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23  or occurred */.#
f450: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
f460: 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36  GIC_ZOMBIE   0x6
f470: 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73  4cffc7f  /* Clos
f480: 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74  e with last stat
f490: 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a  ement close */..
f4a0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66  /*.** Each SQL f
f4b0: 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e  unction is defin
f4c0: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
f4d0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
f4e0: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
f4f0: 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69    For global bui
f500: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
f510: 28 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20 6d  (ex: substr(), m
f520: 61 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a  ax(), count()).*
f530: 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * a pointer to t
f540: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
f550: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71 6c   held in the sql
f560: 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74  ite3BuiltinFunct
f570: 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ions object..** 
f580: 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69  For per-connecti
f590: 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  on application-d
f5a0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
f5b0: 2c 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  , a pointer to t
f5c0: 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  his.** structure
f5d0: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
f5e0: 64 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20 74  db->aHash hash t
f5f0: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  able..**.** The 
f600: 75 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69 73  u.pHash field is
f610: 20 75 73 65 64 20 62 79 20 74 68 65 20 67 6c 6f   used by the glo
f620: 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20  bal built-ins.  
f630: 54 68 65 20 75 2e 70 44 65 73 74 72 75 63 74 6f  The u.pDestructo
f640: 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75 73  r.** field is us
f650: 65 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63  ed by per-connec
f660: 74 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75 6e  tion app-def fun
f670: 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctions..*/.struc
f680: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 38  t FuncDef {.  i8
f690: 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
f6a0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f6b0: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
f6c0: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
f6d0: 2f 0a 20 20 75 33 32 20 66 75 6e 63 46 6c 61 67  /.  u32 funcFlag
f6e0: 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65  s;       /* Some
f6f0: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
f700: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
f710: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
f720: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
f730: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
f740: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
f750: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
f760: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
f770: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
f780: 69 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c  id (*xSFunc)(sql
f790: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
f7a0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
f7b0: 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61  *); /* func or a
f7c0: 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69  gg-step */.  voi
f7d0: 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73  d (*xFinalize)(s
f7e0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
f7f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
f800: 20 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69     /* Agg finali
f810: 7a 65 72 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  zer */.  void (*
f820: 78 56 61 6c 75 65 29 28 73 71 6c 69 74 65 33 5f  xValue)(sqlite3_
f830: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
f840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f850: 2a 20 43 75 72 72 65 6e 74 20 61 67 67 20 76 61  * Current agg va
f860: 6c 75 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  lue */.  void (*
f870: 78 49 6e 76 65 72 73 65 29 28 73 71 6c 69 74 65  xInverse)(sqlite
f880: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
f890: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
f8a0: 20 2f 2a 20 69 6e 76 65 72 73 65 20 61 67 67 2d   /* inverse agg-
f8b0: 73 74 65 70 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  step */.  const 
f8c0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f  char *zName;   /
f8d0: 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68  * SQL name of th
f8e0: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20  e function. */. 
f8f0: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e   union {.    Fun
f900: 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20  cDef *pHash;    
f910: 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61    /* Next with a
f920: 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
f930: 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73  but the same has
f940: 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 73  h */.    FuncDes
f950: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
f960: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
f970: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
f980: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
f990: 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
f9a0: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
f9b0: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
f9c0: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
f9d0: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
f9e0: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
f9f0: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
fa00: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
fa10: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
fa20: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
fa30: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
fa40: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
fa50: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
fa60: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
fa70: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
fa80: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
fa90: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
faa0: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
fab0: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
fac0: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
fad0: 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20  mber of FuncDef 
fae0: 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20  objects created 
faf0: 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20  (either 1 or 3, 
fb00: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
fb10: 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74  ther.** or not t
fb20: 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63  he specified enc
fb30: 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f  oding is SQLITE_
fb40: 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65  ANY). The FuncDe
fb50: 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  f.pDestructor.**
fb60: 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20   member of each 
fb70: 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44  of the new FuncD
fb80: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65  ef objects is se
fb90: 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  t to point to th
fba0: 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46  e allocated.** F
fbb0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a  uncDestructor..*
fbc0: 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c  *.** Thereafter,
fbd0: 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65   when one of the
fbe0: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
fbf0: 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65   is deleted, the
fc00: 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f   reference.** co
fc10: 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65  unt on this obje
fc20: 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65  ct is decremente
fc30: 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68  d. When it reach
fc40: 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75  es 0, the destru
fc50: 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b  ctor.** is invok
fc60: 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44  ed and the FuncD
fc70: 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74  estructor struct
fc80: 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74  ure freed..*/.st
fc90: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
fca0: 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66  tor {.  int nRef
fcb0: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  ;.  void (*xDest
fcc0: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20  roy)(void *);.  
fcd0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
fce0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  .};../*.** Possi
fcf0: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46  ble values for F
fd00: 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e  uncDef.flags.  N
fd10: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45  ote that the _LE
fd20: 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46  NGTH and _TYPEOF
fd30: 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20  .** values must 
fd40: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50  correspond to OP
fd50: 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
fd60: 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
fd70: 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c  ARG.  And.** SQL
fd80: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fd90: 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  T must be the sa
fda0: 6d 65 20 61 73 20 53 51 4c 49 54 45 5f 44 45 54  me as SQLITE_DET
fdb0: 45 52 4d 49 4e 49 53 54 49 43 2e 20 20 54 68 65  ERMINISTIC.  The
fdc0: 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74  re.** are assert
fdd0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  () statements in
fde0: 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72   the code to ver
fdf0: 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20  ify this..**.** 
fe00: 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
fe10: 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
fe20: 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
fe30: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49    SQLITE_FUNC_MI
fe40: 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d  NMAX    ==  NC_M
fe50: 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 3d 3d  inMaxAgg      ==
fe60: 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a   SF_MinMaxAgg.**
fe70: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
fe80: 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f  _LENGTH    ==  O
fe90: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a  PFLAG_LENGTHARG.
fea0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
feb0: 4e 43 5f 54 59 50 45 4f 46 20 20 20 20 3d 3d 20  NC_TYPEOF    == 
fec0: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
fed0: 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  G.**     SQLITE_
fee0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d  FUNC_CONSTANT  =
fef0: 3d 20 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  =  SQLITE_DETERM
ff00: 49 4e 49 53 54 49 43 20 66 72 6f 6d 20 74 68 65  INISTIC from the
ff10: 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49   API.**     SQLI
ff20: 54 45 5f 46 55 4e 43 5f 44 49 52 45 43 54 20 20  TE_FUNC_DIRECT  
ff30: 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 49 52    ==  SQLITE_DIR
ff40: 45 43 54 4f 4e 4c 59 20 66 72 6f 6d 20 74 68 65  ECTONLY from the
ff50: 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49   API.**     SQLI
ff60: 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20  TE_FUNC_ENCMASK 
ff70: 20 20 64 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c    depends on SQL
ff80: 49 54 45 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20  ITE_UTF* macros 
ff90: 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64  in the API.*/.#d
ffa0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ffb0: 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 30  C_ENCMASK  0x000
ffc0: 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38  3 /* SQLITE_UTF8
ffd0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
ffe0: 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23   or UTF16LE */.#
fff0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10000 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30  NC_LIKE     0x00
10010 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  04 /* Candidate 
10020 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
10030 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
10040 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10050 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 30 38  _CASE     0x0008
10060 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69   /* Case-sensiti
10070 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e  ve LIKE-type fun
10080 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
10090 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48   SQLITE_FUNC_EPH
100a0 45 4d 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20  EM    0x0010 /* 
100b0 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
100c0 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
100d0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
100e0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
100f0 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  020 /* sqlite3Ge
10100 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
10110 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f  ight be called*/
10120 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10130 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78  FUNC_LENGTH   0x
10140 30 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0040 /* Built-in
10150 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69   length() functi
10160 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
10170 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
10180 20 20 20 30 78 30 30 38 30 20 2f 2a 20 42 75 69     0x0080 /* Bui
10190 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66  lt-in typeof() f
101a0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
101b0 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
101c0 4f 55 4e 54 20 20 20 20 30 78 30 31 30 30 20 2f  OUNT    0x0100 /
101d0 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74  * Built-in count
101e0 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f  (*) aggregate */
101f0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10200 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78  FUNC_COALESCE 0x
10210 30 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0200 /* Built-in
10220 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69   coalesce() or i
10230 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69  fnull() */.#defi
10240 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55  ne SQLITE_FUNC_U
10250 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30 30 20 2f  NLIKELY 0x0400 /
10260 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b  * Built-in unlik
10270 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ely() function *
10280 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10290 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30  _FUNC_CONSTANT 0
102a0 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e  x0800 /* Constan
102b0 74 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20  t inputs give a 
102c0 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20  constant output 
102d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
102e0 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20  E_FUNC_MINMAX   
102f0 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66  0x1000 /* True f
10300 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78  or min() and max
10310 28 29 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f  () aggregates */
10320 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10330 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78  FUNC_SLOCHNG  0x
10340 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68  2000 /* "Slow Ch
10350 61 6e 67 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e  ange". Value con
10360 73 74 61 6e 74 20 64 75 72 69 6e 67 20 61 0a 20  stant during a. 
10370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10390 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65     ** single que
103a0 72 79 20 2d 20 6d 69 67 68 74 20 63 68 61 6e 67  ry - might chang
103b0 65 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23  e over time */.#
103c0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
103d0 4e 43 5f 41 46 46 49 4e 49 54 59 20 30 78 34 30  NC_AFFINITY 0x40
103e0 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61  00 /* Built-in a
103f0 66 66 69 6e 69 74 79 28 29 20 66 75 6e 63 74 69  ffinity() functi
10400 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
10410 4c 49 54 45 5f 46 55 4e 43 5f 4f 46 46 53 45 54  LITE_FUNC_OFFSET
10420 20 20 20 30 78 38 30 30 30 20 2f 2a 20 42 75 69     0x8000 /* Bui
10430 6c 74 2d 69 6e 20 73 71 6c 69 74 65 5f 6f 66 66  lt-in sqlite_off
10440 73 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  set() function *
10450 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10460 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 20 20 20 30  _FUNC_WINDOW   0
10470 78 30 30 30 31 30 30 30 30 20 2f 2a 20 42 75 69  x00010000 /* Bui
10480 6c 74 2d 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c  lt-in window-onl
10490 79 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  y function */.#d
104a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
104b0 43 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 30 30  C_INTERNAL 0x000
104c0 34 30 30 30 30 20 2f 2a 20 46 6f 72 20 75 73 65  40000 /* For use
104d0 20 62 79 20 4e 65 73 74 65 64 50 61 72 73 65 28   by NestedParse(
104e0 29 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  ) only */.#defin
104f0 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 44 49  e SQLITE_FUNC_DI
10500 52 45 43 54 20 20 20 30 78 30 30 30 38 30 30 30  RECT   0x0008000
10510 30 20 2f 2a 20 4e 6f 74 20 66 6f 72 20 75 73 65  0 /* Not for use
10520 20 69 6e 20 54 52 49 47 47 45 52 73 20 6f 72 20   in TRIGGERs or 
10530 56 49 45 57 73 20 2a 2f 0a 23 64 65 66 69 6e 65  VIEWs */.#define
10540 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 55 42   SQLITE_FUNC_SUB
10550 54 59 50 45 20 20 30 78 30 30 31 30 30 30 30 30  TYPE  0x00100000
10560 20 2f 2a 20 52 65 73 75 6c 74 20 6c 69 6b 65 6c   /* Result likel
10570 79 20 74 6f 20 68 61 76 65 20 73 75 62 2d 74 79  y to have sub-ty
10580 70 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  pe */../*.** The
10590 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65   following three
105a0 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f   macros, FUNCTIO
105b0 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20  N(), LIKEFUNC() 
105c0 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20  and AGGREGATE() 
105d0 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  are.** used to c
105e0 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61  reate the initia
105f0 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46  lizers for the F
10600 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
10610 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54  s..**.**   FUNCT
10620 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
10630 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
10640 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  c).**     Used t
10650 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
10660 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
10670 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
10680 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
10690 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
106a0 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63  C function xFunc
106b0 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
106c0 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68  rg arguments. Th
106d0 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70  e.**     value p
106e0 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73  assed as iArg is
106f0 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
10700 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69  *) and made avai
10710 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20  lable.**     as 
10720 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73  the user-data (s
10730 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
10740 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ()) for the func
10750 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20  tion. If.**     
10760 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20  argument bNC is 
10770 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53  true, then the S
10780 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
10790 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e  OLL flag is set.
107a0 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49  .**.**   VFUNCTI
107b0 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
107c0 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
107d0 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
107e0 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
107f0 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
10800 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
10810 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46  flag..**.**   DF
10820 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10830 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10840 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
10850 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
10860 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
10870 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10880 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a  TANT flag and.**
10890 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51       adds the SQ
108a0 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
108b0 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f  G flag.  Used fo
108c0 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75  r date & time fu
108d0 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61  nctions.**     a
108e0 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b  nd functions lik
108f0 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e  e sqlite_version
10900 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e  () that can chan
10910 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69  ge, but not duri
10920 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67  ng.**     a sing
10930 6c 65 20 71 75 65 72 79 2e 20 20 54 68 65 20 69  le query.  The i
10940 41 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20  Arg is ignored. 
10950 20 54 68 65 20 75 73 65 72 2d 64 61 74 61 20 69   The user-data i
10960 73 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20  s always set.** 
10970 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f      to a NULL po
10980 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20  inter.  The bNC 
10990 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
109a0 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50   used..**.**   P
109b0 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20  URE_DATE(zName, 
109c0 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
109d0 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
109e0 73 65 64 20 66 6f 72 20 22 70 75 72 65 22 20 64  sed for "pure" d
109f0 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f  ate/time functio
10a00 6e 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69  ns, this macro i
10a10 73 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e  s like DFUNCTION
10a20 0a 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20 74  .**     except t
10a30 68 61 74 20 69 74 20 64 6f 65 73 20 73 65 74 20  hat it does set 
10a40 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
10a50 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20  CONSTANT flags. 
10a60 20 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20   iArg is.**     
10a70 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20  ignored and the 
10a80 75 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68  user-data for th
10a90 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73  ese functions is
10aa0 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20   set to an .**  
10ab0 20 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e     arbitrary non
10ac0 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20  -NULL pointer.  
10ad0 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65  The bNC paramete
10ae0 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  r is not used..*
10af0 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
10b00 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10b10 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
10b20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
10b30 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
10b40 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10b50 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
10b60 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
10b70 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
10b80 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
10b90 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
10ba0 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
10bb0 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
10bc0 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
10bd0 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
10be0 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
10bf0 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
10c00 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
10c10 57 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  WFUNCTION(zName,
10c20 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 78 53 74   nArg, iArg, xSt
10c30 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c  ep, xFinal, xVal
10c40 75 65 2c 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a  ue, xInverse).**
10c50 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
10c60 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65  ate an aggregate
10c70 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
10c80 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10c90 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43   by.**     the C
10ca0 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70   functions xStep
10cb0 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65   and xFinal. The
10cc0 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61   first four para
10cd0 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72  meters.**     ar
10ce0 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e  e interpreted in
10cf0 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
10d00 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72   the first 4 par
10d10 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20  ameters to.**   
10d20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a    FUNCTION()..**
10d30 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a  .**   LIKEFUNC(z
10d40 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
10d50 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20  , flags).**     
10d60 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
10d70 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
10d80 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
10d90 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a   function zName.
10da0 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65  **     that acce
10db0 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
10dc0 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d  ts and is implem
10dd0 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20  ented by a call 
10de0 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63  to C.**     func
10df0 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41  tion likeFunc. A
10e00 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20  rgument pArg is 
10e10 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20  cast to a (void 
10e20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20  *) and made.**  
10e30 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20     available as 
10e40 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  the function use
10e50 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
10e60 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68  user_data()). Th
10e70 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66  e.**     FuncDef
10e80 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20  .flags variable 
10e90 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
10ea0 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68  lue passed as th
10eb0 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70  e flags.**     p
10ec0 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65  arameter..*/.#de
10ed0 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  fine FUNCTION(zN
10ee0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10ef0 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10f00 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10f10 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10f20 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
10f30 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10f40 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
10f50 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
10f60 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
10f70 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10f80 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e  } }.#define VFUN
10f90 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
10fa0 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10fb0 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10fc0 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
10fd0 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10fe0 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
10ff0 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
11000 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
11010 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
11020 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44   {0} }.#define D
11030 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
11040 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
11050 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
11060 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
11070 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
11080 46 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78  F8, \.   0, 0, x
11090 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
110a0 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
110b0 66 69 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a  fine PURE_DATE(z
110c0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
110d0 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
110e0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
110f0 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
11100 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f  ITE_UTF8|SQLITE_
11110 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c  FUNC_CONSTANT, \
11120 0a 20 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69  .   (void*)&sqli
11130 74 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46  te3Config, 0, xF
11140 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
11150 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
11160 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e  ine FUNCTION2(zN
11170 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
11180 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74   bNC, xFunc, ext
11190 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
111a0 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  rg,SQLITE_FUNC_C
111b0 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
111c0 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
111d0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
111e0 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53  xtraFlags,\.   S
111f0 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
11200 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
11210 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
11220 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
11230 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e   STR_FUNCTION(zN
11240 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
11250 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
11260 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
11270 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49  UNC_SLOCHNG|SQLI
11280 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
11290 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
112a0 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30  L), \.   pArg, 0
112b0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
112c0 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66  , #zName, }.#def
112d0 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  ine LIKEFUNC(zNa
112e0 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66  me, nArg, arg, f
112f0 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
11300 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
11310 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
11320 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76  8|flags, \.   (v
11330 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69  oid *)arg, 0, li
11340 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c  keFunc, 0, 0, 0,
11350 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
11360 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
11370 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
11380 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
11390 69 6e 61 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a  inal, xValue) \.
113a0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
113b0 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
113c0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
113d0 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
113e0 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
113f0 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61  xStep,xFinal,xVa
11400 6c 75 65 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30  lue,0,#zName, {0
11410 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  }}.#define AGGRE
11420 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  GATE2(zName, nAr
11430 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
11440 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61  p, xFinal, extra
11450 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
11460 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
11470 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
11480 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
11490 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  gs, \.   SQLITE_
114a0 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
114b0 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
114c0 2c 78 46 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65  ,xFinal,0,#zName
114d0 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 57  , {0}}.#define W
114e0 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
114f0 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
11500 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78  xStep, xFinal, x
11510 56 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 2c  Value, xInverse,
11520 20 66 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53   f) \.  {nArg, S
11530 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
11540 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
11550 4f 4c 4c 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c  OLL)|f, \.   SQL
11560 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
11570 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
11580 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76  inal,xValue,xInv
11590 65 72 73 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  erse,#zName, {0}
115a0 7d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4e  }.#define INTERN
115b0 41 4c 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  AL_FUNCTION(zNam
115c0 65 2c 20 6e 41 72 67 2c 20 78 46 75 6e 63 29 20  e, nArg, xFunc) 
115d0 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
115e0 45 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c  E_FUNC_INTERNAL|
115f0 53 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49  SQLITE_UTF8|SQLI
11600 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
11610 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75  , \.   0, 0, xFu
11620 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
11630 61 6d 65 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a  ame, {0} }.../*.
11640 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73  ** All current s
11650 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74  avepoints are st
11660 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
11670 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61   list starting a
11680 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61  t.** sqlite3.pSa
11690 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72  vepoint. The fir
116a0 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68  st element in th
116b0 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f  e list is the mo
116c0 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f  st recently.** o
116d0 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  pened savepoint.
116e0 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   Savepoints are 
116f0 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73  added to the lis
11700 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a  t by the vdbe.**
11710 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
11720 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  struction..*/.st
11730 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b  ruct Savepoint {
11740 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11760 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f         /* Savepo
11770 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65  int name (nul-te
11780 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69  rminated) */.  i
11790 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
117a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
117b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
117c0 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c  deferred fk viol
117d0 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20  ations */.  i64 
117e0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
117f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11800 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
11810 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f  erred imm fk. */
11820 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
11830 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
11840 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74         /* Parent
11850 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61   savepoint (if a
11860 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ny) */.};../*.**
11870 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
11880 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73  re used as the s
11890 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20  econd parameter 
118a0 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  to sqlite3Savepo
118b0 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73  int(),.** and as
118c0 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
118d0 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70   to the OP_Savep
118e0 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
118f0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56  ..*/.#define SAV
11900 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20  EPOINT_BEGIN    
11910 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45    0.#define SAVE
11920 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20  POINT_RELEASE   
11930 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   1.#define SAVEP
11940 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20  OINT_ROLLBACK   
11950 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  2.../*.** Each S
11960 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69  QLite module (vi
11970 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69  rtual table defi
11980 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e  nition) is defin
11990 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ed by an.** inst
119a0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
119b0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c  owing structure,
119c0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
119d0 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a  qlite3.aModule.*
119e0 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f  * hash table..*/
119f0 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b  .struct Module {
11a00 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
11a10 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
11a20 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  ;       /* Callb
11a30 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a  ack pointers */.
11a40 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
11a50 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
11a60 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70         /* Name p
11a70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
11a80 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 69 6e  module() */.  in
11a90 74 20 6e 52 65 66 4d 6f 64 75 6c 65 3b 20 20 20  t nRefModule;   
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ab0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11ac0 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
11ad0 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 76 6f 69   object */.  voi
11ae0 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
11af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b00 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
11b10 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
11b20 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
11b30 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
11b40 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
11b50 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
11b60 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
11b70 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b   Table *pEpoTab;
11b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b90 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f        /* Eponymo
11ba0 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69  us table for thi
11bb0 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s module */.};..
11bc0 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  /*.** informatio
11bd0 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
11be0 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61  umn of an SQL ta
11bf0 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61  ble is held in a
11c00 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
11c10 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
11c20 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d  .*/.struct Colum
11c30 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  n {.  char *zNam
11c40 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
11c50 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c  f this column, \
11c60 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79  000, then the ty
11c70 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44  pe */.  Expr *pD
11c80 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61  flt;     /* Defa
11c90 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ult value of thi
11ca0 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
11cb0 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
11cc0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
11cd0 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
11ce0 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
11cf0 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
11d00 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
11d10 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
11d20 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
11d30 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
11d40 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
11d50 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
11d60 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
11d70 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
11d80 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
11d90 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c  ated size of val
11da0 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d  ue in this colum
11db0 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d  n. sizeof(INT)==
11dc0 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
11dd0 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
11de0 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
11df0 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
11e00 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
11e10 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
11e20 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
11e30 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
11e40 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
11e50 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
11e60 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
11e70 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
11e80 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
11e90 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
11ea0 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
11eb0 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
11ec0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
11ed0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11ee0 41 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30  AG_HASTYPE  0x00
11ef0 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61  04    /* Type na
11f00 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d  me follows colum
11f10 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e  n name */.#defin
11f20 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45  e COLFLAG_UNIQUE
11f30 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
11f40 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61  Column def conta
11f50 69 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72 20  ins "UNIQUE" or 
11f60 22 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  "PK" */.#define 
11f70 43 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52 45  COLFLAG_SORTERRE
11f80 46 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55 73  F 0x0010   /* Us
11f90 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77 69  e sorter-refs wi
11fa0 74 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  th this column *
11fb0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c  /../*.** A "Coll
11fc0 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20  ating Sequence" 
11fd0 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
11fe0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11ff0 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
12000 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74  ructure. Concept
12010 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69  ually, a collati
12020 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73  ng sequence cons
12030 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61  ists of a name a
12040 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73  nd.** a comparis
12050 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  on routine that 
12060 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65  defines the orde
12070 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e  r of that sequen
12080 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c  ce..**.** If Col
12090 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c  lSeq.xCmp is NUL
120a0 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  L, it means that
120b0 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e   the.** collatin
120c0 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e  g sequence is un
120d0 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65  defined.  Indice
120e0 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e  s built on an un
120f0 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61  defined.** colla
12100 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61  ting sequence ma
12110 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72  y not be read or
12120 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72   written..*/.str
12130 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20  uct CollSeq {.  
12140 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
12150 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
12160 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
12170 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65  equence, UTF-8 e
12180 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65  ncoded */.  u8 e
12190 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
121a0 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
121b0 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43  ng handled by xC
121c0 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mp() */.  void *
121d0 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  pUser;          
121e0 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
121f0 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20  t to xCmp() */. 
12200 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69   int (*xCmp)(voi
12210 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  d*,int, const vo
12220 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  id*, int, const 
12230 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28  void*);.  void (
12240 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20  *xDel)(void*);  
12250 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
12260 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  r pUser */.};../
12270 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65  *.** A sort orde
12280 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  r can be either 
12290 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a  ASC or DESC..*/.
122a0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
122b0 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f  O_ASC       0  /
122c0 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
122d0 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
122e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44  fine SQLITE_SO_D
122f0 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53  ESC      1  /* S
12300 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
12310 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
12320 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45  e SQLITE_SO_UNDE
12330 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73  FINED -1 /* No s
12340 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66  ort order specif
12350 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  ied */../*.** Co
12360 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79  lumn affinity ty
12370 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65  pes..**.** These
12380 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e   used to have mn
12390 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65  emonic name like
123a0 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   'i' for SQLITE_
123b0 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a  AFF_INTEGER and.
123c0 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54  ** 't' for SQLIT
123d0 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74  E_AFF_TEXT.  But
123e0 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c   we can save a l
123f0 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20  ittle space and 
12400 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73  improve.** the s
12410 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79  peed a little by
12420 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76   numbering the v
12430 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76  alues consecutiv
12440 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72  ely..**.** But r
12450 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74  ather than start
12460 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65   with 0 or 1, we
12470 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e   begin with 'A'.
12480 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77    That way,.** w
12490 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66  hen multiple aff
124a0 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20  inity types are 
124b0 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74  concatenated int
124c0 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a  o a string and.*
124d0 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34  * used as the P4
124e0 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77   operand, they w
124f0 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64  ill be more read
12500 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  able..**.** Note
12510 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e   also that the n
12520 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65  umeric types are
12530 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65   grouped togethe
12540 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e  r so that testin
12550 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72  g.** for a numer
12560 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e  ic type is a sin
12570 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  gle comparison. 
12580 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79   And the BLOB ty
12590 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a  pe is first..*/.
125a0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
125b0 46 46 5f 4e 4f 4e 45 20 20 20 20 20 30 78 34 30  FF_NONE     0x40
125c0 20 20 2f 2a 20 27 40 27 20 2a 2f 0a 23 64 65 66    /* '@' */.#def
125d0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  ine SQLITE_AFF_B
125e0 4c 4f 42 20 20 20 20 20 30 78 34 31 20 20 2f 2a  LOB     0x41  /*
125f0 20 27 41 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20   'A' */.#define 
12600 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
12610 20 20 20 20 30 78 34 32 20 20 2f 2a 20 27 42 27      0x42  /* 'B'
12620 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
12630 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
12640 30 78 34 33 20 20 2f 2a 20 27 43 27 20 2a 2f 0a  0x43  /* 'C' */.
12650 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12660 46 46 5f 49 4e 54 45 47 45 52 20 20 30 78 34 34  FF_INTEGER  0x44
12670 20 20 2f 2a 20 27 44 27 20 2a 2f 0a 23 64 65 66    /* 'D' */.#def
12680 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  ine SQLITE_AFF_R
12690 45 41 4c 20 20 20 20 20 30 78 34 35 20 20 2f 2a  EAL     0x45  /*
126a0 20 27 45 27 20 2a 2f 0a 0a 23 64 65 66 69 6e 65   'E' */..#define
126b0 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69   sqlite3IsNumeri
126c0 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28  cAffinity(X)  ((
126d0 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  X)>=SQLITE_AFF_N
126e0 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54  UMERIC)../*.** T
126f0 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
12700 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20  SK values masks 
12710 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63  off the signific
12720 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a  ant bits of an.*
12730 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65  * affinity value
12740 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
12750 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20  ITE_AFF_MASK    
12760 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64   0x47../*.** Add
12770 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75  itional bit valu
12780 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f  es that can be O
12790 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69  Red with an affi
127a0 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20  nity without.** 
127b0 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66  changing the aff
127c0 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  inity..**.** The
127d0 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
127e0 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e  flag is a combin
127f0 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20  ation of NULLEQ 
12800 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a  and JUMPIFNULL..
12810 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20  ** It causes an 
12820 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65  assert() to fire
12830 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
12840 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73  nd to a comparis
12850 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69  on.** operator i
12860 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  s NULL.  It is a
12870 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20  dded to certain 
12880 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
12890 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65  tors to.** prove
128a0 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e   that the operan
128b0 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f  ds are always NO
128c0 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69  T NULL..*/.#defi
128d0 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  ne SQLITE_KEEPNU
128e0 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20  LL     0x08  /* 
128f0 55 73 65 64 20 62 79 20 76 65 63 74 6f 72 20 3d  Used by vector =
12900 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66 69  = or <> */.#defi
12910 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  ne SQLITE_JUMPIF
12920 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20  NULL   0x10  /* 
12930 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20  jumps if either 
12940 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
12950 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12960 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30  E_STOREP2      0
12970 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65  x20  /* Store re
12980 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20  sult in reg[P2] 
12990 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70  rather than jump
129a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
129b0 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20  TE_NULLEQ       
129c0 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55  0x80  /* NULL=NU
129d0 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
129e0 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20  LITE_NOTNULL    
129f0 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72    0x90  /* Asser
12a00 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20  t that operands 
12a10 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a  are never NULL *
12a20 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  /../*.** An obje
12a30 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
12a40 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
12a50 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ach virtual tabl
12a60 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20  e present in.** 
12a70 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
12a80 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ema..**.** If th
12a90 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
12aa0 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65  a is shared, the
12ab0 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69  n there is one i
12ac0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a  nstance of this.
12ad0 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ** structure for
12ae0 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
12af0 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74  onnection (sqlit
12b00 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74  e3*) that uses t
12b10 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68  he shared.** sch
12b20 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63  ema. This is bec
12b30 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61  ause each databa
12b40 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  se connection re
12b50 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75  quires its own u
12b60 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63  nique.** instanc
12b70 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  e of the sqlite3
12b80 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73  _vtab* handle us
12b90 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
12ba0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a   virtual table.*
12bb0 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
12bc0 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  . sqlite3_vtab* 
12bd0 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20  handles can not 
12be0 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65  be shared betwee
12bf0 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  n.** database co
12c00 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
12c10 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
12c20 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
12c30 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d  atabase.** schem
12c40 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
12c50 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
12c60 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
12c70 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
12c80 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12c90 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
12ca0 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
12cb0 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
12cc0 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
12cd0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
12ce0 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
12cf0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
12d00 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
12d10 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
12d20 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
12d30 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
12d40 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
12d50 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68  l tables.** with
12d60 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
12d70 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70   So that they ap
12d80 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20  pear as part of 
12d90 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74  the callers.** t
12da0 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
12db0 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
12dc0 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
12dd0 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
12de0 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
12df0 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
12e00 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
12e10 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
12e20 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
12e30 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
12e40 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
12e50 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
12e60 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
12e70 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
12e80 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
12e90 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
12ea0 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
12eb0 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
12ec0 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
12ed0 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
12ee0 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
12ef0 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
12f00 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
12f10 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
12f20 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
12f30 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
12f40 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
12f50 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
12f60 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
12f70 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
12f80 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
12f90 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
12fa0 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
12fb0 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
12fc0 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
12fd0 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
12fe0 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
12ff0 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
13000 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
13010 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
13020 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
13030 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
13040 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
13050 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
13060 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
13070 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
13080 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
13090 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e  ot.** deleted an
130a0 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  d the sqlite3_vt
130b0 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20  ab* handles are 
130c0 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28  not xDisconnect(
130d0 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  )ed.** immediate
130e0 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65  ly. Instead, the
130f0 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d  y are moved from
13100 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
13110 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e  le list to.** an
13120 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73  other linked lis
13130 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20  t headed by the 
13140 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
13150 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ect member of th
13160 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
13170 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63  ng sqlite3 struc
13180 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74  ture. They are t
13190 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73  hen deleted/xDis
131a0 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78  connected.** nex
131b0 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
131c0 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
131d0 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
131e0 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
131f0 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
13200 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
13210 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
13220 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
13230 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
13240 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
13250 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
13260 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
13270 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
13280 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
13290 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
132a0 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
132b0 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
132c0 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
132d0 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
132e0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
132f0 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
13300 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
13310 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
13320 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
13330 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
13340 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  ated by.** sqlit
13350 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73  e3DbMalloc(), us
13360 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
13370 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64  on handle stored
13380 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73   in VTable.db as
13390 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72  .** the first ar
133a0 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  gument..*/.struc
133b0 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  t VTable {.  sql
133c0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
133d0 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
133e0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
133f0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
13400 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f  is table */.  Mo
13410 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20  dule *pMod;     
13420 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
13430 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70  er to module imp
13440 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
13450 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
13460 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f  Vtab;      /* Po
13470 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e  inter to vtab in
13480 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
13490 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
134a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
134b0 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
134c0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
134d0 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e  .  u8 bConstrain
134e0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
134f0 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
13500 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
13510 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65  d */.  int iSave
13520 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
13530 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65   /* Depth of the
13540 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b   SAVEPOINT stack
13550 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e   */.  VTable *pN
13560 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
13570 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65  /* Next in linke
13580 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76  d list (see abov
13590 65 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e) */.#ifdef SQL
135a0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 48 41 52 45  ITE_ENABLE_SHARE
135b0 44 5f 53 43 48 45 4d 41 0a 20 20 63 68 61 72 20  D_SCHEMA.  char 
135c0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
135d0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 6e 61       /* Table na
135e0 6d 65 20 28 52 45 55 53 45 5f 53 43 48 45 4d 41  me (REUSE_SCHEMA
135f0 20 6d 6f 64 65 29 20 2a 2f 0a 23 65 6e 64 69 66   mode) */.#endif
13600 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  .};../*.** The s
13610 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53  chema for each S
13620 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65  QL table and vie
13630 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  w is represented
13640 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79   in memory.** by
13650 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
13660 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
13670 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
13680 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
13690 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
136a0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
136b0 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a   table or view *
136c0 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c  /.  Column *aCol
136d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  ;        /* Info
136e0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
136f0 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
13700 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
13710 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53      /* List of S
13720 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68  QL indexes on th
13730 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53  is table. */.  S
13740 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
13750 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20      /* NULL for 
13760 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20  tables.  Points 
13770 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66  to definition if
13780 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b   a view. */.  FK
13790 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20  ey *pFKey;      
137a0 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
137b0 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
137c0 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
137d0 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
137e0 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a  ColAff;       /*
137f0 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
13800 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
13810 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
13820 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65    ExprList *pChe
13830 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48  ck;    /* All CH
13840 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
13850 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
13860 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e            /*   .
13870 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  .. also used as 
13880 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74  column name list
13890 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20   in a VIEW */.  
138a0 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
138b0 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72       /* Root BTr
138c0 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69 73  ee page for this
138d0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20   table */.  u32 
138e0 6e 54 61 62 52 65 66 3b 20 20 20 20 20 20 20 20  nTabRef;        
138f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
13900 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54  inters to this T
13910 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 74 61  able */.  u32 ta
13920 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 2f  bFlags;        /
13930 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76  * Mask of TF_* v
13940 61 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36 20 69  alues */.  i16 i
13950 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  PKey;           
13960 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69  /* If not negati
13970 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b  ve, use aCol[iPK
13980 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64  ey] as the rowid
13990 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
139a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
139b0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
139c0 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
139d0 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f  .  LogEst nRowLo
139e0 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d  gEst;   /* Estim
139f0 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
13a00 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
13a10 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
13a20 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
13a30 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
13a40 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
13a50 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
13a60 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  tes */.#ifdef SQ
13a70 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54  LITE_ENABLE_COST
13a80 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f  MULT.  LogEst co
13a90 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43  stMult;     /* C
13aa0 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66  ost multiplier f
13ab0 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61  or using this ta
13ac0 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ble */.#endif.  
13ad0 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20  u8 keyConf;     
13ae0 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20       /* What to 
13af0 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e  do in case of un
13b00 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63  iqueness conflic
13b10 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69  t on iPKey */.#i
13b20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13b30 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69  T_ALTERTABLE.  i
13b40 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b  nt addColOffset;
13b50 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
13b60 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
13b70 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  mt to add a new 
13b80 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66  column */.#endif
13b90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
13ba0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
13bb0 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41  E.  int nModuleA
13bc0 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  rg;      /* Numb
13bd0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
13be0 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f  to the module */
13bf0 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75  .  char **azModu
13c00 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f  leArg;  /* 0: mo
13c10 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32  dule 1: schema 2
13c20 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e  : vtab name 3...
13c30 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62  : args */.  VTab
13c40 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20  le *pVTable;    
13c50 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62   /* List of VTab
13c60 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23  le objects. */.#
13c70 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20  endif.  Trigger 
13c80 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20  *pTrigger;   /* 
13c90 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73  List of triggers
13ca0 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65   stored in pSche
13cb0 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  ma */.  Schema *
13cc0 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
13cd0 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74  Schema that cont
13ce0 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20  ains this table 
13cf0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78  */.  Table *pNex
13d00 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78  tZombie;  /* Nex
13d10 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70  t on the Parse.p
13d20 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a  ZombieTab list *
13d30 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
13d40 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54  wed values for T
13d50 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a  able.tabFlags..*
13d60 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65  *.** TF_OOOHidde
13d70 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62  n applies to tab
13d80 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68 61 74  les or view that
13d90 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c   have hidden col
13da0 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a  umns that are.**
13db0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e   followed by non
13dc0 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e  -hidden columns.
13dd0 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45    Example:  "CRE
13de0 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
13df0 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61  E x USING.** vta
13e00 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b  b1(a HIDDEN, b);
13e10 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69 73  ".  Since "b" is
13e20 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f   a non-hidden co
13e30 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20  lumn but "a" is 
13e40 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54  hidden,.** the T
13e50 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72  F_OOOHidden attr
13e60 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c  ibute would appl
13e70 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20  y in this case. 
13e80 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65 71   Such tables req
13e90 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20  uire.** special 
13ea0 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20  handling during 
13eb0 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e  INSERT processin
13ec0 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  g..*/.#define TF
13ed0 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20  _Readonly       
13ee0 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 52 65   0x0001    /* Re
13ef0 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74  ad-only system t
13f00 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
13f10 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20  TF_Ephemeral    
13f20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
13f30 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  An ephemeral tab
13f40 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
13f50 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20  _HasPrimaryKey  
13f60 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 61   0x0004    /* Ta
13f70 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72  ble has a primar
13f80 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
13f90 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e   TF_Autoincremen
13fa0 74 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a  t   0x0008    /*
13fb0 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   Integer primary
13fc0 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72   key is autoincr
13fd0 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  ement */.#define
13fe0 20 54 46 5f 48 61 73 53 74 61 74 31 20 20 20 20   TF_HasStat1    
13ff0 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
14000 20 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65 74 20   nRowLogEst set 
14010 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
14020 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  1 */.#define TF_
14030 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20  WithoutRowid    
14040 30 78 30 30 32 30 20 20 20 20 2f 2a 20 4e 6f 20  0x0020    /* No 
14050 72 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59 20  rowid.  PRIMARY 
14060 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a  KEY is the key *
14070 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56  /.#define TF_NoV
14080 69 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78 30  isibleRowid  0x0
14090 30 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65  040    /* No use
140a0 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69 64  r-visible "rowid
140b0 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  " column */.#def
140c0 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  ine TF_OOOHidden
140d0 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20 20         0x0080   
140e0 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72   /* Out-of-Order
140f0 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
14100 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53 74  */.#define TF_St
14110 61 74 73 55 73 65 64 20 20 20 20 20 20 20 30 78  atsUsed       0x
14120 30 31 30 30 20 20 20 20 2f 2a 20 51 75 65 72 79  0100    /* Query
14130 20 70 6c 61 6e 6e 65 72 20 64 65 63 69 73 69 6f   planner decisio
14140 6e 73 20 61 66 66 65 63 74 65 64 20 62 79 0a 20  ns affected by. 
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61 69 52      ** Index.aiR
14180 6f 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c 75 65  owLogEst[] value
14190 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  s */.#define TF_
141a0 48 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20  HasNotNull      
141b0 30 78 30 32 30 30 20 20 20 20 2f 2a 20 43 6f 6e  0x0200    /* Con
141c0 74 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63  tains NOT NULL c
141d0 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
141e0 65 66 69 6e 65 20 54 46 5f 53 68 61 64 6f 77 20  efine TF_Shadow 
141f0 20 20 20 20 20 20 20 20 20 30 78 30 34 30 30 20           0x0400 
14200 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
14210 20 73 68 61 64 6f 77 20 74 61 62 6c 65 20 2a 2f   shadow table */
14220 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20  ../*.** Test to 
14230 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  see whether or n
14240 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61 20  ot a table is a 
14250 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
14260 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20  This is.** done 
14270 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68  as a macro so th
14280 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70  at it will be op
14290 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e  timized out when
142a0 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
142b0 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69  e support is omi
142c0 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
142d0 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ild..*/.#ifndef 
142e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
142f0 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
14300 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
14310 20 20 20 20 20 28 28 58 29 2d 3e 6e 4d 6f 64 75       ((X)->nModu
14320 6c 65 41 72 67 29 0a 23 65 6c 73 65 0a 23 20 20  leArg).#else.#  
14330 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
14340 28 58 29 20 20 20 20 20 20 30 0a 23 65 6e 64 69  (X)      0.#endi
14350 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
14360 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20  to determine if 
14370 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69 64 64  a column is hidd
14380 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72 79 48  en.  IsOrdinaryH
14390 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a  iddenColumn().**
143a0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
143b0 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61 62 6c  non-virtual tabl
143c0 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74 61 62  es (ordinary tab
143d0 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29 20 61  les and views) a
143e0 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  nd is.** always 
143f0 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53 51 4c  false unless SQL
14400 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
14410 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64 65 66  N_COLUMNS is def
14420 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20 49 73  ined.  The.** Is
14430 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d  HiddenColumn() m
14440 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61 6c 20  acro is general 
14450 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20  purpose..*/.#if 
14460 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
14470 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
14480 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e 65 20  UMNS).#  define 
14490 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
144a0 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d  )         (((X)-
144b0 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
144c0 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
144d0 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
144e0 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
144f0 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c  (X) (((X)->colFl
14500 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
14510 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69 66 20  DDEN)!=0).#elif 
14520 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
14530 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
14540 45 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  E).#  define IsH
14550 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
14560 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f         (((X)->co
14570 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
14580 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20  _HIDDEN)!=0).#  
14590 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72  define IsOrdinar
145a0 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  yHiddenColumn(X)
145b0 20 30 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69   0.#else.#  defi
145c0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
145d0 6e 28 58 29 20 20 20 20 20 20 20 20 20 30 0a 23  n(X)         0.#
145e0 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e    define IsOrdin
145f0 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
14600 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  X) 0.#endif.../*
14610 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20   Does the table 
14620 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a  have a rowid */.
14630 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64  #define HasRowid
14640 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74  (X)     (((X)->t
14650 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74  abFlags & TF_Wit
14660 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23  houtRowid)==0).#
14670 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52 6f  define VisibleRo
14680 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74 61  wid(X) (((X)->ta
14690 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56 69  bFlags & TF_NoVi
146a0 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a  sibleRowid)==0).
146b0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65  ./*.** Each fore
146c0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
146d0 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  nt is an instanc
146e0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
146f0 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
14700 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65  .** A foreign ke
14710 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  y is associated 
14720 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e  with two tables.
14730 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62    The "from" tab
14740 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62  le is.** the tab
14750 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
14760 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
14770 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61  clause that crea
14780 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  tes the foreign.
14790 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f  ** key.  The "to
147a0 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74  " table is the t
147b0 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d  able that is nam
147c0 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45  ed in the REFERE
147d0 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20  NCES clause..** 
147e0 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78  Consider this ex
147f0 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ample:.**.**    
14800 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78   CREATE TABLE ex
14810 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e  1(.**       a IN
14820 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
14830 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e  Y,.**       b IN
14840 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54  TEGER CONSTRAINT
14850 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20   fk1 REFERENCES 
14860 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b  ex2(x).**     );
14870 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69  .**.** For forei
14880 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68  gn key "fk1", th
14890 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
148a0 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f  "ex1" and the to
148b0 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e  -table is "ex2".
148c0 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e  .** Equivalent n
148d0 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ames:.**.**     
148e0 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68  from-table == ch
148f0 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20  ild-table.**    
14900 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70     to-table == p
14910 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a  arent-table.**.*
14920 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45  * Each REFERENCE
14930 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74  S clause generat
14940 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  es an instance o
14950 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
14960 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69  structure.** whi
14970 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74  ch is attached t
14980 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  o the from-table
14990 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20  .  The to-table 
149a0 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77  need not exist w
149b0 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d  hen.** the from-
149c0 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
149d0 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65  .  The existence
149e0 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65   of the to-table
149f0 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e   is not checked.
14a00 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20  .**.** The list 
14a10 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66  of all parents f
14a20 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58  or child Table X
14a30 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46   is held at X.pF
14a40 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73  Key..**.** A lis
14a50 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65  t of all childre
14a60 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61  n for a table na
14a70 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67  med Z (which mig
14a80 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73  ht not even exis
14a90 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e  t).** is held in
14aa0 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68   Schema.fkeyHash
14ab0 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65 79   with a hash key
14ac0 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74   of Z..*/.struct
14ad0 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20   FKey {.  Table 
14ae0 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54  *pFrom;     /* T
14af0 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
14b00 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
14b10 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c  lause (aka: Chil
14b20 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  d) */.  FKey *pN
14b30 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78  extFrom;  /* Nex
14b40 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65 20  t FKey with the 
14b50 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e  same in pFrom. N
14b60 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46  ext parent of pF
14b70 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  rom */.  char *z
14b80 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  To;        /* Na
14b90 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74  me of table that
14ba0 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20   the key points 
14bb0 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29  to (aka: Parent)
14bc0 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
14bd0 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  tTo;    /* Next 
14be0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
14bf0 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66  o. Next child of
14c00 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20   zTo. */.  FKey 
14c10 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20  *pPrevTo;    /* 
14c20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74 68  Previous with th
14c30 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20  e same zTo */.  
14c40 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  int nCol;       
14c50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
14c60 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b  olumns in this k
14c70 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52  ey */.  /* EV: R
14c80 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a  -30323-21917 */.
14c90 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b    u8 isDeferred;
14ca0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
14cb0 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65  f constraint che
14cc0 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65  cking is deferre
14cd0 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f  d till COMMIT */
14ce0 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d  .  u8 aAction[2]
14cf0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44  ;        /* ON D
14d00 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44  ELETE and ON UPD
14d10 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73  ATE actions, res
14d20 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54  pectively */.  T
14d30 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65  rigger *apTrigge
14d40 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73  r[2];/* Triggers
14d50 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61   for aAction[] a
14d60 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
14d70 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20  ct sColMap {    
14d80 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20    /* Mapping of 
14d90 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d  columns in pFrom
14da0 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a   to columns in z
14db0 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46  To */.    int iF
14dc0 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  rom;            
14dd0 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75  /* Index of colu
14de0 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20  mn in pFrom */. 
14df0 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20     char *zCol;  
14e00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
14e10 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54   of column in zT
14e20 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20  o.  If NULL use 
14e30 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
14e40 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20   } aCol[1];     
14e50 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
14e60 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20  try for each of 
14e70 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  nCol columns */.
14e80 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65  };../*.** SQLite
14e90 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64   supports many d
14ea0 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f  ifferent ways to
14eb0 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74   resolve a const
14ec0 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20  raint.** error. 
14ed0 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73   ROLLBACK proces
14ee0 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20  sing means that 
14ef0 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
14f00 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73  lation.** causes
14f10 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
14f20 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69  n process to fai
14f30 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75  l and for the cu
14f40 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
14f50 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65  n.** to be rolle
14f60 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70  d back.  ABORT p
14f70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
14f80 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
14f90 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c   process.** fail
14fa0 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20  s and any prior 
14fb0 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61  changes from tha
14fc0 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20  t one operation 
14fd0 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a  are backed out,.
14fe0 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73  ** but the trans
14ff0 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f  action is not ro
15000 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c  lled back.  FAIL
15010 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
15020 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70  s that.** the op
15030 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  eration in progr
15040 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65  ess stops and re
15050 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63  turns an error c
15060 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a  ode.  But prior.
15070 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74  ** changes due t
15080 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  o the same opera
15090 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63  tion are not bac
150a0 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72  ked out and no r
150b0 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72  ollback.** occur
150c0 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73  s.  IGNORE means
150d0 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63   that the partic
150e0 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61  ular row that ca
150f0 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  used the constra
15100 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  int.** error is 
15110 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20  not inserted or 
15120 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73  updated.  Proces
15130 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
15140 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69  nd no error.** i
15150 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50  s returned.  REP
15160 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20  LACE means that 
15170 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61  preexisting data
15180 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63  base rows that c
15190 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55  aused.** a UNIQU
151a0 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
151b0 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76  lation are remov
151c0 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e  ed so that the n
151d0 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20  ew insert or.** 
151e0 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65  update can proce
151f0 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
15200 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
15210 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74   error is report
15220 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49  ed..**.** RESTRI
15230 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64  CT, SETNULL, and
15240 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73   CASCADE actions
15250 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66   apply only to f
15260 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20  oreign keys..** 
15270 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20  RESTRICT is the 
15280 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f  same as ABORT fo
15290 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65  r IMMEDIATE fore
152a0 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65  ign keys and the
152b0 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c  .** same as ROLL
152c0 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45  BACK for DEFERRE
152d0 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c  D keys.  SETNULL
152e0 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
152f0 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69  foreign.** key i
15300 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20  s set to NULL.  
15310 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68  CASCADE means th
15320 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55  at a DELETE or U
15330 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20  PDATE of the.** 
15340 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
15350 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74   row is propagat
15360 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20  ed into the row 
15370 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a  that holds the.*
15380 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a  * foreign key..*
15390 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
153a0 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75  ng symbolic valu
153b0 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72  es are used to r
153c0 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65  ecord which type
153d0 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f  .** of action to
153e0 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e   take..*/.#defin
153f0 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20  e OE_None     0 
15400 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f    /* There is no
15410 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63   constraint to c
15420 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  heck */.#define 
15430 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20  OE_Rollback 1   
15440 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72  /* Fail the oper
15450 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61  ation and rollba
15460 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
15470 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  on */.#define OE
15480 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a  _Abort    2   /*
15490 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65   Back out change
154a0 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c  s but do no roll
154b0 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e  back transaction
154c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46   */.#define OE_F
154d0 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53  ail     3   /* S
154e0 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f  top the operatio
154f0 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20  n but leave all 
15500 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f  prior changes */
15510 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f  .#define OE_Igno
15520 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f  re   4   /* Igno
15530 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f  re the error. Do
15540 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45   not do the INSE
15550 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
15560 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61  #define OE_Repla
15570 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74  ce  5   /* Delet
15580 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72  e existing recor
15590 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52  d, then do INSER
155a0 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23  T or UPDATE */.#
155b0 64 65 66 69 6e 65 20 4f 45 5f 55 70 64 61 74 65  define OE_Update
155c0 20 20 20 36 20 20 20 2f 2a 20 50 72 6f 63 65 73     6   /* Proces
155d0 73 20 61 73 20 61 20 44 4f 20 55 50 44 41 54 45  s as a DO UPDATE
155e0 20 69 6e 20 61 6e 20 75 70 73 65 72 74 20 2a 2f   in an upsert */
155f0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74  .#define OE_Rest
15600 72 69 63 74 20 37 20 20 20 2f 2a 20 4f 45 5f 41  rict 7   /* OE_A
15610 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41  bort for IMMEDIA
15620 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  TE, OE_Rollback 
15630 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a  for DEFERRED */.
15640 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75  #define OE_SetNu
15650 6c 6c 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74  ll  8   /* Set t
15660 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
15670 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a  alue to NULL */.
15680 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66  #define OE_SetDf
15690 6c 74 20 20 39 20 20 20 2f 2a 20 53 65 74 20 74  lt  9   /* Set t
156a0 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
156b0 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61  alue to its defa
156c0 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ult */.#define O
156d0 45 5f 43 61 73 63 61 64 65 20 20 31 30 20 20 2f  E_Cascade  10  /
156e0 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68  * Cascade the ch
156f0 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
15700 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 31 20   OE_Default  11 
15710 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20   /* Do whatever 
15720 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69  the default acti
15730 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  on is */.../*.**
15740 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
15750 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
15760 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
15770 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a  d as the first.*
15780 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71  * argument to sq
15790 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70  lite3VdbeKeyComp
157a0 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20  are and is used 
157b0 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a  to control the.*
157c0 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  * comparison of 
157d0 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65  the two index ke
157e0 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ys..**.** Note t
157f0 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d  hat aSortOrder[]
15800 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76   and aColl[] hav
15810 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73  e nField+1 slots
15820 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
15830 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72  nField slots for
15840 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
15850 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e  an index then on
15860 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20  e extra slot.** 
15870 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74  for the rowid at
15880 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
15890 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20  uct KeyInfo {.  
158a0 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u32 nRef;       
158b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
158c0 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74   references to t
158d0 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65  his KeyInfo obje
158e0 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ct */.  u8 enc; 
158f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
15900 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f  ext encoding - o
15910 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
15920 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a  _UTF* values */.
15930 20 20 75 31 36 20 6e 4b 65 79 46 69 65 6c 64 3b    u16 nKeyField;
15940 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15950 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69  of key columns i
15960 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
15970 20 75 31 36 20 6e 41 6c 6c 46 69 65 6c 64 3b 20   u16 nAllField; 
15980 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 63 6f       /* Total co
15990 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75 64 69 6e 67  lumns, including
159a0 20 6b 65 79 20 70 6c 75 73 20 6f 74 68 65 72 73   key plus others
159b0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
159c0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
159d0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
159e0 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53  tion */.  u8 *aS
159f0 6f 72 74 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a  ortFlags;     /*
15a00 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20   Sort order for 
15a10 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a  each column. */.
15a20 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c    CollSeq *aColl
15a30 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  [1];  /* Collati
15a40 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  ng sequence for 
15a50 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  each term of the
15a60 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a   key */.};../*.*
15a70 2a 20 41 6c 6c 6f 77 65 64 20 62 69 74 20 76 61  * Allowed bit va
15a80 6c 75 65 73 20 66 6f 72 20 65 6e 74 72 69 65 73  lues for entries
15a90 20 69 6e 20 74 68 65 20 4b 65 79 49 6e 66 6f 2e   in the KeyInfo.
15aa0 61 53 6f 72 74 46 6c 61 67 73 5b 5d 20 61 72 72  aSortFlags[] arr
15ab0 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4b  ay..*/.#define K
15ac0 45 59 49 4e 46 4f 5f 4f 52 44 45 52 5f 44 45 53  EYINFO_ORDER_DES
15ad0 43 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20  C    0x01    /* 
15ae0 44 45 53 43 20 73 6f 72 74 20 6f 72 64 65 72 20  DESC sort order 
15af0 2a 2f 0a 23 64 65 66 69 6e 65 20 4b 45 59 49 4e  */.#define KEYIN
15b00 46 4f 5f 4f 52 44 45 52 5f 42 49 47 4e 55 4c 4c  FO_ORDER_BIGNULL
15b10 20 30 78 30 32 20 20 20 20 2f 2a 20 4e 55 4c 4c   0x02    /* NULL
15b20 20 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20   is larger than 
15b30 61 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20  any other value 
15b40 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f  */../*.** This o
15b50 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65  bject holds a re
15b60 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20 62  cord which has b
15b70 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69  een parsed out i
15b80 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a  nto individual.*
15b90 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68  * fields, for th
15ba0 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f  e purposes of do
15bb0 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e  ing a comparison
15bc0 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
15bd0 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
15be0 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
15bf0 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
15c00 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
15c10 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
15c20 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
15c30 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
15c40 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
15c50 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
15c60 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
15c70 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
15c80 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
15c90 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
15ca0 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
15cb0 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
15cc0 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
15cd0 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
15ce0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e  opcode..**.** An
15cf0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
15d00 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20  s object serves 
15d10 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64  as a "key" for d
15d20 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e  oing a search on
15d30 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74  .** an index b+t
15d40 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66  ree. The goal of
15d50 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20 74   the search is t
15d60 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79  o find the entry
15d70 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73   that.** is clos
15d80 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65  ed to the key de
15d90 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73 20  scribed by this 
15da0 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62  object.  This ob
15db0 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a  ject might hold.
15dc0 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69 78  ** just a prefix
15dd0 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68   of the key.  Th
15de0 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
15df0 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a  ds is given by.*
15e00 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  * pKeyInfo->nFie
15e10 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31  ld..**.** The r1
15e20 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61   and r2 fields a
15e30 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f  re the values to
15e40 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73 20   return if this 
15e50 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
15e60 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74  .** or greater t
15e70 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65  han a key in the
15e80 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74 69   btree, respecti
15e90 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65  vely.  These are
15ea0 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20   normally.** -1 
15eb0 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69 76  and +1 respectiv
15ec0 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62  ely, but might b
15ed0 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31  e inverted to +1
15ee0 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62   and -1 if the b
15ef0 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44  -tree.** is in D
15f00 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  ESC order..**.**
15f10 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69   The key compari
15f20 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63  son functions ac
15f30 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65  tually return de
15f40 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68  fault_rc when th
15f50 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71  ey find.** an eq
15f60 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  uals comparison.
15f70 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e    default_rc can
15f80 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31   be -1, 0, or +1
15f90 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 0a  .  If there are.
15fa0 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72  ** multiple entr
15fb0 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65  ies in the b-tre
15fc0 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
15fd0 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c  key (when only l
15fe0 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65  ooking.** at the
15ff0 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d   first pKeyInfo-
16000 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20  >nFields,) then 
16010 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
16020 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a  e set to -1 to.*
16030 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  * cause the sear
16040 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  ch to find the l
16050 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31  ast match, or +1
16060 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65   to cause the se
16070 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20  arch to.** find 
16080 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e  the first match.
16090 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63  .**.** The key c
160a0 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69  omparison functi
160b0 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53  ons will set eqS
160c0 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74  een to true if t
160d0 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20  hey ever.** get 
160e0 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74  and equal result
160f0 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
16100 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
16110 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f  to a b-tree reco
16120 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61  rd..** When defa
16130 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73  ult_rc!=0, the s
16140 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20  earch might end 
16150 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64  up on the record
16160 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20   immediately.** 
16170 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74  before the first
16180 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69   match or immedi
16190 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20  ately after the 
161a0 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65  last match.  The
161b0 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64  .** eqSeen field
161c0 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77   will indicate w
161d0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
161e0 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69   exact match exi
161f0 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d  sts in the.** b-
16200 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tree..*/.struct 
16210 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b  UnpackedRecord {
16220 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
16230 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  Info;  /* Collat
16240 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64  ion and sort-ord
16250 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  er information *
16260 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20  /.  Mem *aMem;  
16270 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
16280 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
16290 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
162a0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
162b0 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20  in apMem[] */.  
162c0 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20  i8 default_rc;  
162d0 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
162e0 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73  n result if keys
162f0 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20   are equal */.  
16300 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  u8 errCode;     
16310 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74      /* Error det
16320 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64  ected by xRecord
16330 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54  Compare (CORRUPT
16340 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20   or NOMEM) */.  
16350 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20  i8 r1;          
16360 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
16370 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c  return if (lhs <
16380 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32   rhs) */.  i8 r2
16390 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
163a0 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
163b0 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
163c0 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b   */.  u8 eqSeen;
163d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
163e0 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79  e if an equality
163f0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20   comparison has 
16400 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a  been seen */.};.
16410 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
16420 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
16430 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
16440 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
16450 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
16460 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
16470 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
16480 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
16490 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
164a0 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
164b0 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
164c0 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
164d0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
164e0 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
164f0 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
16500 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
16510 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
16520 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
16530 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
16540 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
16550 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
16560 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
16570 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
16580 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
16590 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
165a0 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
165b0 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
165c0 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
165d0 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
165e0 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
165f0 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
16600 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
16610 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
16620 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
16630 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
16640 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
16650 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
16660 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
16670 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
16680 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f   the.** first co
16690 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
166a0 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
166b0 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
166c0 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
166d0 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
166e0 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
166f0 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
16700 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
16710 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
16720 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
16730 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
16740 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
16750 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
16760 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
16770 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
16780 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
16790 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
167a0 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
167b0 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
167c0 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
167d0 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
167e0 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
167f0 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
16800 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
16810 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
16820 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
16830 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
16840 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
16850 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c  resolution.** al
16860 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f  gorithm to emplo
16870 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74  y whenever an at
16880 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
16890 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e   insert a non-un
168a0 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e  ique.** element.
168b0 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72  .**.** While par
168c0 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41  sing a CREATE TA
168d0 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e  BLE or CREATE IN
168e0 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  DEX statement in
168f0 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e   order to.** gen
16900 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20  erate VDBE code 
16910 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70  (as opposed to p
16920 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20  arsing one read 
16930 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d  from an sqlite_m
16940 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61  aster.** table a
16950 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e  s part of parsin
16960 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61  g an existing da
16970 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20  tabase schema), 
16980 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e  transient instan
16990 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  ces.** of this s
169a0 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20  tructure may be 
169b0 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73  created. In this
169c0 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e   case the Index.
169d0 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73  tnum variable is
169e0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
169f0 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  e the address of
16a00 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74   a VDBE instruct
16a10 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62  ion, not a datab
16a20 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  ase page.** numb
16a30 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20  er (it cannot - 
16a40 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67  the database pag
16a50 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74  e is not allocat
16a60 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42  ed until the VDB
16a70 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20  E.** program is 
16a80 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63  executed). See c
16a90 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52  onvertToWithoutR
16aa0 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20  owidTable() for 
16ab0 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75  details..*/.stru
16ac0 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
16ad0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
16ae0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
16af0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
16b00 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   i16 *aiColumn; 
16b10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
16b20 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
16b30 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
16b40 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
16b50 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c    LogEst *aiRowL
16b60 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72  ogEst;     /* Fr
16b70 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e  om ANALYZE: Est.
16b80 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62   rows selected b
16b90 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  y each column */
16ba0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65  .  Table *pTable
16bb0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
16bc0 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
16bd0 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
16be0 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
16bf0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69           /* Stri
16c00 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
16c10 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
16c20 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
16c30 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ex *pNext;      
16c40 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
16c50 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  t index associat
16c60 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ed with the same
16c70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65   table */.  Sche
16c80 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
16c90 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
16ca0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
16cb0 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
16cc0 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
16cd0 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63     /* for each c
16ce0 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53  olumn: True==DES
16cf0 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f  C, False==ASC */
16d00 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  .  const char **
16d10 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41  azColl;     /* A
16d20 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
16d30 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
16d40 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
16d50 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68  Expr *pPartIdxWh
16d60 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52  ere;     /* WHER
16d70 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
16d80 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a  tial indices */.
16d90 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c    ExprList *aCol
16da0 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f  Expr;      /* Co
16db0 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73  lumn expressions
16dc0 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
16dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16de0 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
16df0 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
16e00 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
16e10 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
16e20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
16e30 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
16e40 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
16e50 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
16e60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16e70 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
16e80 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
16e90 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
16ea0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16eb0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
16ec0 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
16ed0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
16ee0 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
16ef0 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
16f00 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
16f10 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
16f20 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
16f30 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20  d idxType:2;    
16f40 20 20 2f 2a 20 30 3a 4e 6f 72 6d 61 6c 20 31 3a    /* 0:Normal 1:
16f50 55 4e 49 51 55 45 2c 20 32 3a 50 52 49 4d 41 52  UNIQUE, 2:PRIMAR
16f60 59 20 4b 45 59 2c 20 33 3a 49 50 4b 20 2a 2f 0a  Y KEY, 3:IPK */.
16f70 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
16f80 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
16f90 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
16fa0 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
16fb0 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
16fc0 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
16fd0 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
16fe0 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
16ff0 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
17000 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
17010 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
17020 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
17030 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
17040 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
17050 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
17060 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
17070 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
17080 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
17090 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ex */.  unsigned
170a0 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20   noSkipScan:1;  
170b0 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74   /* Do not try t
170c0 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20  o use skip-scan 
170d0 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73  if true */.  uns
170e0 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31  igned hasStat1:1
170f0 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f  ;     /* aiRowLo
17100 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65  gEst values come
17110 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
17120 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  t1 */.  unsigned
17130 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20 20   bNoQuery:1;    
17140 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 74   /* Do not use t
17150 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70 74  his index to opt
17160 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a 2f  imize queries */
17170 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 41 73 63  .  unsigned bAsc
17180 4b 65 79 42 75 67 3a 31 3b 20 20 20 2f 2a 20 54  KeyBug:1;   /* T
17190 72 75 65 20 69 66 20 74 68 65 20 62 62 61 37 62  rue if the bba7b
171a0 36 39 66 39 38 34 39 62 35 62 66 20 62 75 67 20  69f9849b5bf bug 
171b0 61 70 70 6c 69 65 73 20 2a 2f 0a 23 69 66 64 65  applies */.#ifde
171c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
171d0 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d  STAT4.  int nSam
171e0 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ple;            
171f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c   /* Number of el
17200 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c  ements in aSampl
17210 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  e[] */.  int nSa
17220 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20  mpleCol;        
17230 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64    /* Size of Ind
17240 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20  exSample.anEq[] 
17250 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74  and so on */.  t
17260 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20  Rowcnt *aAvgEq; 
17270 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
17280 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f  ge nEq values fo
17290 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53  r keys not in aS
172a0 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78  ample */.  Index
172b0 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
172c0 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f      /* Samples o
172d0 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
172e0 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  key */.  tRowcnt
172f0 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20   *aiRowEst;     
17300 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
17310 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20  hmic stat1 data 
17320 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a  for this index *
17330 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77  /.  tRowcnt nRow
17340 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20  Est0;        /* 
17350 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
17360 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
17370 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23  n the index */.#
17380 65 6e 64 69 66 0a 20 20 42 69 74 6d 61 73 6b 20  endif.  Bitmask 
17390 63 6f 6c 4e 6f 74 49 64 78 65 64 3b 20 20 20 20  colNotIdxed;    
173a0 20 2f 2a 20 30 20 66 6f 72 20 75 6e 69 6e 64 65   /* 0 for uninde
173b0 78 65 64 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70  xed columns in p
173c0 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  Tab */.};../*.**
173d0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
173e0 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70  for Index.idxTyp
173f0 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e.*/.#define SQL
17400 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44  ITE_IDXTYPE_APPD
17410 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43  EF      0   /* C
17420 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45  reated using CRE
17430 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
17440 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
17450 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20  YPE_UNIQUE      
17460 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1   /* Implement
17470 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  s a UNIQUE const
17480 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
17490 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
174a0 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20  PRIMARYKEY  2   
174b0 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52  /* Is the PRIMAR
174c0 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61  Y KEY for the ta
174d0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
174e0 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 49 50  QLITE_IDXTYPE_IP
174f0 4b 20 20 20 20 20 20 20 20 20 33 20 20 20 2f 2a  K         3   /*
17500 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
17510 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 0a 2f   KEY index */../
17520 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
17530 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52   index X is a PR
17540 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20  IMARY KEY index 
17550 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69  */.#define IsPri
17560 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20  maryKeyIndex(X) 
17570 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d   ((X)->idxType==
17580 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
17590 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52  RIMARYKEY)../* R
175a0 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
175b0 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55  dex X is a UNIQU
175c0 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  E index */.#defi
175d0 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  ne IsUniqueIndex
175e0 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f  (X)      ((X)->o
175f0 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29  nError!=OE_None)
17600 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61  ../* The Index.a
17610 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73  iColumn[] values
17620 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f   are normally po
17630 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20  sitive integer. 
17640 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72   But.** there ar
17650 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20  e some negative 
17660 76 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65  values that have
17670 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
17680 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  :.*/.#define XN_
17690 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20  ROWID     (-1)  
176a0 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
176b0 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69  lumn is the rowi
176c0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  d */.#define XN_
176d0 45 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20  EXPR      (-2)  
176e0 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
176f0 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
17700 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ssion */../*.** 
17710 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72  Each sample stor
17720 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
17730 5f 73 74 61 74 34 20 74 61 62 6c 65 20 69 73 20  _stat4 table is 
17740 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
17750 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61  emory.** using a
17760 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
17770 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f  is type.  See do
17780 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74  cumentation at t
17790 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a  he top of the.**
177a0 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63   analyze.c sourc
177b0 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74  e file for addit
177c0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
177d0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  n..*/.struct Ind
177e0 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69  exSample {.  voi
177f0 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f  d *p;          /
17800 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d  * Pointer to sam
17810 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20  pled record */. 
17820 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
17830 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65     /* Size of re
17840 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f  cord in bytes */
17850 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71  .  tRowcnt *anEq
17860 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
17870 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
17880 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
17890 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
178a0 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b    tRowcnt *anLt;
178b0 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
178c0 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
178d0 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
178e0 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
178f0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c  .  tRowcnt *anDL
17900 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  t;   /* Est. num
17910 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
17920 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
17930 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
17940 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
17950 20 76 61 6c 75 65 73 20 74 6f 20 75 73 65 20 77   values to use w
17960 69 74 68 69 6e 20 74 68 65 20 66 6c 61 67 73 20  ithin the flags 
17970 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
17980 74 65 33 47 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a  te3GetToken()..*
17990 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
179a0 5f 54 4f 4b 45 4e 5f 51 55 4f 54 45 44 20 20 20  _TOKEN_QUOTED   
179b0 20 30 78 31 20 2f 2a 20 54 6f 6b 65 6e 20 69 73   0x1 /* Token is
179c0 20 61 20 71 75 6f 74 65 64 20 69 64 65 6e 74 69   a quoted identi
179d0 66 69 65 72 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  fier. */.#define
179e0 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45   SQLITE_TOKEN_KE
179f0 59 57 4f 52 44 20 20 20 30 78 32 20 2f 2a 20 54  YWORD   0x2 /* T
17a00 6f 6b 65 6e 20 69 73 20 61 20 6b 65 79 77 6f 72  oken is a keywor
17a10 64 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  d. */../*.** Eac
17a20 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f  h token coming o
17a30 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20  ut of the lexer 
17a40 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
17a50 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
17a60 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65  ure.  Tokens are
17a70 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61   also used as pa
17a80 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  rt of an express
17a90 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  ion..**.** The m
17aa0 65 6d 6f 72 79 20 74 68 61 74 20 22 7a 22 20 70  emory that "z" p
17ab0 6f 69 6e 74 73 20 74 6f 20 69 73 20 6f 77 6e 65  oints to is owne
17ac0 64 20 62 79 20 6f 74 68 65 72 20 6f 62 6a 65 63  d by other objec
17ad0 74 73 2e 20 20 54 61 6b 65 20 63 61 72 65 0a 2a  ts.  Take care.*
17ae0 2a 20 74 68 61 74 20 74 68 65 20 6f 77 6e 65 72  * that the owner
17af0 20 6f 66 20 74 68 65 20 22 7a 22 20 73 74 72 69   of the "z" stri
17b00 6e 67 20 64 6f 65 73 20 6e 6f 74 20 64 65 61 6c  ng does not deal
17b10 6c 6f 63 61 74 65 20 74 68 65 20 73 74 72 69 6e  locate the strin
17b20 67 20 62 65 66 6f 72 65 0a 2a 2a 20 74 68 65 20  g before.** the 
17b30 54 6f 6b 65 6e 20 67 6f 65 73 20 6f 75 74 20 6f  Token goes out o
17b40 66 20 73 63 6f 70 65 21 20 20 56 65 72 79 20 6f  f scope!  Very o
17b50 66 74 65 6e 2c 20 74 68 65 20 22 7a 22 20 70 6f  ften, the "z" po
17b60 69 6e 74 73 20 74 6f 20 73 6f 6d 65 20 70 6c 61  ints to some pla
17b70 63 65 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 69 64  ce.** in the mid
17b80 64 6c 65 20 6f 66 20 74 68 65 20 50 61 72 73 65  dle of the Parse
17b90 2e 7a 53 71 6c 20 74 65 78 74 2e 20 20 42 75 74  .zSql text.  But
17ba0 20 69 74 20 6d 69 67 68 74 20 61 6c 73 6f 20 70   it might also p
17bb0 6f 69 6e 74 20 74 6f 20 61 0a 2a 2a 20 73 74 61  oint to a.** sta
17bc0 74 69 63 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73  tic string..*/.s
17bd0 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20  truct Token {.  
17be0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20  const char *z;  
17bf0 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
17c00 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55  e token.  Not NU
17c10 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a  LL-terminated! *
17c20 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
17c30 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72   n;    /* Number
17c40 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
17c50 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a  n this token */.
17c60 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
17c70 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
17c80 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
17c90 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
17ca0 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
17cb0 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45  ** code for a SE
17cc0 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69  LECT that contai
17cd0 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
17ce0 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  ctions..**.** If
17cf0 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47   Expr.op==TK_AGG
17d00 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47  _COLUMN or TK_AG
17d10 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20  G_FUNCTION then 
17d20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73  Expr.pAggInfo is
17d30 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
17d40 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
17d50 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75    The Expr.iColu
17d60 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  mn field is the 
17d70 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49  index in.** AggI
17d80 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67  nfo.aCol[] or Ag
17d90 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66  gInfo.aFunc[] of
17da0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
17db0 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
17dc0 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74  ** code for that
17dd0 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67   node..**.** Agg
17de0 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e  Info.pGroupBy an
17df0 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e  d AggInfo.aFunc.
17e00 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66  pExpr point to f
17e10 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65  ields within the
17e20 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c  .** original Sel
17e30 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68  ect structure th
17e40 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
17e50 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
17e60 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65  t.  These.** fie
17e70 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  lds do not need 
17e80 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e  to be freed when
17e90 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
17ea0 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74  e AggInfo struct
17eb0 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ure..*/.struct A
17ec0 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69  ggInfo {.  u8 di
17ed0 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20  rectMode;       
17ee0 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e     /* Direct ren
17ef0 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e  dering mode mean
17f00 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65  s take data dire
17f10 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  ctly.           
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17f30 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61  * from source ta
17f40 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e  bles rather than
17f50 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f   from accumulato
17f60 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f  rs */.  u8 useSo
17f70 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
17f80 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64  /* In direct mod
17f90 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65  e, reference the
17fa0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72   sorting index r
17fb0 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20  ather.          
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fd0 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72  ** than the sour
17fe0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  ce table */.  in
17ff0 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  t sortingIdx;   
18000 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
18010 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
18020 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
18030 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50   int sortingIdxP
18040 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73  Tab;     /* Curs
18050 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65  or number of pse
18060 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69  udo-table */.  i
18070 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d  nt nSortingColum
18080 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  n;     /* Number
18090 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
180a0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
180b0 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c   */.  int mnReg,
180c0 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a   mxReg;       /*
180d0 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74   Range of regist
180e0 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ers allocated fo
180f0 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63  r aCol and aFunc
18100 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
18110 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a  pGroupBy;     /*
18120 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c   The group by cl
18130 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  ause */.  struct
18140 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20   AggInfo_col {  
18150 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f    /* For each co
18160 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75  lumn used in sou
18170 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20  rce tables */.  
18180 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
18190 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f             /* So
181a0 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
181b0 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
181c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
181d0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
181e0 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
181f0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75  */.    int iColu
18200 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
18210 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
18220 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72   within the sour
18230 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
18240 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d  int iSorterColum
18250 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  n;       /* Colu
18260 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  mn number in the
18270 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
18280 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
182a0 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
182b0 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
182c0 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
182d0 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
182e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
182f0 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65  e original expre
18300 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43  ssion */.  } *aC
18310 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d  ol;.  int nColum
18320 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
18330 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20   Number of used 
18340 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b  entries in aCol[
18350 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75  ] */.  int nAccu
18360 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f  mulator;       /
18370 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
18380 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68  mns that show th
18390 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74  rough to the out
183a0 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20  put..           
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
183c0 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c  * Additional col
183d0 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e  umns are used on
183e0 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73  ly as parameters
183f0 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20   to.            
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18410 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
18420 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
18430 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20   AggInfo_func { 
18440 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67    /* For each ag
18450 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
18460 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
18470 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
18480 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65   /* Expression e
18490 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63  ncoding the func
184a0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63  tion */.    Func
184b0 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
184c0 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72       /* The aggr
184d0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69  egate function i
184e0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
184f0 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18510 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
18520 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
18530 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
18540 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20   int iDistinct; 
18550 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68            /* Eph
18560 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65  emeral table use
18570 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53  d to enforce DIS
18580 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46  TINCT */.  } *aF
18590 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63  unc;.  int nFunc
185a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
185b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
185c0 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a  ies in aFunc[] *
185d0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
185e0 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69  datatype ynVar i
185f0 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67  s a signed integ
18600 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69  er, either 16-bi
18610 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20  t or 32-bit..** 
18620 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36  Usually it is 16
18630 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53  -bits.  But if S
18640 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
18650 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65  LE_NUMBER is gre
18660 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37  ater.** than 327
18670 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61  67 we have to ma
18680 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31  ke it 32-bit.  1
18690 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72  6-bit is preferr
186a0 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74  ed because.** it
186b0 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72   uses less memor
186c0 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62  y in the Expr ob
186d0 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61  ject, which is a
186e0 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72   big memory user
186f0 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77  .** in systems w
18700 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70  ith lots of prep
18710 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e  ared statements.
18720 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63    And few applic
18730 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d  ations.** need m
18740 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31  ore than about 1
18750 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65  0 or 20 variable
18760 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74  s.  But some ext
18770 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a  reme users want.
18780 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61  ** to have prepa
18790 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
187a0 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76  ith over 32767 v
187b0 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f  ariables, and fo
187c0 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70  r them.** the op
187d0 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
187e0 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  e (at compile-ti
187f0 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  me)..*/.#if SQLI
18800 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
18810 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79  NUMBER<=32767.ty
18820 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b  pedef i16 ynVar;
18830 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69  .#else.typedef i
18840 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66  nt ynVar;.#endif
18850 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64  ../*.** Each nod
18860 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  e of an expressi
18870 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20  on in the parse 
18880 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61  tree is an insta
18890 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
188a0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
188b0 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f  Expr.op is the o
188c0 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67  pcode. The integ
188d0 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20  er parser token 
188e0 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64  codes are reused
188f0 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68  .** as opcodes h
18900 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65  ere. For example
18910 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66  , the parser def
18920 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65  ines TK_GE to be
18930 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63   an integer.** c
18940 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ode representing
18950 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74   the ">=" operat
18960 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e  or. This same in
18970 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65  teger code is re
18980 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65  used.** to repre
18990 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72  sent the greater
189a0 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74  -than-or-equal-t
189b0 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  o operator in th
189c0 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  e expression.** 
189d0 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tree..**.** If t
189e0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
189f0 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
18a00 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f  (TK_INTEGER, TK_
18a10 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a  FLOAT, TK_BLOB,.
18a20 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29  ** or TK_STRING)
18a30 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
18a40 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74  n contains the t
18a50 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c  ext of the SQL l
18a60 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68  iteral. If.** th
18a70 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
18a80 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56  a variable (TK_V
18a90 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45  ARIABLE), then E
18aa0 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
18ab0 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62  ns the.** variab
18ac0 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79  le name. Finally
18ad0 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  , if the express
18ae0 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
18af0 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54  nction (TK_FUNCT
18b00 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78  ION),.** then Ex
18b10 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
18b20 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
18b30 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  e function..**.*
18b40 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e  * Expr.pRight an
18b50 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65  d Expr.pLeft are
18b60 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
18b70 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f  ght subexpressio
18b80 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72  ns of a.** binar
18b90 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68  y operator. Eith
18ba0 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62  er or both may b
18bb0 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78  e NULL..**.** Ex
18bc0 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20  pr.x.pList is a 
18bd0 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74  list of argument
18be0 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  s if the express
18bf0 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
18c00 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53  nction,.** a CAS
18c10 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20  E expression or 
18c20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e  an IN expression
18c30 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c   of the form "<l
18c40 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e  hs> IN (<y>, <z>
18c50 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78  ...)"..** Expr.x
18c60 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64  .pSelect is used
18c70 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
18c80 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65  on is a sub-sele
18c90 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73  ct or an express
18ca0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f  ion of.** the fo
18cb0 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45  rm "<lhs> IN (SE
18cc0 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74  LECT ...)". If t
18cd0 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  he EP_xIsSelect 
18ce0 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68  bit is set in th
18cf0 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20  e.** Expr.flags 
18d00 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e  mask, then Expr.
18d10 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
18d20 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45  id. Otherwise, E
18d30 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a  xpr.x.pList is.*
18d40 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41  * valid..**.** A
18d50 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  n expression of 
18d60 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49  the form ID or I
18d70 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61  D.ID refers to a
18d80 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62   column in a tab
18d90 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20  le..** For such 
18da0 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70  expressions, Exp
18db0 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54  r.op is set to T
18dc0 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70  K_COLUMN and Exp
18dd0 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74  r.iTable is.** t
18de0 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f  he integer curso
18df0 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44  r number of a VD
18e00 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  BE cursor pointi
18e10 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  ng to that table
18e20 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f   and.** Expr.iCo
18e30 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75  lumn is the colu
18e40 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  mn number for th
18e50 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d  e specific colum
18e60 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78  n.  If the.** ex
18e70 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64  pression is used
18e80 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20   as a result in 
18e90 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c  an aggregate SEL
18ea0 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ECT, then the.**
18eb0 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73   value is also s
18ec0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70  tored in the Exp
18ed0 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e  r.iAgg column in
18ee0 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
18ef0 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e  o that.** it can
18f00 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74   be accessed aft
18f10 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65  er all aggregate
18f20 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a  s are computed..
18f30 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
18f40 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e  ression is an un
18f50 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d  bound variable m
18f60 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f  arker (a questio
18f70 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63  n mark.** charac
18f80 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f  ter '?' in the o
18f90 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65  riginal SQL) the
18fa0 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c  n the Expr.iTabl
18fb0 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65  e holds the inde
18fc0 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20  x.** number for 
18fd0 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a  that variable..*
18fe0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
18ff0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71  ession is a subq
19000 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69  uery then Expr.i
19010 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20  Column holds an 
19020 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73  integer.** regis
19030 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61  ter number conta
19040 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  ining the result
19050 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79   of the subquery
19060 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62  .  If the.** sub
19070 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f  query gives a co
19080 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74  nstant result, t
19090 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31  hen iTable is -1
190a0 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65  .  If the subque
190b0 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69  ry.** gives a di
190c0 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61  fferent answer a
190d0 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65  t different time
190e0 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65  s during stateme
190f0 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a  nt processing.**
19100 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
19110 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
19120 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74   subroutine that
19130 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75   computes the su
19140 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66  bquery..**.** If
19150 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20   the Expr is of 
19160 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  type OP_Column, 
19170 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74  and the table it
19180 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72   is selecting fr
19190 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20  om.** is a disk 
191a0 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c  table or the "ol
191b0 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c  d.*" pseudo-tabl
191c0 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69  e, then pTab poi
191d0 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f  nts to the.** co
191e0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
191f0 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a  e definition..**
19200 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e  .** ALLOCATION N
19210 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72  OTES:.**.** Expr
19220 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65   objects can use
19230 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79   a lot of memory
19240 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61   space in databa
19250 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a  se schema.  To.*
19260 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65  * help reduce me
19270 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74  mory requirement
19280 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20  s, sometimes an 
19290 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c  Expr object will
192a0 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64   be.** truncated
192b0 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65  .  And to reduce
192c0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
192d0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
192e0 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20  s, sometimes.** 
192f0 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72  two or more Expr
19300 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65   objects will be
19310 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
19320 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  gle memory alloc
19330 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68  ation,.** togeth
19340 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f  er with Expr.zTo
19350 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a  ken strings..**.
19360 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  ** If the EP_Red
19370 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65  uced and EP_Toke
19380 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20  nOnly flags are 
19390 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45  set when.** an E
193a0 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72  xpr object is tr
193b0 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45  uncated.  When E
193c0 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
193d0 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68  , then all.** th
193e0 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a  e child Expr obj
193f0 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  ects in the Expr
19400 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e  .pLeft and Expr.
19410 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a  pRight subtrees.
19420 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ** are contained
19430 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
19440 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
19450 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76  on.  Note, howev
19460 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  er, that.** the 
19470 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72  subtrees in Expr
19480 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72  .x.pList or Expr
19490 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61  .x.pSelect are a
194a0 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79  lways separately
194b0 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72  .** allocated, r
194c0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
194d0 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52  ther or not EP_R
194e0 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a  educed is set..*
194f0 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a  /.struct Expr {.
19500 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
19510 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72           /* Oper
19520 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20  ation performed 
19530 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
19540 20 20 63 68 61 72 20 61 66 66 45 78 70 72 3b 20    char affExpr; 
19550 20 20 20 20 20 20 20 20 20 2f 2a 20 61 66 66 69           /* affi
19560 6e 69 74 79 2c 20 6f 72 20 52 41 49 53 45 20 74  nity, or RAISE t
19570 79 70 65 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61  ype */.  u32 fla
19580 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
19590 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
195a0 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
195b0 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
195c0 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
195d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
195e0 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
195f0 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
19600 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
19610 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
19620 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
19630 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
19640 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
19650 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
19660 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
19670 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
19680 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
19690 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
196a0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
196b0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
196c0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
196d0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
196e0 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
196f0 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
19700 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
19710 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
19720 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
19730 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19750 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
19770 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
19780 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
19790 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
197a0 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
197b0 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
197c0 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
197d0 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
197e0 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20  List;     /* op 
197f0 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
19800 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43  LECT, CASE, FUNC
19810 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f  TION, BETWEEN */
19820 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
19830 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f  lect;     /* EP_
19840 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70  xIsSelect and op
19850 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
19860 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a  ELECT */.  } x;.
19870 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
19880 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20  Reduced flag is 
19890 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
198a0 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
198b0 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
198c0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
198d0 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
198e0 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
198f0 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
19900 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
19910 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
19920 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
19930 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
19940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
19980 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
19990 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
199a0 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
199b0 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f       /* Height o
199c0 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65  f the tree heade
199d0 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
199e0 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69  /.#endif.  int i
199f0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
19a00 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
19a10 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
19a20 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63   table holding c
19a30 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19a50 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72  * TK_REGISTER: r
19a60 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20  egister number. 
19a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a80 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52          ** TK_TR
19a90 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c  IGGER: 1 -> new,
19aa0 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20   0 -> old.      
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ac0 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c     ** EP_Unlikel
19ad0 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69  y:  134217728 ti
19ae0 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20  mes likelihood. 
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b00 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 49 4e          ** TK_IN
19b10 3a 20 65 70 68 65 6d 65 72 69 61 6c 20 74 61 62  : ephemerial tab
19b20 6c 65 20 68 6f 6c 64 69 6e 67 20 52 48 53 0a 20  le holding RHS. 
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b40 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45          ** TK_SE
19b50 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 4e 75 6d  LECT_COLUMN: Num
19b60 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f  ber of columns o
19b70 6e 20 74 68 65 20 4c 48 53 0a 20 20 20 20 20 20  n the LHS.      
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a     ** TK_SELECT:
19ba0 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f 66   1st register of
19bb0 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a   result vector *
19bc0 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
19bd0 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
19be0 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
19bf0 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
19c00 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19c20 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
19c30 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
19c40 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20  always >= 1)..  
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c         ** TK_SEL
19c70 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75  ECT_COLUMN: colu
19c80 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
19c90 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36   vector */.  i16
19ca0 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20   iAgg;          
19cb0 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
19cc0 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e  ry in pAggInfo->
19cd0 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e  aCol[] or ->aFun
19ce0 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69  c[] */.  i16 iRi
19cf0 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20  ghtJoinTable;   
19d00 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69  /* If EP_FromJoi
19d10 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62  n, the right tab
19d20 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a  le of the join *
19d30 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
19d40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
19d50 5f 52 45 47 49 53 54 45 52 2f 54 4b 5f 54 52 55  _REGISTER/TK_TRU
19d60 54 48 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  TH: original val
19d70 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d90 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
19da0 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
19db0 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
19dc0 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19de0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
19df0 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
19e00 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
19e10 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
19e20 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
19e30 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
19e40 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e 69 6f  NCTION */.  unio
19e50 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  n {.    Table *p
19e60 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
19e70 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54 61 62  * TK_COLUMN: Tab
19e80 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f  le containing co
19e90 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20 4e 55 4c  lumn. Can be NUL
19ea0 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  L.              
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19ec0 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20  for a column of 
19ed0 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65  an index on an e
19ee0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
19ef0 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20   Window *pWin;  
19f00 20 20 20 20 20 20 20 20 2f 2a 20 45 50 5f 57 69          /* EP_Wi
19f10 6e 46 75 6e 63 3a 20 57 69 6e 64 6f 77 2f 46 69  nFunc: Window/Fi
19f20 6c 74 65 72 20 64 65 66 6e 20 66 6f 72 20 61 20  lter defn for a 
19f30 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
19f40 73 74 72 75 63 74 20 7b 20 20 20 20 20 20 20 20  struct {        
19f50 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 49 4e 2c         /* TK_IN,
19f60 20 54 4b 5f 53 45 4c 45 43 54 2c 20 61 6e 64 20   TK_SELECT, and 
19f70 54 4b 5f 45 58 49 53 54 53 20 2a 2f 0a 20 20 20  TK_EXISTS */.   
19f80 20 20 20 69 6e 74 20 69 41 64 64 72 3b 20 20 20     int iAddr;   
19f90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 75 62            /* Sub
19fa0 72 6f 75 74 69 6e 65 20 65 6e 74 72 79 20 61 64  routine entry ad
19fb0 64 72 65 73 73 20 2a 2f 0a 20 20 20 20 20 20 69  dress */.      i
19fc0 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20  nt regReturn;   
19fd0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
19fe0 72 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 72  r used to hold r
19ff0 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 2a 2f  eturn address */
1a000 0a 20 20 20 20 7d 20 73 75 62 3b 0a 20 20 7d 20  .    } sub;.  } 
1a010 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  y;.};../*.** The
1a020 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
1a030 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
1a040 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
1a050 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 20  flags field..** 
1a060 56 61 6c 75 65 20 72 65 73 74 72 69 63 74 69 6f  Value restrictio
1a070 6e 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20  ns:.**.**       
1a080 20 20 20 45 50 5f 41 67 67 20 3d 3d 20 4e 43 5f     EP_Agg == NC_
1a090 48 61 73 41 67 67 20 3d 3d 20 53 46 5f 48 61 73  HasAgg == SF_Has
1a0a0 41 67 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  Agg.**          
1a0b0 45 50 5f 57 69 6e 20 3d 3d 20 4e 43 5f 48 61 73  EP_Win == NC_Has
1a0c0 57 69 6e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  Win.*/.#define E
1a0d0 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 30 78 30  P_FromJoin   0x0
1a0e0 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61  00001 /* Origina
1a0f0 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20  tes in ON/USING 
1a100 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20  clause of outer 
1a110 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1a120 45 50 5f 44 69 73 74 69 6e 63 74 20 20 20 30 78  EP_Distinct   0x
1a130 30 30 30 30 30 32 20 2f 2a 20 41 67 67 72 65 67  000002 /* Aggreg
1a140 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
1a150 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
1a160 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
1a170 5f 48 61 73 46 75 6e 63 20 20 20 20 30 78 30 30  _HasFunc    0x00
1a180 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0004 /* Contains
1a190 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e   one or more fun
1a1a0 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69  ctions of any ki
1a1b0 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nd */.#define EP
1a1c0 5f 46 69 78 65 64 43 6f 6c 20 20 20 30 78 30 30  _FixedCol   0x00
1a1d0 30 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d  0008 /* TK_Colum
1a1e0 6e 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 66  n with a known f
1a1f0 69 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a 23 64  ixed value */.#d
1a200 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20  efine EP_Agg    
1a210 20 20 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20      0x000010 /* 
1a220 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
1a230 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
1a240 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
1a250 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74  ine EP_VarSelect
1a260 20 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53    0x000020 /* pS
1a270 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
1a280 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
1a290 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
1a2a0 44 62 6c 51 75 6f 74 65 64 20 20 30 78 30 30 30  DblQuoted  0x000
1a2b0 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77  040 /* token.z w
1a2c0 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e  as originally in
1a2d0 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e   "..." */.#defin
1a2e0 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 20  e EP_InfixFunc  
1a2f0 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65  0x000080 /* True
1a300 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
1a310 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
1a320 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
1a330 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
1a340 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65   0x000100 /* Tre
1a350 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
1a360 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
1a370 20 2a 2f 0a 20 20 2f 2a 20 20 20 20 20 20 20 20   */.  /*        
1a380 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 32            0x0002
1a390 30 30 20 41 76 61 69 6c 61 62 6c 65 20 66 6f 72  00 Available for
1a3a0 20 72 65 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e   reuse */.#defin
1a3b0 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 20  e EP_IntValue   
1a3c0 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65  0x000400 /* Inte
1a3d0 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
1a3e0 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
1a3f0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
1a400 73 53 65 6c 65 63 74 20 20 30 78 30 30 30 38 30  sSelect  0x00080
1a410 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69  0 /* x.pSelect i
1a420 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69  s valid (otherwi
1a430 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a  se x.pList is) *
1a440 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69  /.#define EP_Ski
1a450 70 20 20 20 20 20 20 20 30 78 30 30 31 30 30 30  p       0x001000
1a460 20 2f 2a 20 4f 70 65 72 61 74 6f 72 20 64 6f 65   /* Operator doe
1a470 73 20 6e 6f 74 20 63 6f 6e 74 72 69 62 75 74 65  s not contribute
1a480 20 74 6f 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a   to affinity */.
1a490 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
1a4a0 65 64 20 20 20 20 30 78 30 30 32 30 30 30 20 2f  ed    0x002000 /
1a4b0 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
1a4c0 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62  PR_REDUCEDSIZE b
1a4d0 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
1a4e0 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c  fine EP_TokenOnl
1a4f0 79 20 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45  y  0x004000 /* E
1a500 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
1a510 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
1a520 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
1a530 69 6e 65 20 45 50 5f 57 69 6e 20 20 20 20 20 20  ine EP_Win      
1a540 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 43 6f    0x008000 /* Co
1a550 6e 74 61 69 6e 73 20 77 69 6e 64 6f 77 20 66 75  ntains window fu
1a560 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
1a570 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20  ne EP_MemToken  
1a580 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65   0x010000 /* Nee
1a590 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
1a5a0 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
1a5b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e   */.#define EP_N
1a5c0 6f 52 65 64 75 63 65 20 20 20 30 78 30 32 30 30  oReduce   0x0200
1a5d0 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50  00 /* Cannot EXP
1a5e0 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73  RDUP_REDUCE this
1a5f0 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65   Expr */.#define
1a600 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 20 30   EP_Unlikely   0
1a610 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b  x040000 /* unlik
1a620 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68  ely() or likelih
1a630 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ood() function *
1a640 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e  /.#define EP_Con
1a650 73 74 46 75 6e 63 20 20 30 78 30 38 30 30 30 30  stFunc  0x080000
1a660 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55 4e   /* A SQLITE_FUN
1a670 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53  C_CONSTANT or _S
1a680 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20  LOCHNG function 
1a690 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61  */.#define EP_Ca
1a6a0 6e 42 65 4e 75 6c 6c 20 20 30 78 31 30 30 30 30  nBeNull  0x10000
1a6b0 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c  0 /* Can be null
1a6c0 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c   despite NOT NUL
1a6d0 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
1a6e0 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75  #define EP_Subqu
1a6f0 65 72 79 20 20 20 30 78 32 30 30 30 30 30 20 2f  ery   0x200000 /
1a700 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
1a710 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72  a TK_SELECT oper
1a720 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ator */.#define 
1a730 45 50 5f 41 6c 69 61 73 20 20 20 20 20 20 30 78  EP_Alias      0x
1a740 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20  400000 /* Is an 
1a750 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75  alias for a resu
1a760 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f  lt set column */
1a770 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66  .#define EP_Leaf
1a780 20 20 20 20 20 20 20 30 78 38 30 30 30 30 30 20         0x800000 
1a790 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e  /* Expr.pLeft, .
1a7a0 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65  pRight, .u.pSele
1a7b0 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 23  ct all NULL */.#
1a7c0 64 65 66 69 6e 65 20 45 50 5f 57 69 6e 46 75 6e  define EP_WinFun
1a7d0 63 20 20 20 30 78 31 30 30 30 30 30 30 20 2f 2a  c   0x1000000 /*
1a7e0 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 20 77 69 74   TK_FUNCTION wit
1a7f0 68 20 45 78 70 72 2e 79 2e 70 57 69 6e 20 73 65  h Expr.y.pWin se
1a800 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
1a810 53 75 62 72 74 6e 20 20 20 20 30 78 32 30 30 30  Subrtn    0x2000
1a820 30 30 30 20 2f 2a 20 55 73 65 73 20 45 78 70 72  000 /* Uses Expr
1a830 2e 79 2e 73 75 62 2e 20 54 4b 5f 49 4e 2c 20 5f  .y.sub. TK_IN, _
1a840 53 45 4c 45 43 54 2c 20 6f 72 20 5f 45 58 49 53  SELECT, or _EXIS
1a850 54 53 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  TS */.#define EP
1a860 5f 51 75 6f 74 65 64 20 20 20 20 30 78 34 30 30  _Quoted    0x400
1a870 30 30 30 30 20 2f 2a 20 54 4b 5f 49 44 20 77 61  0000 /* TK_ID wa
1a880 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 71 75 6f  s originally quo
1a890 74 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ted */.#define E
1a8a0 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 38 30  P_Static    0x80
1a8b0 30 30 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e  00000 /* Held in
1a8c0 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
1a8d0 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
1a8e0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  () */.#define EP
1a8f0 5f 49 73 54 72 75 65 20 20 20 30 78 31 30 30 30  _IsTrue   0x1000
1a900 30 30 30 30 20 2f 2a 20 41 6c 77 61 79 73 20 68  0000 /* Always h
1a910 61 73 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  as boolean value
1a920 20 6f 66 20 54 52 55 45 20 2a 2f 0a 23 64 65 66   of TRUE */.#def
1a930 69 6e 65 20 45 50 5f 49 73 46 61 6c 73 65 20 20  ine EP_IsFalse  
1a940 30 78 32 30 30 30 30 30 30 30 20 2f 2a 20 41 6c  0x20000000 /* Al
1a950 77 61 79 73 20 68 61 73 20 62 6f 6f 6c 65 61 6e  ways has boolean
1a960 20 76 61 6c 75 65 20 6f 66 20 46 41 4c 53 45 20   value of FALSE 
1a970 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
1a980 64 69 72 65 63 74 20 30 78 34 30 30 30 30 30 30  direct 0x4000000
1a990 30 20 2f 2a 20 43 6f 6e 74 61 69 6e 65 64 20 77  0 /* Contained w
1a9a0 69 74 68 69 6e 20 61 20 54 52 49 47 47 45 52 20  ithin a TRIGGER 
1a9b0 6f 72 20 61 20 56 49 45 57 20 2a 2f 0a 0a 2f 2a  or a VIEW */../*
1a9c0 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f 70 61  .** The EP_Propa
1a9d0 67 61 74 65 20 6d 61 73 6b 20 69 73 20 61 20 73  gate mask is a s
1a9e0 65 74 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73  et of properties
1a9f0 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69 63 61   that automatica
1aa00 6c 6c 79 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a  lly propagate.**
1aa10 20 75 70 77 61 72 64 73 20 69 6e 74 6f 20 70 61   upwards into pa
1aa20 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23  rent nodes..*/.#
1aa30 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
1aa40 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
1aa50 45 50 5f 53 75 62 71 75 65 72 79 7c 45 50 5f 48  EP_Subquery|EP_H
1aa60 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54  asFunc)../*.** T
1aa70 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
1aa80 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
1aa90 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
1aaa0 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  its in the.** Ex
1aab0 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
1aac0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  */.#define ExprH
1aad0 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  asProperty(E,P) 
1aae0 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73      (((E)->flags
1aaf0 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
1ab00 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70  e ExprHasAllProp
1ab10 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29  erty(E,P)  (((E)
1ab20 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
1ab30 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53  )).#define ExprS
1ab40 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  etProperty(E,P) 
1ab50 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d      (E)->flags|=
1ab60 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  (P).#define Expr
1ab70 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c  ClearProperty(E,
1ab80 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26  P)   (E)->flags&
1ab90 3d 7e 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78  =~(P).#define Ex
1aba0 70 72 41 6c 77 61 79 73 54 72 75 65 28 45 29 20  prAlwaysTrue(E) 
1abb0 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
1abc0 45 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49  EP_FromJoin|EP_I
1abd0 73 54 72 75 65 29 29 3d 3d 45 50 5f 49 73 54 72  sTrue))==EP_IsTr
1abe0 75 65 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  ue).#define Expr
1abf0 41 6c 77 61 79 73 46 61 6c 73 65 28 45 29 20 20  AlwaysFalse(E)  
1ac00 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 45 50  (((E)->flags&(EP
1ac10 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73 46  _FromJoin|EP_IsF
1ac20 61 6c 73 65 29 29 3d 3d 45 50 5f 49 73 46 61 6c  alse))==EP_IsFal
1ac30 73 65 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72  se)../* The Expr
1ac40 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29  SetVVAProperty()
1ac50 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
1ac60 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  or Verification,
1ac70 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20   Validation,.** 
1ac80 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
1ac90 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b  n only.  It work
1aca0 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72  s like ExprSetPr
1acb0 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20  operty() during 
1acc0 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73  VVA.** processes
1acd0 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20   but is a no-op 
1ace0 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f  for delivery..*/
1acf0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1ad00 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
1ad10 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
1ad20 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67  (E,P)  (E)->flag
1ad30 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  s|=(P).#else.# d
1ad40 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
1ad50 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65  Property(E,P).#e
1ad60 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
1ad70 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
1ad80 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
1ad90 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
1ada0 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a  a normal Expr.**
1adb0 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72   struct, an Expr
1adc0 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
1add0 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
1ade0 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61   set in Expr.fla
1adf0 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70  gs.** and an Exp
1ae00 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
1ae10 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
1ae20 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  lag set..*/.#def
1ae30 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a  ine EXPR_FULLSIZ
1ae40 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65  E           size
1ae50 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20  of(Expr)        
1ae60 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20     /* Full size 
1ae70 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
1ae80 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20  REDUCEDSIZE     
1ae90 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
1aea0 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d  ,iTable)  /* Com
1aeb0 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  mon features */.
1aec0 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b  #define EXPR_TOK
1aed0 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20  ENONLYSIZE      
1aee0 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c  offsetof(Expr,pL
1aef0 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20  eft)   /* Fewer 
1af00 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a  features */../*.
1af10 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  ** Flags passed 
1af20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78  to the sqlite3Ex
1af30 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e  prDup() function
1af40 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  . See the header
1af50 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76   comment.** abov
1af60 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
1af70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
1af80 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
1af90 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
1afa0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
1afb0 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
1afc0 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
1afd0 0a 2a 2a 20 54 72 75 65 20 69 66 20 74 68 65 20  .** True if the 
1afe0 65 78 70 72 65 73 73 69 6f 6e 20 70 61 73 73 65  expression passe
1aff0 64 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74  d as an argument
1b000 20 77 61 73 20 61 20 66 75 6e 63 74 69 6f 6e 20   was a function 
1b010 77 69 74 68 0a 2a 2a 20 61 6e 20 4f 56 45 52 28  with.** an OVER(
1b020 29 20 63 6c 61 75 73 65 20 28 61 20 77 69 6e 64  ) clause (a wind
1b030 6f 77 20 66 75 6e 63 74 69 6f 6e 29 2e 0a 2a 2f  ow function)..*/
1b040 0a 23 64 65 66 69 6e 65 20 49 73 57 69 6e 64 6f  .#define IsWindo
1b050 77 46 75 6e 63 28 70 29 20 28 20 5c 0a 20 20 20  wFunc(p) ( \.   
1b060 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79   ExprHasProperty
1b070 28 28 70 29 2c 20 45 50 5f 57 69 6e 46 75 6e 63  ((p), EP_WinFunc
1b080 29 20 26 26 20 70 2d 3e 79 2e 70 57 69 6e 2d 3e  ) && p->y.pWin->
1b090 65 46 72 6d 54 79 70 65 21 3d 54 4b 5f 46 49 4c  eFrmType!=TK_FIL
1b0a0 54 45 52 20 5c 0a 29 0a 0a 2f 2a 0a 2a 2a 20 41  TER \.)../*.** A
1b0b0 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
1b0c0 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72  ions.  Each expr
1b0d0 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f  ession may optio
1b0e0 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20  nally have a.** 
1b0f0 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e  name.  An expr/n
1b100 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ame combination 
1b110 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73  can be used in s
1b120 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63  everal ways, suc
1b130 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74  h.** as the list
1b140 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22   of "expr AS ID"
1b150 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e   fields followin
1b160 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20  g a "SELECT" or 
1b170 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f  in the.** list o
1b180 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74  f "ID = expr" it
1b190 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45  ems in an UPDATE
1b1a0 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  .  A list of exp
1b1b0 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20  ressions can.** 
1b1c0 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20  also be used as 
1b1d0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
1b1e0 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77  a function, in w
1b1f0 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e  hich case the a.
1b200 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69  zName.** field i
1b210 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
1b220 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65  * By default the
1b230 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c   Expr.zSpan fiel
1b240 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d  d holds a human-
1b250 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70  readable descrip
1b260 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65  tion of.** the e
1b270 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
1b280 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  s used in the ge
1b290 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f  neration of erro
1b2a0 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a  r messages and.*
1b2b0 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e  * column labels.
1b2c0 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
1b2d0 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79  Expr.zSpan is ty
1b2e0 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74  pically the text
1b2f0 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20   of a.** column 
1b300 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74  expression as it
1b310 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c   exists in a SEL
1b320 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
1b330 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74  However, if.** t
1b340 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c  he bSpanIsTab fl
1b350 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
1b360 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61  zSpan is overloa
1b370 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20  ded to mean the 
1b380 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72  name.** of the r
1b390 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20  esult column in 
1b3a0 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41  the form: DATABA
1b3b0 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e  SE.TABLE.COLUMN.
1b3c0 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20    This later.** 
1b3d0 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72  form is used for
1b3e0 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e   name resolution
1b3f0 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f   with nested FRO
1b400 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74  M clauses..*/.st
1b410 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a  ruct ExprList {.
1b420 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20    int nExpr;    
1b430 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b440 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  er of expression
1b450 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
1b460 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69  .  struct ExprLi
1b470 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72  st_item { /* For
1b480 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
1b490 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
1b4a0 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
1b4b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1b4c0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
1b4d0 72 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  r this expressio
1b4e0 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
1b4f0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1b500 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69   /* Token associ
1b510 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65  ated with this e
1b520 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
1b530 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
1b540 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67           /* Orig
1b550 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65  inal text of the
1b560 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
1b570 20 20 20 75 38 20 73 6f 72 74 46 6c 61 67 73 3b     u8 sortFlags;
1b580 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1b590 73 6b 20 6f 66 20 4b 45 59 49 4e 46 4f 5f 4f 52  sk of KEYINFO_OR
1b5a0 44 45 52 5f 2a 20 66 6c 61 67 73 20 2a 2f 0a 20  DER_* flags */. 
1b5b0 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
1b5c0 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
1b5d0 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
1b5e0 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
1b5f0 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
1b600 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
1b610 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
1b620 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
1b630 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
1b640 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61    unsigned reusa
1b650 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e  ble :1;   /* Con
1b660 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
1b670 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a   is reusable */.
1b680 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 6f      unsigned bSo
1b690 72 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20 44  rterRef :1; /* D
1b6a0 65 66 65 72 20 65 76 61 6c 75 61 74 69 6f 6e 20  efer evaluation 
1b6b0 75 6e 74 69 6c 20 61 66 74 65 72 20 73 6f 72 74  until after sort
1b6c0 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ing */.    unsig
1b6d0 6e 65 64 20 62 4e 75 6c 6c 73 3a 20 31 3b 20 20  ned bNulls: 1;  
1b6e0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 65 78     /* True if ex
1b6f0 70 6c 69 63 69 74 20 22 4e 55 4c 4c 53 20 46 49  plicit "NULLS FI
1b700 52 53 54 2f 4c 41 53 54 22 20 2a 2f 0a 20 20 20  RST/LAST" */.   
1b710 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73   union {.      s
1b720 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20  truct {.        
1b730 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b  u16 iOrderByCol;
1b740 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44        /* For ORD
1b750 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75  ER BY, column nu
1b760 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73  mber in result s
1b770 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31  et */.        u1
1b780 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
1b790 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
1b7a0 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d  o Parse.aAlias[]
1b7b0 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20   for zName */.  
1b7c0 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69      } x;.      i
1b7d0 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67  nt iConstExprReg
1b7e0 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  ;      /* Regist
1b7f0 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72  er in which Expr
1b800 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64   value is cached
1b810 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d   */.    } u;.  }
1b820 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
1b830 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 73          /* One s
1b840 6c 6f 74 20 66 6f 72 20 65 61 63 68 20 65 78 70  lot for each exp
1b850 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
1b860 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1b870 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1b880 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
1b890 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
1b8a0 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
1b8b0 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
1b8c0 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
1b8d0 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
1b8e0 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
1b8f0 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
1b900 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
1b910 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
1b920 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
1b930 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
1b940 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
1b950 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
1b960 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
1b970 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
1b980 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
1b990 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
1b9a0 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
1b9b0 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
1b9c0 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
1b9d0 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
1b9e0 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
1b9f0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
1ba00 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
1ba10 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
1ba20 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
1ba30 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
1ba40 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
1ba50 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
1ba60 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
1ba70 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
1ba80 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
1ba90 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
1baa0 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
1bab0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
1bac0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
1bad0 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
1bae0 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
1baf0 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
1bb00 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
1bb10 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
1bb20 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
1bb30 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
1bb40 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bb50 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
1bb60 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1bb70 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1bb80 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1bb90 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52  describes the FR
1bba0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
1bbb0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1bbc0 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f  .** Each table o
1bbd0 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
1bbe0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
1bbf0 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d   a separate elem
1bc00 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72  ent of.** the Sr
1bc10 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e  cList.a[] array.
1bc20 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20  .**.** With the 
1bc30 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74  addition of mult
1bc40 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75  iple database su
1bc50 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f  pport, the follo
1bc60 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
1bc70 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73  * can also be us
1bc80 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61  ed to describe a
1bc90 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
1bca0 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61  e such as the ta
1bcb0 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d  ble that.** is m
1bcc0 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e  odified by an IN
1bcd0 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72  SERT, DELETE, or
1bce0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1bcf0 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20  t.  In standard 
1bd00 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74  SQL,.** such a t
1bd10 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73  able must be a s
1bd20 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20  imple name: ID. 
1bd30 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20   But in SQLite, 
1bd40 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a  the table can.**
1bd50 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69   now be identifi
1bd60 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65  ed by a database
1bd70 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68   name, a dot, th
1bd80 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  en the table nam
1bd90 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20  e: ID.ID..**.** 
1bda0 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61  The jointype sta
1bdb0 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20  rts out showing 
1bdc0 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65  the join type be
1bdd0 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e  tween the curren
1bde0 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74  t table.** and t
1bdf0 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e  he next table on
1be00 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20   the list.  The 
1be10 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68  parser builds th
1be20 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e  e list this way.
1be30 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53  .** But sqlite3S
1be40 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
1be50 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66  ype() later shif
1be60 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73  ts the jointypes
1be70 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a   so that each.**
1be80 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73   jointype expres
1be90 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74  ses the join bet
1bea0 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61  ween the table a
1beb0 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
1bec0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  table..**.** In 
1bed0 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c  the colUsed fiel
1bee0 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  d, the high-orde
1bef0 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69  r bit (bit 63) i
1bf00 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62  s set if the tab
1bf10 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d  le.** contains m
1bf20 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75  ore than 63 colu
1bf30 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74  mns and the 64-t
1bf40 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d  h or later colum
1bf50 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74  n is used..*/.st
1bf60 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20  ruct SrcList {. 
1bf70 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20   int nSrc;      
1bf80 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
1bf90 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72  ables or subquer
1bfa0 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ies in the FROM 
1bfb0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  clause */.  u32 
1bfc0 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
1bfd0 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
1bfe0 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61  s allocated in a
1bff0 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74  [] below */.  st
1c000 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
1c010 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a  m {.    Schema *
1c020 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68  pSchema;  /* Sch
1c030 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69  ema to which thi
1c040 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20  s item is fixed 
1c050 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61  */.    char *zDa
1c060 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65  tabase;  /* Name
1c070 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
1c080 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  ding this table 
1c090 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
1c0a0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
1c0b0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
1c0c0 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61  .    char *zAlia
1c0d0 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42  s;     /* The "B
1c0e0 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41  " part of a "A A
1c0f0 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e  S B" phrase.  zN
1c100 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a  ame is the "A" *
1c110 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
1c120 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51  b;      /* An SQ
1c130 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  L table correspo
1c140 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a  nding to zName *
1c150 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
1c160 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c  elect;  /* A SEL
1c170 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73  ECT statement us
1c180 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  ed in place of a
1c190 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
1c1a0 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53     int addrFillS
1c1b0 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20  ub;  /* Address 
1c1c0 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f  of subroutine to
1c1d0 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71   manifest a subq
1c1e0 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20  uery */.    int 
1c1f0 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a  regReturn;    /*
1c200 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1c210 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  g return address
1c220 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20   of addrFillSub 
1c230 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
1c240 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69  sult;    /* Regi
1c250 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65  sters holding re
1c260 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f  sults of a co-ro
1c270 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72  utine */.    str
1c280 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a  uct {.      u8 j
1c290 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a  ointype;      /*
1c2a0 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65   Type of join be
1c2b0 74 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65  tween this table
1c2c0 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
1c2d0 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  s */.      unsig
1c2e0 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a  ned notIndexed :
1c2f0 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
1c300 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20   there is a NOT 
1c310 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a  INDEXED clause *
1c320 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1c330 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b   isIndexedBy :1;
1c340 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1c350 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45  ere is an INDEXE
1c360 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  D BY clause */. 
1c370 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1c380 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20  TabFunc :1;     
1c390 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65  /* True if table
1c3a0 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
1c3b0 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20   syntax */.     
1c3c0 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72   unsigned isCorr
1c3d0 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54  elated :1;  /* T
1c3e0 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79  rue if sub-query
1c3f0 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a   is correlated *
1c400 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1c410 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31   viaCoroutine :1
1c420 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65  ;  /* Implemente
1c430 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e  d as a co-routin
1c440 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
1c450 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20  ned isRecursive 
1c460 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  :1;   /* True fo
1c470 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65  r recursive refe
1c480 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f  rence in WITH */
1c490 0a 20 20 20 20 7d 20 66 67 3b 0a 20 20 20 20 69  .    } fg;.    i
1c4a0 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20  nt iCursor;     
1c4b0 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
1c4c0 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20  sor number used 
1c4d0 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74  to access this t
1c4e0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72  able */.    Expr
1c4f0 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a   *pOn;        /*
1c500 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f   The ON clause o
1c510 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
1c520 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20  IdList *pUsing; 
1c530 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63    /* The USING c
1c540 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
1c550 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63  */.    Bitmask c
1c560 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20  olUsed;  /* Bit 
1c570 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20  N (1<<N) set if 
1c580 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62  column N of pTab
1c590 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20   is used */.    
1c5a0 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68  union {.      ch
1c5b0 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20  ar *zIndexedBy; 
1c5c0 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72     /* Identifier
1c5d0 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42   from "INDEXED B
1c5e0 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75  Y <zIndex>" clau
1c5f0 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72  se */.      Expr
1c600 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20  List *pFuncArg; 
1c610 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f   /* Arguments to
1c620 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
1c630 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20  nction */.    } 
1c640 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70  u1;.    Index *p
1c650 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64  IBIndex;  /* Ind
1c660 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72  ex structure cor
1c670 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31  responding to u1
1c680 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20  .zIndexedBy */. 
1c690 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
1c6a0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
1c6b0 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
1c6c0 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
1c6d0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
1c6e0 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
1c6f0 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
1c700 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
1c710 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
1c720 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
1c730 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
1c740 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
1c750 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1c760 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
1c770 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
1c780 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
1c790 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
1c7a0 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
1c7b0 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
1c7c0 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
1c7d0 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
1c7e0 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
1c7f0 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
1c800 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
1c810 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
1c820 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
1c830 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
1c840 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1c850 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
1c860 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
1c870 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
1c880 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
1c890 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
1c8a0 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
1c8b0 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
1c8c0 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
1c8d0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73  */.../*.** Flags
1c8e0 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
1c8f0 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20   the wctrlFlags 
1c900 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c  parameter of sql
1c910 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
1c920 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72  .** and the Wher
1c930 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73  eInfo.wctrlFlags
1c940 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56   member..**.** V
1c950 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1c960 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
1c970 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1c980 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54   WHERE_USE_LIMIT
1c990 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d    == SF_FixedLim
1c9a0 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  it.*/.#define WH
1c9b0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
1c9c0 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
1c9d0 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
1c9e0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
1c9f0 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
1ca00 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
1ca10 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
1ca20 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
1ca30 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
1ca40 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
1ca50 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
1ca60 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
1ca70 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
1ca80 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
1ca90 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
1caa0 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
1cab0 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
1cac0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1cad0 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52  E_ONEPASS_MULTIR
1cae0 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45  OW 0x0008 /* ONE
1caf0 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68 20  PASS is ok with 
1cb00 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1cb10 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1cb20 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
1cb30 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20  0x0010 /* Ok to 
1cb40 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
1cb50 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
1cb60 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f  define WHERE_OR_
1cb70 53 55 42 43 4c 41 55 53 45 20 20 20 20 20 30 78  SUBCLAUSE     0x
1cb80 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73 69  0020 /* Processi
1cb90 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45 20 61  ng a sub-WHERE a
1cba0 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20 20  s part of.      
1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbd0 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d 69  ** the OR optimi
1cbe0 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69  zation  */.#defi
1cbf0 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59  ne WHERE_GROUPBY
1cc00 20 20 20 20 20 20 20 20 20 20 30 78 30 30 34 30            0x0040
1cc10 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20   /* pOrderBy is 
1cc20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42  really a GROUP B
1cc30 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  Y */.#define WHE
1cc40 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20  RE_DISTINCTBY   
1cc50 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70 4f      0x0080 /* pO
1cc60 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79  rderby is really
1cc70 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75   a DISTINCT clau
1cc80 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  se */.#define WH
1cc90 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43  ERE_WANT_DISTINC
1cca0 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 41  T    0x0100 /* A
1ccb0 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20  ll output needs 
1ccc0 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a  to be distinct *
1ccd0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1cce0 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20  SORTBYGROUP     
1ccf0 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70 6f   0x0200 /* Suppo
1cd00 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  rt sqlite3WhereI
1cd10 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65  sSorted() */.#de
1cd20 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f  fine WHERE_SEEK_
1cd30 54 41 42 4c 45 20 20 20 20 20 20 20 30 78 30 34  TABLE       0x04
1cd40 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66  00 /* Do not def
1cd50 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e  er seeks on main
1cd60 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
1cd70 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1cd80 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30 30 20  LIMIT    0x0800 
1cd90 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54  /* ORDERBY+LIMIT
1cda0 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f   on the inner lo
1cdb0 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  op */.#define WH
1cdc0 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41  ERE_SEEK_UNIQ_TA
1cdd0 42 4c 45 20 20 30 78 31 30 30 30 20 2f 2a 20 44  BLE  0x1000 /* D
1cde0 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b  o not defer seek
1cdf0 73 20 69 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20  s if unique */. 
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce10 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
1ce20 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72  2000    not curr
1ce30 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64  ently used */.#d
1ce40 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53 45 5f  efine WHERE_USE_
1ce50 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30 78 34  LIMIT        0x4
1ce60 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65 20 4c  000 /* Use the L
1ce70 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65 73 74  IMIT in cost est
1ce80 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20 20 20  imates */.      
1ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cea0 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30 30 20    /*     0x8000 
1ceb0 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79     not currently
1cec0 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c   used */../* All
1ced0 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
1cee0 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57  es from sqlite3W
1cef0 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29  hereIsDistinct()
1cf00 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
1cf10 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20  E_DISTINCT_NOOP 
1cf20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49       0  /* DISTI
1cf30 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20  NCT keyword not 
1cf40 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1cf50 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
1cf60 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e  NIQUE    1  /* N
1cf70 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a  o duplicates */.
1cf80 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1cf90 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20  STINCT_ORDERED  
1cfa0 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69   2  /* All dupli
1cfb0 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65  cates are adjace
1cfc0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nt */.#define WH
1cfd0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f  ERE_DISTINCT_UNO
1cfe0 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70  RDERED 3  /* Dup
1cff0 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74  licates are scat
1d000 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tered */../*.** 
1d010 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65  A NameContext de
1d020 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20  fines a context 
1d030 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f  in which to reso
1d040 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  lve table and co
1d050 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20  lumn.** names.  
1d060 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73  The context cons
1d070 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f  ists of a list o
1d080 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53  f tables (the pS
1d090 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e  rcList) field an
1d0a0 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e  d.** a list of n
1d0b0 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
1d0c0 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e  (pEList).  The n
1d0d0 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
1d0e0 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e  list may.** be N
1d0f0 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63  ULL.  The pSrc c
1d100 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
1d110 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
1d120 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20   a SELECT or.** 
1d130 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
1d140 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62  ng operated on b
1d150 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
1d160 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68  , or DELETE.  Th
1d170 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72  e.** pEList corr
1d180 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72  esponds to the r
1d190 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53  esult set of a S
1d1a0 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c  ELECT and is NUL
1d1b0 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73  L for.** other s
1d1c0 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
1d1d0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61   NameContexts ca
1d1e0 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68  n be nested.  Wh
1d1f0 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  en resolving nam
1d200 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f  es, the inner-mo
1d210 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  st.** context is
1d220 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
1d230 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
1d240 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
1d250 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
1d260 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
1d270 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
1d280 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
1d290 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
1d2a0 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
1d2b0 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
1d2c0 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
1d2d0 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
1d2e0 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
1d2f0 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
1d300 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
1d310 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
1d320 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
1d330 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
1d340 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
1d350 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
1d360 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72  .** Each subquer
1d370 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d  y gets a new Nam
1d380 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70  eContext.  The p
1d390 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74  Next field point
1d3a0 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  s to the.** Name
1d3b0 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70  Context in the p
1d3c0 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68  arent query.  Th
1d3d0 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f  us the process o
1d3e0 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a  f scanning the.*
1d3f0 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69  * NameContext li
1d400 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
1d410 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f  o searching thro
1d420 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79  ugh successively
1d430 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65   outer.** subque
1d440 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  ries looking for
1d450 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72   a match..*/.str
1d460 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
1d470 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1d480 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  e;       /* The 
1d490 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c  parser */.  SrcL
1d4a0 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
1d4b0 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1d4c0 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72  tables used to r
1d4d0 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a  esolve names */.
1d4e0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
1d4f0 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1d500 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
1d510 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
1d520 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20  t columns */.   
1d530 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
1d540 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  fo;   /* Informa
1d550 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65  tion about aggre
1d560 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65  gates at this le
1d570 76 65 6c 20 2a 2f 0a 20 20 20 20 55 70 73 65 72  vel */.    Upser
1d580 74 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20  t *pUpsert;     
1d590 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  /* ON CONFLICT c
1d5a0 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f  lause informatio
1d5b0 6e 20 66 72 6f 6d 20 61 6e 20 75 70 73 65 72 74  n from an upsert
1d5c0 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a 20 20 4e   */.  } uNC;.  N
1d5d0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78  ameContext *pNex
1d5e0 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65  t;  /* Next oute
1d5f0 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20  r name context. 
1d600 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d   NULL for outerm
1d610 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  ost */.  int nRe
1d620 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
1d630 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73   Number of names
1d640 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69   resolved by thi
1d650 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69  s context */.  i
1d660 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1d670 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d680 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65   errors encounte
1d690 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76  red while resolv
1d6a0 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 69  ing names */.  i
1d6b0 6e 74 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20  nt ncFlags;     
1d6c0 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d      /* Zero or m
1d6d0 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64  ore NC_* flags d
1d6e0 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a  efined below */.
1d6f0 20 20 53 65 6c 65 63 74 20 2a 70 57 69 6e 53 65    Select *pWinSe
1d700 6c 65 63 74 3b 20 20 2f 2a 20 53 45 4c 45 43 54  lect;  /* SELECT
1d710 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 61   statement for a
1d720 6e 79 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  ny window functi
1d730 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ons */.};../*.**
1d740 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
1d750 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
1d760 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
1d770 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  ld..**.** Value 
1d780 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c  constraints (all
1d790 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73   checked via ass
1d7a0 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43  ert()):.**    NC
1d7b0 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53 46  _HasAgg    == SF
1d7c0 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 45 50  _HasAgg    == EP
1d7d0 5f 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69  _Agg.**    NC_Mi
1d7e0 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69  nMaxAgg == SF_Mi
1d7f0 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c 49 54  nMaxAgg == SQLIT
1d800 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a  E_FUNC_MINMAX.**
1d810 20 20 20 20 4e 43 5f 48 61 73 57 69 6e 20 20 20      NC_HasWin   
1d820 20 3d 3d 20 45 50 5f 57 69 6e 0a 2a 2a 0a 2a 2f   == EP_Win.**.*/
1d830 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f  .#define NC_Allo
1d840 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a  wAgg  0x0001  /*
1d850 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
1d860 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ions are allowed
1d870 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65   here */.#define
1d880 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
1d890 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66  0002  /* True if
1d8a0 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
1d8b0 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
1d8c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1d8d0 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20  sCheck   0x0004 
1d8e0 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1d8f0 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
1d900 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
1d910 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  t */.#define NC_
1d920 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38  InAggFunc 0x0008
1d930 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
1d940 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
1d950 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
1d960 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
1d970 73 41 67 67 20 20 20 20 30 78 30 30 31 30 20 20  sAgg    0x0010  
1d980 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
1d990 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1d9a0 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
1d9b0 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20  ne NC_IdxExpr   
1d9c0 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20  0x0020  /* True 
1d9d0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c  if resolving col
1d9e0 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49  umns of CREATE I
1d9f0 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
1da00 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30  NC_VarSelect 0x0
1da10 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c  040  /* A correl
1da20 61 74 65 64 20 73 75 62 71 75 65 72 79 20 68 61  ated subquery ha
1da30 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23  s been seen */.#
1da40 64 65 66 69 6e 65 20 4e 43 5f 55 45 4c 69 73 74  define NC_UEList
1da50 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54      0x0080  /* T
1da60 72 75 65 20 69 66 20 75 4e 43 2e 70 45 4c 69 73  rue if uNC.pELis
1da70 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  t is used */.#de
1da80 66 69 6e 65 20 4e 43 5f 55 41 67 67 49 6e 66 6f  fine NC_UAggInfo
1da90 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72 75    0x0100  /* Tru
1daa0 65 20 69 66 20 75 4e 43 2e 70 41 67 67 49 6e 66  e if uNC.pAggInf
1dab0 6f 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  o is used */.#de
1dac0 66 69 6e 65 20 4e 43 5f 55 55 70 73 65 72 74 20  fine NC_UUpsert 
1dad0 20 20 30 78 30 32 30 30 20 20 2f 2a 20 54 72 75    0x0200  /* Tru
1dae0 65 20 69 66 20 75 4e 43 2e 70 55 70 73 65 72 74  e if uNC.pUpsert
1daf0 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
1db00 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ine NC_MinMaxAgg
1db10 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f   0x1000  /* min/
1db20 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73  max aggregates s
1db30 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61  een.  See note a
1db40 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  bove */.#define 
1db50 4e 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30 78 32  NC_Complex   0x2
1db60 30 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  000  /* True if 
1db70 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 73 75  a function or su
1db80 62 71 75 65 72 79 20 73 65 65 6e 20 2a 2f 0a 23  bquery seen */.#
1db90 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 57  define NC_AllowW
1dba0 69 6e 20 20 30 78 34 30 30 30 20 20 2f 2a 20 57  in  0x4000  /* W
1dbb0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
1dbc0 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
1dbd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
1dbe0 61 73 57 69 6e 20 20 20 20 30 78 38 30 30 30 20  asWin    0x8000 
1dbf0 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1dc00 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73  window functions
1dc10 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1dc20 20 4e 43 5f 49 73 44 44 4c 20 20 20 20 30 78 31   NC_IsDDL    0x1
1dc30 30 30 30 30 20 20 2f 2a 20 52 65 73 6f 6c 76 69  0000  /* Resolvi
1dc40 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 52  ng names in a CR
1dc50 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 2a  EATE statement *
1dc60 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1dc70 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1dc80 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20 64 65 73  owing object des
1dc90 63 72 69 62 65 73 20 61 20 73 69 6e 67 6c 65 20  cribes a single 
1dca0 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63  ON CONFLICT.** c
1dcb0 6c 61 75 73 65 20 69 6e 20 61 6e 20 75 70 73 65  lause in an upse
1dcc0 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 55  rt..**.** The pU
1dcd0 70 73 65 72 74 54 61 72 67 65 74 20 66 69 65 6c  psertTarget fiel
1dce0 64 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 69 66  d is only set if
1dcf0 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
1dd00 20 63 6c 61 75 73 65 20 69 6e 63 6c 75 64 65 73   clause includes
1dd10 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72  .** conflict-tar
1dd20 67 65 74 20 63 6c 61 75 73 65 2e 20 20 28 49 6e  get clause.  (In
1dd30 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 61 2c   "ON CONFLICT(a,
1dd40 62 29 22 20 74 68 65 20 22 28 61 2c 62 29 22 20  b)" the "(a,b)" 
1dd50 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69  is the.** confli
1dd60 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65  ct-target clause
1dd70 2e 29 20 20 54 68 65 20 70 55 70 73 65 72 74 54  .)  The pUpsertT
1dd80 61 72 67 65 74 57 68 65 72 65 20 69 73 20 74 68  argetWhere is th
1dd90 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48  e optional.** WH
1dda0 45 52 45 20 63 6c 61 75 73 65 20 75 73 65 64 20  ERE clause used 
1ddb0 74 6f 20 69 64 65 6e 74 69 66 79 20 70 61 72 74  to identify part
1ddc0 69 61 6c 20 75 6e 69 71 75 65 20 69 6e 64 65 78  ial unique index
1ddd0 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65 72  es..**.** pUpser
1dde0 74 53 65 74 20 69 73 20 74 68 65 20 6c 69 73 74  tSet is the list
1ddf0 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70 72 20   of column=expr 
1de00 74 65 72 6d 73 20 6f 66 20 74 68 65 20 55 50 44  terms of the UPD
1de10 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a  ATE statement. .
1de20 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 53 65  ** The pUpsertSe
1de30 74 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c 20  t field is NULL 
1de40 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c 49 43  for a ON CONFLIC
1de50 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20 54  T DO NOTHING.  T
1de60 68 65 0a 2a 2a 20 70 55 70 73 65 72 74 57 68 65  he.** pUpsertWhe
1de70 72 65 20 69 73 20 74 68 65 20 57 48 45 52 45 20  re is the WHERE 
1de80 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 55  clause for the U
1de90 50 44 41 54 45 20 61 6e 64 20 69 73 20 4e 55 4c  PDATE and is NUL
1dea0 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57 48 45 52  L if the.** WHER
1deb0 45 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74  E clause is omit
1dec0 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  ted..*/.struct U
1ded0 70 73 65 72 74 20 7b 0a 20 20 45 78 70 72 4c 69  psert {.  ExprLi
1dee0 73 74 20 2a 70 55 70 73 65 72 74 54 61 72 67 65  st *pUpsertTarge
1def0 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20  t;  /* Optional 
1df00 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 63  description of c
1df10 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78  onflicting index
1df20 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73   */.  Expr *pUps
1df30 65 72 74 54 61 72 67 65 74 57 68 65 72 65 3b 20  ertTargetWhere; 
1df40 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
1df50 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 65  for partial inde
1df60 78 20 74 61 72 67 65 74 73 20 2a 2f 0a 20 20 45  x targets */.  E
1df70 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74  xprList *pUpsert
1df80 53 65 74 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  Set;     /* The 
1df90 53 45 54 20 63 6c 61 75 73 65 20 66 72 6f 6d 20  SET clause from 
1dfa0 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55  an ON CONFLICT U
1dfb0 50 44 41 54 45 20 2a 2f 0a 20 20 45 78 70 72 20  PDATE */.  Expr 
1dfc0 2a 70 55 70 73 65 72 74 57 68 65 72 65 3b 20 20  *pUpsertWhere;  
1dfd0 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
1dfe0 61 75 73 65 20 66 6f 72 20 74 68 65 20 4f 4e 20  ause for the ON 
1dff0 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20  CONFLICT UPDATE 
1e000 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69 65 6c  */.  /* The fiel
1e010 64 73 20 61 62 6f 76 65 20 63 6f 6d 70 72 69 73  ds above compris
1e020 65 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  e the parse tree
1e030 20 66 6f 72 20 74 68 65 20 75 70 73 65 72 74 20   for the upsert 
1e040 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54 68 65  clause..  ** The
1e050 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 61 72   fields below ar
1e060 65 20 75 73 65 64 20 74 6f 20 74 72 61 6e 73 66  e used to transf
1e070 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  er information f
1e080 72 6f 6d 20 74 68 65 20 49 4e 53 45 52 54 0a 20  rom the INSERT. 
1e090 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 64   ** processing d
1e0a0 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20 55 50 44  own into the UPD
1e0b0 41 54 45 20 70 72 6f 63 65 73 73 69 6e 67 20 77  ATE processing w
1e0c0 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67 20  hile generating 
1e0d0 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73 65 72  code..  ** Upser
1e0e0 74 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d 6f 72  t owns the memor
1e0f0 79 20 61 6c 6c 6f 63 61 74 65 64 20 61 62 6f 76  y allocated abov
1e100 65 2c 20 62 75 74 20 6e 6f 74 20 74 68 65 20 6d  e, but not the m
1e110 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a  emory below. */.
1e120 20 20 49 6e 64 65 78 20 2a 70 55 70 73 65 72 74    Index *pUpsert
1e130 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 43  Idx;        /* C
1e140 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20 70  onstraint that p
1e150 55 70 73 65 72 74 54 61 72 67 65 74 20 69 64 65  UpsertTarget ide
1e160 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20 53 72 63  ntifies */.  Src
1e170 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53 72 63  List *pUpsertSrc
1e180 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  ;      /* Table 
1e190 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 2a 2f  to be updated */
1e1a0 0a 20 20 69 6e 74 20 72 65 67 44 61 74 61 3b 20  .  int regData; 
1e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e1c0 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 68  First register h
1e1d0 6f 6c 64 69 6e 67 20 61 72 72 61 79 20 6f 66 20  olding array of 
1e1e0 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e 74 20  VALUES */.  int 
1e1f0 69 44 61 74 61 43 75 72 3b 20 20 20 20 20 20 20  iDataCur;       
1e200 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1e210 66 20 74 68 65 20 64 61 74 61 20 63 75 72 73 6f  f the data curso
1e220 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78 43  r */.  int iIdxC
1e230 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
1e240 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1e250 20 66 69 72 73 74 20 69 6e 64 65 78 20 63 75 72   first index cur
1e260 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sor */.};../*.**
1e270 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1e280 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1e290 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
1e2a0 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   all information
1e2b0 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65  .** needed to ge
1e2c0 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20  nerate code for 
1e2d0 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
1e2e0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
1e2f0 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
1e300 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20 63  comment on the c
1e310 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65 67 69 73  omputeLimitRegis
1e320 74 65 72 73 28 29 20 72 6f 75 74 69 6e 65 20 66  ters() routine f
1e330 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c 65 64  or a.** detailed
1e340 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20   description of 
1e350 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74  the meaning of t
1e360 68 65 20 69 4c 69 6d 69 74 20 61 6e 64 20 69 4f  he iLimit and iO
1e370 66 66 73 65 74 20 66 69 65 6c 64 73 2e 0a 2a 2a  ffset fields..**
1e380 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
1e390 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
1e3a0 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
1e3b0 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
1e3c0 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
1e3d0 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
1e3e0 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
1e3f0 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
1e400 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
1e410 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
1e420 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
1e430 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
1e440 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
1e450 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
1e460 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1e470 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
1e480 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
1e490 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
1e4a0 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
1e4b0 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
1e4c0 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
1e4d0 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
1e4e0 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
1e4f0 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
1e500 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
1e510 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
1e520 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
1e530 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
1e540 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1e550 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
1e560 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
1e570 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
1e580 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
1e590 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
1e5a0 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
1e5b0 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
1e5c0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
1e5d0 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
1e5e0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
1e5f0 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
1e600 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
1e610 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
1e640 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
1e650 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
1e660 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53  T */.  LogEst nS
1e670 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a  electRow;     /*
1e680 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
1e690 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
1e6a0 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61   */.  u32 selFla
1e6b0 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
1e6c0 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c  Various SF_* val
1e6d0 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69  ues */.  int iLi
1e6e0 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20  mit, iOffset;   
1e6f0 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1e700 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49  ers holding LIMI
1e710 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74  T & OFFSET count
1e720 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c  ers */.  u32 sel
1e730 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Id;             
1e740 2f 2a 20 55 6e 69 71 75 65 20 69 64 65 6e 74 69  /* Unique identi
1e750 66 69 65 72 20 6e 75 6d 62 65 72 20 66 6f 72 20  fier number for 
1e760 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20  this SELECT */. 
1e770 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68   int addrOpenEph
1e780 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70  m[2];   /* OP_Op
1e790 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20  enEphem opcodes 
1e7a0 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20  related to this 
1e7b0 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c  select */.  SrcL
1e7c0 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
1e7d0 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
1e7e0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
1e7f0 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
1e800 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
1e810 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1e820 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
1e830 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
1e840 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
1e850 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
1e860 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
1e870 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
1e880 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1e890 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
1e8a0 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
1e8b0 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
1e8c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
1e8d0 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
1e8e0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
1e8f0 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
1e900 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
1e910 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
1e920 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
1e930 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
1e940 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
1e950 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
1e960 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
1e970 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
1e980 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  d. */.  With *pW
1e990 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ith;           /
1e9a0 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74  * WITH clause at
1e9b0 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73  tached to this s
1e9c0 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20  elect. Or NULL. 
1e9d0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1e9e0 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
1e9f0 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e  C.  Window *pWin
1ea00 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ;          /* Li
1ea10 73 74 20 6f 66 20 77 69 6e 64 6f 77 20 66 75 6e  st of window fun
1ea20 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e 64  ctions */.  Wind
1ea30 6f 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20 20 20  ow *pWinDefn;   
1ea40 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 6e 61     /* List of na
1ea50 6d 65 64 20 77 69 6e 64 6f 77 20 64 65 66 69 6e  med window defin
1ea60 69 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  itions */.#endif
1ea70 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
1ea80 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
1ea90 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
1eaa0 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
1eab0 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
1eac0 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a  elect Flag"..**.
1ead0 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1eae0 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1eaf0 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a  d via assert()).
1eb00 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67  **     SF_HasAgg
1eb10 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67       == NC_HasAg
1eb20 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d  g.**     SF_MinM
1eb30 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e  axAgg  == NC_Min
1eb40 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51  MaxAgg     == SQ
1eb50 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
1eb60 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64  .**     SF_Fixed
1eb70 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55  Limit == WHERE_U
1eb80 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66  SE_LIMIT.*/.#def
1eb90 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20  ine SF_Distinct 
1eba0 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f        0x00001  /
1ebb0 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20  * Output should 
1ebc0 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23  be DISTINCT */.#
1ebd0 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20  define SF_All   
1ebe0 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32           0x00002
1ebf0 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68    /* Includes th
1ec00 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f  e ALL keyword */
1ec10 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f  .#define SF_Reso
1ec20 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30  lved       0x000
1ec30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65  04  /* Identifie
1ec40 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  rs have been res
1ec50 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  olved */.#define
1ec60 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20   SF_Aggregate   
1ec70 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43     0x00008  /* C
1ec80 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63  ontains agg func
1ec90 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50  tions or a GROUP
1eca0 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   BY */.#define S
1ecb0 46 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20  F_HasAgg        
1ecc0 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e   0x00010  /* Con
1ecd0 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
1ece0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
1ecf0 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65  fine SF_UsesEphe
1ed00 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20  meral  0x00020  
1ed10 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e  /* Uses the Open
1ed20 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1ed30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45   */.#define SF_E
1ed40 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78  xpanded       0x
1ed50 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65  00040  /* sqlite
1ed60 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20  3SelectExpand() 
1ed70 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a  called on this *
1ed80 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1ed90 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30  TypeInfo    0x00
1eda0 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62  080  /* FROM sub
1edb0 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62  queries have Tab
1edc0 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23  le metadata */.#
1edd0 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75  define SF_Compou
1ede0 6e 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30  nd       0x00100
1edf0 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63    /* Part of a c
1ee00 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f  ompound query */
1ee10 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
1ee20 65 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32  es         0x002
1ee30 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  00  /* Synthesiz
1ee40 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
1ee50 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1ee60 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20   SF_MultiValue  
1ee70 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53     0x00400  /* S
1ee80 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72  ingle VALUES ter
1ee90 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  m with multiple 
1eea0 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1eeb0 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
1eec0 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61    0x00800  /* Pa
1eed0 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
1eee0 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
1eef0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1ef00 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30  MinMaxAgg      0
1ef10 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65  x01000  /* Aggre
1ef20 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  gate containing 
1ef30 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a  min() or max() *
1ef40 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63  /.#define SF_Rec
1ef50 75 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32  ursive      0x02
1ef60 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75  000  /* The recu
1ef70 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20  rsive part of a 
1ef80 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f  recursive CTE */
1ef90 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65  .#define SF_Fixe
1efa0 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30  dLimit     0x040
1efb0 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f  00  /* nSelectRo
1efc0 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74  w set by a const
1efd0 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65  ant LIMIT */.#de
1efe0 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e  fine SF_MaybeCon
1eff0 76 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20  vert   0x08000  
1f000 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43  /* Need convertC
1f010 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1f020 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1f030 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65  fine SF_Converte
1f040 64 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20  d      0x10000  
1f050 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d  /* By convertCom
1f060 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1f070 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
1f080 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64  ne SF_IncludeHid
1f090 64 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a  den  0x20000  /*
1f0a0 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20   Include hidden 
1f0b0 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75  columns in outpu
1f0c0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  t */.#define SF_
1f0d0 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20 30  ComplexResult  0
1f0e0 78 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75 6c  x40000  /* Resul
1f0f0 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71 75  t contains subqu
1f100 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ery or function 
1f110 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 57 68  */.#define SF_Wh
1f120 65 72 65 42 65 67 69 6e 20 20 20 20 20 30 78 38  ereBegin     0x8
1f130 30 30 30 30 20 20 2f 2a 20 52 65 61 6c 6c 79 20  0000  /* Really 
1f140 61 20 57 68 65 72 65 42 65 67 69 6e 28 29 20 63  a WhereBegin() c
1f150 61 6c 6c 2e 20 20 44 65 62 75 67 20 4f 6e 6c 79  all.  Debug Only
1f160 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72   */../*.** The r
1f170 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45  esults of a SELE
1f180 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69  CT can be distri
1f190 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c  buted in several
1f1a0 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65   ways, as define
1f1b0 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74  d.** by one of t
1f1c0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1f1d0 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20  ros.  The "SRT" 
1f1e0 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45  prefix means "SE
1f1f0 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54  LECT Result.** T
1f200 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ype"..**.**     
1f210 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
1f220 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1f230 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70   a key in a temp
1f240 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20  orary index.**  
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f260 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79     identified by
1f270 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1f280 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1f290 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76  xcept      Remov
1f2a0 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  e results from t
1f2b0 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64  he temporary ind
1f2c0 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ex pDest->iSDPar
1f2d0 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1f2e0 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f  _Exists      Sto
1f2f0 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79  re a 1 in memory
1f300 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44   cell pDest->iSD
1f310 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75  Parm if the resu
1f320 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  lt.**           
1f330 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73            set is
1f340 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a   not empty..**.*
1f350 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72  *     SRT_Discar
1f360 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20  d     Throw the 
1f370 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54  results away.  T
1f380 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53  his is used by S
1f390 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20  ELECT.**        
1f3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1f3b0 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
1f3c0 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e  riggers whose on
1f3d0 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a  ly purpose is.**
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3f0 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66       the side-ef
1f400 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f  fects of functio
1f410 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  ns..**.** All of
1f420 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66   the above are f
1f430 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68  ree to ignore th
1f440 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61  eir ORDER BY cla
1f450 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a  use. Those that.
1f460 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68  ** follow must h
1f470 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42  onor the ORDER B
1f480 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1f490 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20      SRT_Output  
1f4a0 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72      Generate a r
1f4b0 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73  ow of output (us
1f4c0 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c  ing the OP_Resul
1f4d0 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20  tRow.**         
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f              opco
1f4f0 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77  de) for each row
1f500 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
1f510 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  et..**.**     SR
1f520 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e  T_Mem         On
1f530 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20  ly valid if the 
1f540 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67  result is a sing
1f550 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20  le column..**   
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f570 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73    Store the firs
1f580 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
1f590 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77  first result row
1f5a0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f5b0 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73          in regis
1f5c0 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
1f5d0 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20  rm then abandon 
1f5e0 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20  the rest.**     
1f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f600 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54  of the query.  T
1f610 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1f620 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31  implies "LIMIT 1
1f630 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1f640 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65  _Set         The
1f650 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20   result must be 
1f660 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1f670 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20    Store each.** 
1f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f690 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c      row of resul
1f6a0 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20  t as the key in 
1f6b0 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1f6c0 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70               App
1f6e0 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ly the affinity 
1f6f0 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62  pDest->affSdst b
1f700 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a  efore storing.**
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f720 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55       results.  U
1f730 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
1f740 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e   "IN (SELECT ...
1f750 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  )"..**.**     SR
1f760 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72  T_EphemTab    Cr
1f770 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72  eate an temporar
1f780 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1f790 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65  SDParm and store
1f7a0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f7b0 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75          the resu
1f7c0 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75  lt there. The cu
1f7d0 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65  rsor is left ope
1f7e0 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20  n after.**      
1f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f800 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20  eturning.  This 
1f810 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  is like SRT_Tabl
1f820 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  e except that.**
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f840 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e       this destin
1f850 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70  ation uses OP_Op
1f860 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63  enEphemeral to c
1f870 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  reate.**        
1f880 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1f890 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a   table first..**
1f8a0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f  .**     SRT_Coro
1f8b0 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65  utine   Generate
1f8c0 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68   a co-routine th
1f8d0 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77  at returns a new
1f8e0 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20   row of.**      
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f900 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65  esults each time
1f910 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
1f920 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   The entry point
1f930 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f940 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
1f950 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f  o-routine is sto
1f960 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1f970 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a  pDest->iSDParm.*
1f980 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1f990 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65        and the re
1f9a0 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72  sult row is stor
1f9b0 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65  ed in pDest->nDe
1f9c0 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  st registers.** 
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9e0 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74      starting wit
1f9f0 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a  h pDest->iSdst..
1fa00 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61  **.**     SRT_Ta
1fa10 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  ble       Store 
1fa20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f  results in tempo
1fa30 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1fa40 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1fa50 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20    SRT_Fifo      
1fa60 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1fa70 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65  RT_EphemTab exce
1fa80 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  pt that the tabl
1fa90 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1faa0 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75           is assu
1fab0 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62  med to already b
1fac0 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66  e open.  SRT_Fif
1fad0 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  o has.**        
1fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1faf0 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70   additional prop
1fb00 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62  erty of being ab
1fb10 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20  le to ignore.** 
1fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb30 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59      the ORDER BY
1fb40 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1fb50 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20     SRT_DistFifo 
1fb60 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1fb70 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1fb80 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1fb90 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1fba0 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74               But
1fbb0 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72   also use tempor
1fbc0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1fbd0 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a  >iSDParm+1 as.**
1fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbf0 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66       a record of
1fc00 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c   all prior resul
1fc10 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e  ts and ignore an
1fc20 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20  y duplicate.**  
1fc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc40 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d     rows.  Name m
1fc50 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74  eans:  "Distinct
1fc60 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Fifo"..**.**   
1fc70 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20    SRT_Queue     
1fc80 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1fc90 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1fca0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1fcb0 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20   (really.**     
1fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcd0 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65  an index).  Appe
1fce0 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75  nd a sequence nu
1fcf0 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  mber so that all
1fd00 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20   entries.**     
1fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a  are distinct..**
1fd30 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1fd40 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65  Queue   Store re
1fd50 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1fd60 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1fd70 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a  SDParm only if.*
1fd80 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1fd90 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72        the same r
1fda0 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20  ecord has never 
1fdb0 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f  been stored befo
1fdc0 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20  re.  The.**     
1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fde0 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e  index at pDest->
1fdf0 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61  iSDParm+1 hold a
1fe00 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e  ll prior stores.
1fe10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  .*/.#define SRT_
1fe20 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20  Union        1  
1fe30 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1fe40 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1fe50 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1fe60 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20  RT_Except       
1fe70 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73  2  /* Remove res
1fe80 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e  ult from a UNION
1fe90 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1fea0 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20  e SRT_Exists    
1feb0 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31     3  /* Store 1
1fec0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
1fed0 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23  s not empty */.#
1fee0 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61  define SRT_Disca
1fef0 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f  rd      4  /* Do
1ff00 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65   not save the re
1ff10 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a  sults anywhere *
1ff20 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69  /.#define SRT_Fi
1ff30 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a  fo         5  /*
1ff40 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1ff50 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1ff60 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1ff70 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1ff80 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20  tFifo     6  /* 
1ff90 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62  Like SRT_Fifo, b
1ffa0 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1ffb0 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
1ffc0 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20  e SRT_Queue     
1ffd0 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72     7  /* Store r
1ffe0 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75  esult in an queu
1fff0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
20000 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20  _DistQueue    8 
20010 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65   /* Like SRT_Que
20020 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  ue, but unique r
20030 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a  esults only */..
20040 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
20050 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
20060 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
20070 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
20080 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
20090 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
200a0 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65  )<=SRT_DistQueue
200b0 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f  )..#define SRT_O
200c0 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f  utput       9  /
200d0 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f  * Output each ro
200e0 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
200f0 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20  define SRT_Mem  
20100 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74         10  /* St
20110 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ore result in a 
20120 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23  memory cell */.#
20130 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20  define SRT_Set  
20140 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74         11  /* St
20150 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b  ore results as k
20160 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
20170 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
20180 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f  phemTab    12  /
20190 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65  * Create transie
201a0 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65  nt tab and store
201b0 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
201c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43  */.#define SRT_C
201d0 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f  oroutine   13  /
201e0 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e  * Generate a sin
201f0 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
20200 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
20210 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20  _Table       14 
20220 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
20230 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
20240 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
20250 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
20260 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
20270 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
20280 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20  where to put of 
20290 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a  the results of.*
202a0 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  * a SELECT state
202b0 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
202c0 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75  SelectDest {.  u
202d0 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20  8 eDest;        
202e0 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
202f0 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
20300 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
20310 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69  _* above. */.  i
20320 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
20330 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
20340 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
20350 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
20360 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
20370 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
20380 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
20390 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
203a0 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
203b0 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20  nt nSdst;       
203c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
203d0 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
203e0 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ated */.  char *
203f0 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f  zAffSdst;      /
20400 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
20410 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
20420 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  Set */.  ExprLis
20430 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a  t *pOrderBy;  /*
20440 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72   Key columns for
20450 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53   SRT_Queue and S
20460 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a  RT_DistQueue */.
20470 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
20480 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
20490 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
204a0 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
204b0 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
204c0 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65  T.** tables, the
204d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
204e0 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
204f0 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
20500 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
20510 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
20520 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
20530 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
20540 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
20550 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
20560 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
20570 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
20580 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
20590 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
205a0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
205b0 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
205c0 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69   done within tri
205d0 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
205e0 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
205f0 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
20600 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
20610 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
20620 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
20630 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
20640 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
20650 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
20660 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
20670 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
20680 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
20690 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
206a0 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
206b0 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
206c0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
206d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
206e0 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
206f0 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
20700 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
20710 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
20720 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
20730 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
20740 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
20750 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
20760 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
20770 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
20780 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
20790 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
207a0 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73  At least one ins
207b0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
207c0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
207d0 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
207e0 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20  each.** trigger 
207f0 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65  that may be fire
20800 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20  d while parsing 
20810 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  an INSERT, UPDAT
20820 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73  E or DELETE.** s
20830 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75  tatement. All su
20840 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73  ch objects are s
20850 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e  tored in the lin
20860 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
20870 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69  at.** Parse.pTri
20880 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65  ggerPrg and dele
20890 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65  ted once stateme
208a0 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68  nt compilation h
208b0 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c  as been.** compl
208c0 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64  eted..**.** A Vd
208d0 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  be sub-program t
208e0 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
208f0 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e  he body and WHEN
20900 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67   clause of trigg
20910 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  er.** TriggerPrg
20920 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d  .pTrigger, assum
20930 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e  ing a default ON
20940 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
20950 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72   of.** TriggerPr
20960 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f  g.orconf, is sto
20970 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67  red in the Trigg
20980 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76  erPrg.pProgram v
20990 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  ariable..** The 
209a0 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
209b0 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e  g list never con
209c0 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65  tains two entrie
209d0 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a  s with the same.
209e0 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f  ** values for bo
209f0 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20  th pTrigger and 
20a00 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  orconf..**.** Th
20a10 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
20a20 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c  lmask[0] variabl
20a30 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61  e is set to a ma
20a40 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
20a50 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20  mns.** accessed 
20a60 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72  (or set to 0 for
20a70 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20   triggers fired 
20a80 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49  as a result of I
20a90 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65  NSERT.** stateme
20aa0 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
20ab0 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
20ac0 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
20ad0 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
20ae0 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
20af0 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
20b00 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
20b10 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
20b20 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
20b30 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
20b40 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
20b50 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
20b60 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
20b70 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
20b80 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
20b90 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
20ba0 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
20bb0 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
20bc0 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
20bd0 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
20be0 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
20bf0 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
20c00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
20c10 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
20c20 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
20c30 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d   u32 aColmask[2]
20c40 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
20c50 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e  s of old.*, new.
20c60 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73  * columns access
20c70 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
20c80 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61  The yDbMask data
20c90 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74  type for the bit
20ca0 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61  mask of all atta
20cb0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
20cc0 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
20cd0 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
20ce0 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
20cf0 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53   char yDbMask[(S
20d00 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
20d10 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69  ED+9)/8];.# defi
20d20 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
20d30 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f  I)    (((M)[(I)/
20d40 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29  8]&(1<<((I)&7)))
20d50 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
20d60 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
20d70 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69   memset((M),0,si
20d80 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e  zeof(M)).# defin
20d90 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
20da0 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c       (M)[(I)/8]|
20db0 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20  =(1<<((I)&7)).# 
20dc0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
20dd0 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65  Zero(M)   sqlite
20de0 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
20df0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
20e00 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73  kNonZero(M)   (s
20e10 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
20e20 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65  ero(M)==0).#else
20e30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
20e40 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b  ned int yDbMask;
20e50 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
20e60 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
20e70 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29  M)&(((yDbMask)1)
20e80 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65  <<(I)))!=0).# de
20e90 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
20ea0 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20  M)      (M)=0.# 
20eb0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
20ec0 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28  (M,I)     (M)|=(
20ed0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
20ee0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
20ef0 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28  skAllZero(M)   (
20f00 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  M)==0.# define D
20f10 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
20f20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a    (M)!=0.#endif.
20f30 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
20f40 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
20f50 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
20f60 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
20f70 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
20f80 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
20f90 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
20fa0 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
20fb0 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
20fc0 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
20fd0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
20fe0 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
20ff0 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
21000 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
21010 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
21020 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
21030 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
21040 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
21050 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
21060 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
21070 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
21080 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
21090 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
210a0 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
210b0 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
210c0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
210d0 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
210e0 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
210f0 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
21100 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
21110 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
21120 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
21130 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20  shared-cache.** 
21140 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
21150 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73  ed (if sqlite3Ts
21160 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61  d()->useSharedDa
21170 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65  ta is true). The
21180 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  y are.** used to
21190 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f   store the set o
211a0 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65  f table-locks re
211b0 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74  quired by the st
211c0 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a  atement being.**
211d0 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74   compiled. Funct
211e0 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ion sqlite3Table
211f0 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74  Lock() is used t
21200 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f  o add entries to
21210 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f   the.** list..*/
21220 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a  .struct Parse {.
21230 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
21240 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61         /* The ma
21250 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75  in database stru
21260 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20  cture */.  char 
21270 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
21280 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
21290 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
212a0 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
212b0 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
212c0 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
212d0 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
212e0 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
212f0 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
21300 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69  ode from executi
21310 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61  on */.  u8 colNa
21320 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20  mesSet;      /* 
21330 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f  TRUE after OP_Co
21340 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65  lumnName has bee
21350 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62  n issued to pVdb
21360 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53  e */.  u8 checkS
21370 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43  chema;      /* C
21380 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f  auses schema coo
21390 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20  kie check after 
213a0 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38  an error */.  u8
213b0 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20   nested;        
213c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
213d0 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
213e0 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20  the parser/code 
213f0 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75  generator */.  u
21400 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20  8 nTempReg;     
21410 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21420 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
21430 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67  ters in aTempReg
21440 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c  [] */.  u8 isMul
21450 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20  tiWrite;     /* 
21460 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
21470 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73  t may modify/ins
21480 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ert multiple row
21490 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f  s */.  u8 mayAbo
214a0 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rt;         /* T
214b0 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
214c0 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42   may throw an AB
214d0 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f  ORT exception */
214e0 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e  .  u8 hasCompoun
214f0 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20  d;      /* Need 
21500 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72  to invoke conver
21510 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
21520 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20  oSubquery() */. 
21530 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f   u8 okConstFacto
21540 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66  r;    /* OK to f
21550 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
21560 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61  nts */.  u8 disa
21570 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a  bleLookaside; /*
21580 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   Number of times
21590 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62   lookaside has b
215a0 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a  een disabled */.
215b0 20 20 75 38 20 64 69 73 61 62 6c 65 56 74 61 62    u8 disableVtab
215c0 3b 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c  ;      /* Disabl
215d0 65 20 61 6c 6c 20 76 69 72 74 75 61 6c 20 74 61  e all virtual ta
215e0 62 6c 65 73 20 66 6f 72 20 74 68 69 73 20 70 61  bles for this pa
215f0 72 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  rse */.  int nRa
21600 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
21610 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
21620 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
21630 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
21640 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
21650 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
21660 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
21670 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
21680 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
21690 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
216a0 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
216b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
216c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
216d0 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
216e0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
216f0 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
21700 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
21710 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21720 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
21730 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
21740 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20  nt szOpAlloc;   
21750 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
21760 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c  memory space all
21770 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e  ocated for Vdbe.
21780 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69  aOp[] */.  int i
21790 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20  SelfTab;        
217a0 2f 2a 20 54 61 62 6c 65 20 61 73 73 6f 63 69 61  /* Table associa
217b0 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e 64 65  ted with an inde
217c0 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65  x on expr, or ne
217d0 67 61 74 69 76 65 0a 20 20 20 20 20 20 20 20 20  gative.         
217e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
217f0 20 6f 66 20 74 68 65 20 62 61 73 65 20 72 65 67   of the base reg
21800 69 73 74 65 72 20 64 75 72 69 6e 67 20 63 68 65  ister during che
21810 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65 76  ck-constraint ev
21820 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  al */.  int nLab
21830 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
21840 54 68 65 20 2a 6e 65 67 61 74 69 76 65 2a 20 6f  The *negative* o
21850 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
21860 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20  labels used */. 
21870 20 69 6e 74 20 6e 4c 61 62 65 6c 41 6c 6c 6f 63   int nLabelAlloc
21880 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ;     /* Number 
21890 6f 66 20 73 6c 6f 74 73 20 69 6e 20 61 4c 61 62  of slots in aLab
218a0 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  el */.  int *aLa
218b0 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
218c0 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
218d0 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78  e labels */.  Ex
218e0 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
218f0 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
21900 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
21910 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
21920 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
21930 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
21940 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
21950 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
21960 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
21970 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
21980 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
21990 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
219a0 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
219b0 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
219c0 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
219d0 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
219e0 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  s */.  int regRo
219f0 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
21a00 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
21a10 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
21a20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
21a30 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
21a40 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
21a50 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
21a60 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
21a70 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
21a80 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
21a90 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
21aa0 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
21ab0 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
21ac0 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74  program */.  int
21ad0 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20   nSelect;       
21ae0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53    /* Number of S
21af0 45 4c 45 43 54 20 73 74 6d 74 73 2e 20 43 6f 75  ELECT stmts. Cou
21b00 6e 74 65 72 20 66 6f 72 20 53 65 6c 65 63 74 2e  nter for Select.
21b10 73 65 6c 49 64 20 2a 2f 0a 23 69 66 6e 64 65 66  selId */.#ifndef
21b20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
21b30 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
21b40 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
21b50 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21b60 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
21b70 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
21b80 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
21b90 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
21ba0 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
21bb0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
21bc0 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
21bd0 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
21be0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
21bf0 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
21c00 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  T counters */.  
21c10 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
21c20 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
21c30 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
21c40 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
21c50 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
21c60 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
21c70 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
21c80 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
21c90 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  or */.  int addr
21ca0 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20  CrTab;       /* 
21cb0 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72  Address of OP_Cr
21cc0 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65  eateBtree opcode
21cd0 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   on CREATE TABLE
21ce0 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79   */.  u32 nQuery
21cf0 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73  Loop;      /* Es
21d00 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72  t number of iter
21d10 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72  ations of a quer
21d20 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a  y (10*log2(N)) *
21d30 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b  /.  u32 oldmask;
21d40 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
21d50 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
21d60 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
21d70 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20    u32 newmask;  
21d80 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
21d90 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
21da0 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
21db0 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20  u8 eTriggerOp;  
21dc0 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54       /* TK_UPDAT
21dd0 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20  E, TK_INSERT or 
21de0 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75  TK_DELETE */.  u
21df0 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20  8 eOrconf;      
21e00 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
21e10 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
21e20 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74  y for trigger st
21e30 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61  eps */.  u8 disa
21e40 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a  bleTriggers;  /*
21e50 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65   True to disable
21e60 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20   triggers */..  
21e70 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
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 0a 20 20 2a 2a  ***********.  **
21ec0 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75   Fields above mu
21ed0 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  st be initialize
21ee0 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20  d to zero.  The 
21ef0 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c  fields that foll
21f00 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f  ow,.  ** down to
21f10 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
21f20 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  f the recursive 
21f30 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20  section, do not 
21f40 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20  need to be.  ** 
21f50 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74  initialized as t
21f60 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20  hey will be set 
21f70 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65  before being use
21f80 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  d.  The boundary
21f90 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69   is.  ** determi
21fa0 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28  ned by offsetof(
21fb0 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29 2e  Parse,aTempReg).
21fc0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
21fd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
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 2f 0a 0a  *************/..
22010 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
22020 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c  ];        /* Hol
22030 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
22040 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
22050 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61  s */.  Token sNa
22060 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  meToken;       /
22070 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
22080 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
22090 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a  object name */..
220a0 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
220b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
220c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
220d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
220e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
220f0 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
22100 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
22110 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
22120 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
22130 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
22140 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68  h recursion.  Th
22150 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65  e boundary betwe
22160 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67  en these two reg
22170 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e  ions is determin
22180 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66  ed.  ** using of
22190 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
221a0 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20  stToken) so the 
221b0 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64  sLastToken field
221c0 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a   must be the.  *
221d0 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e  * first field in
221e0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
221f0 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
22200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22240 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73  */..  Token sLas
22250 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a  tToken;       /*
22260 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20   The last token 
22270 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61  parsed */.  ynVa
22280 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  r nVar;         
22290 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
222a0 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
222b0 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
222c0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
222d0 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
222e0 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
222f0 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
22300 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
22310 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
22320 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22330 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
22340 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
22350 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
22360 2f 0a 23 69 66 20 21 28 64 65 66 69 6e 65 64 28  /.#if !(defined(
22370 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
22380 55 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66  UALTABLE) && def
22390 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
223a0 5f 41 4c 54 45 52 54 41 42 4c 45 29 29 0a 20 20  _ALTERTABLE)).  
223b0 75 38 20 65 50 61 72 73 65 4d 6f 64 65 3b 20 20  u8 eParseMode;  
223c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 41 52            /* PAR
223d0 53 45 5f 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73  SE_MODE_XXX cons
223e0 74 61 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tant */.#endif.#
223f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22400 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
22410 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
22420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
22430 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
22440 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
22450 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
22460 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
22470 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
22480 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20  ion tree height 
22490 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73  of current sub-s
224a0 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66  elect */.#ifndef
224b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
224c0 4c 41 49 4e 0a 20 20 69 6e 74 20 61 64 64 72 45  LAIN.  int addrE
224d0 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
224e0 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 63   /* Address of c
224f0 75 72 72 65 6e 74 20 4f 50 5f 45 78 70 6c 61 69  urrent OP_Explai
22500 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64  n opcode */.#end
22510 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69  if.  VList *pVLi
22520 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
22530 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65  * Mapping betwee
22540 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73  n variable names
22550 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a   and numbers */.
22560 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61    Vdbe *pReprepa
22570 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56  re;         /* V
22580 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72  M being reprepar
22590 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65  ed (sqlite3Repre
225a0 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e  pare()) */.  con
225b0 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20  st char *zTail; 
225c0 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51         /* All SQ
225d0 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20  L text past the 
225e0 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70  last semicolon p
225f0 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65  arsed */.  Table
22600 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20   *pNewTable;    
22610 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20       /* A table 
22620 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65  being constructe
22630 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c  d by CREATE TABL
22640 45 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  E */.  Index *pN
22650 65 77 49 6e 64 65 78 3b 20 20 20 20 20 20 20 20  ewIndex;        
22660 20 2f 2a 20 41 6e 20 69 6e 64 65 78 20 62 65 69   /* An index bei
22670 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
22680 79 20 43 52 45 41 54 45 20 49 4e 44 45 58 2e 0a  y CREATE INDEX..
22690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
226b0 6c 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  lso used to hold
226c0 20 72 65 64 75 6e 64 61 6e 74 20 55 4e 49 51 55   redundant UNIQU
226d0 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20  E constraints.  
226e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226f0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 64 75 72            ** dur
22700 69 6e 67 20 61 20 52 45 4e 41 4d 45 20 43 4f 4c  ing a RENAME COL
22710 55 4d 4e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  UMN */.  Trigger
22720 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
22730 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
22740 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
22750 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
22760 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
22770 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
22780 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
22790 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
227a0 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
227b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
227c0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
227d0 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
227f0 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
22800 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
22810 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
22820 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
22830 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
22840 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
22850 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
22860 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
22870 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
22880 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
22890 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
228a0 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
228b0 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
228c0 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
228d0 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
228e0 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
228f0 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
22900 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
22910 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
22920 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
22930 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20   NULL */.  With 
22940 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20  *pWithToFree;   
22950 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69       /* Free thi
22960 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74  s WITH object at
22970 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
22980 70 61 72 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66  parse */.#ifndef
22990 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
229a0 45 52 54 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65  ERTABLE.  Rename
229b0 54 6f 6b 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20  Token *pRename; 
229c0 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75      /* Tokens su
229d0 62 6a 65 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e  bject to renamin
229e0 67 20 62 79 20 41 4c 54 45 52 20 54 41 42 4c 45  g by ALTER TABLE
229f0 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23   */.#endif.};..#
22a00 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44  define PARSE_MOD
22a10 45 5f 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20  E_NORMAL        
22a20 30 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  0.#define PARSE_
22a30 4d 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41  MODE_DECLARE_VTA
22a40 42 20 20 31 0a 23 64 65 66 69 6e 65 20 50 41 52  B  1.#define PAR
22a50 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43  SE_MODE_RENAME_C
22a60 4f 4c 55 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20  OLUMN 2.#define 
22a70 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d  PARSE_MODE_RENAM
22a80 45 5f 54 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a  E_TABLE  3../*.*
22a90 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e  * Sizes and poin
22aa0 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20  ters of various 
22ab0 70 61 72 74 73 20 6f 66 20 74 68 65 20 50 61 72  parts of the Par
22ac0 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64  se object..*/.#d
22ad0 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f  efine PARSE_HDR_
22ae0 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  SZ offsetof(Pars
22af0 65 2c 61 54 65 6d 70 52 65 67 29 20 2f 2a 20 52  e,aTempReg) /* R
22b00 65 63 75 72 73 69 76 65 20 70 61 72 74 20 77 2f  ecursive part w/
22b10 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64  o aColCache*/.#d
22b20 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55  efine PARSE_RECU
22b30 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28  RSE_SZ offsetof(
22b40 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e  Parse,sLastToken
22b50 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76  )    /* Recursiv
22b60 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e  e part */.#defin
22b70 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20  e PARSE_TAIL_SZ 
22b80 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50  (sizeof(Parse)-P
22b90 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29  ARSE_RECURSE_SZ)
22ba0 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76   /* Non-recursiv
22bb0 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e  e part */.#defin
22bc0 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20  e PARSE_TAIL(X) 
22bd0 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41  (((char*)(X))+PA
22be0 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20  RSE_RECURSE_SZ) 
22bf0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74   /* Pointer to t
22c00 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65  ail */../*.** Re
22c10 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72  turn true if cur
22c20 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e  rently inside an
22c30 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
22c40 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f  _vtab() call..*/
22c50 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
22c60 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
22c70 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
22c80 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c  CLARE_VTAB 0.#el
22c90 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  se.  #define IN_
22ca0 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50  DECLARE_VTAB (pP
22cb0 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65  arse->eParseMode
22cc0 3d 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43  ==PARSE_MODE_DEC
22cd0 4c 41 52 45 5f 56 54 41 42 29 0a 23 65 6e 64 69  LARE_VTAB).#endi
22ce0 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
22cf0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
22d00 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65  TABLE).  #define
22d10 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43   IN_RENAME_OBJEC
22d20 54 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  T 0.#else.  #def
22d30 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42  ine IN_RENAME_OB
22d40 4a 45 43 54 20 28 70 50 61 72 73 65 2d 3e 65 50  JECT (pParse->eP
22d50 61 72 73 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f  arseMode>=PARSE_
22d60 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55  MODE_RENAME_COLU
22d70 4d 4e 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  MN).#endif..#if 
22d80 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
22d90 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
22da0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
22db0 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
22dc0 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49  BLE).  #define I
22dd0 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20  N_SPECIAL_PARSE 
22de0 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
22df0 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52  e IN_SPECIAL_PAR
22e00 53 45 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72  SE (pParse->ePar
22e10 73 65 4d 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f  seMode!=PARSE_MO
22e20 44 45 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69  DE_NORMAL).#endi
22e30 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
22e40 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
22e50 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
22e60 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
22e70 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
22e80 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
22e90 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
22ea0 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
22eb0 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
22ec0 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
22ed0 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
22ee0 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
22ef0 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
22f00 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
22f10 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
22f20 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
22f30 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
22f40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
22f50 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
22f60 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
22f70 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
22f80 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
22f90 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  ious opcodes..**
22fa0 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
22fb0 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
22fc0 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
22fd0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  *    OPFLAG_LENG
22fe0 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49  THARG    == SQLI
22ff0 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a  TE_FUNC_LENGTH.*
23000 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45  *    OPFLAG_TYPE
23010 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49  OFARG    == SQLI
23020 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a  TE_FUNC_TYPEOF.*
23030 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  *    OPFLAG_BULK
23040 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45  CSR      == BTRE
23050 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20  E_BULKLOAD.**   
23060 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
23070 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45       == BTREE_SE
23080 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c  EK_EQ.**    OPFL
23090 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20  AG_FORDELETE    
230a0 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45  == BTREE_FORDELE
230b0 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TE.**    OPFLAG_
230c0 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20  SAVEPOSITION == 
230d0 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49  BTREE_SAVEPOSITI
230e0 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ON.**    OPFLAG_
230f0 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20  AUXDELETE    == 
23100 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a  BTREE_AUXDELETE.
23110 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
23120 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
23130 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e  0x01    /* OP_In
23140 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64  sert: Set to upd
23150 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20  ate db->nChange 
23160 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
23170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23180 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20          /* Also 
23190 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20  used in P2 (not 
231a0 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65  P5) of OP_Delete
231b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
231c0 41 47 5f 4e 4f 43 48 4e 47 20 20 20 20 20 20 20  AG_NOCHNG       
231d0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56   0x01    /* OP_V
231e0 43 6f 6c 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20  Column nochange 
231f0 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  for UPDATE */.#d
23200 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48  efine OPFLAG_EPH
23210 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20  EM         0x01 
23220 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a     /* OP_Column:
23230 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75   Ephemeral outpu
23240 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69  t is ok */.#defi
23250 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  ne OPFLAG_LASTRO
23260 57 49 44 20 20 20 20 20 30 78 32 30 20 20 20 20  WID     0x20    
23270 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
23280 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a   db->lastRowid *
23290 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
232a0 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30  _ISUPDATE      0
232b0 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f  x04    /* This O
232c0 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73  P_Insert is an s
232d0 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  ql UPDATE */.#de
232e0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45  fine OPFLAG_APPE
232f0 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20  ND        0x08  
23300 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b    /* This is lik
23310 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
23320 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  end */.#define O
23330 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
23340 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54  ULT 0x10    /* T
23350 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65  ry to avoid a se
23360 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72  ek in BtreeInser
23370 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  t() */.#define O
23380 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20  PFLAG_ISNOOP    
23390 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
233a0 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72  P_Delete does pr
233b0 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e  e-update-hook on
233c0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
233d0 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
233e0 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
233f0 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
23400 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a  d for length() *
23410 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
23420 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30  _TYPEOFARG     0
23430 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x80    /* OP_Col
23440 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
23450 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64  r typeof() */.#d
23460 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c  efine OPFLAG_BUL
23470 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20  KCSR       0x01 
23480 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
23490 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c  used to open bul
234a0 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66  k cursor */.#def
234b0 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  ine OPFLAG_SEEKE
234c0 51 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20  Q        0x02   
234d0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75   /* OP_Open** cu
234e0 72 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65  rsor uses EQ see
234f0 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  k only */.#defin
23500 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  e OPFLAG_FORDELE
23510 54 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f  TE     0x08    /
23520 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64  * OP_Open should
23530 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45   use BTREE_FORDE
23540 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
23550 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20  OPFLAG_P2ISREG  
23560 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
23570 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20  P2 to OP_Open** 
23580 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75  is a register nu
23590 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mber */.#define 
235a0 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20  OPFLAG_PERMUTE  
235b0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
235c0 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20  OP_Compare: use 
235d0 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
235e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
235f0 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20  G_SAVEPOSITION  
23600 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x02    /* OP_De
23610 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76  lete/Insert: sav
23620 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a  e cursor pos */.
23630 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41  #define OPFLAG_A
23640 55 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  UXDELETE     0x0
23650 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  4    /* OP_Delet
23660 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45  e: index in a DE
23670 4c 45 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69  LETE op */.#defi
23680 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47  ne OPFLAG_NOCHNG
23690 5f 4d 41 47 49 43 20 20 30 78 36 64 20 20 20 20  _MAGIC  0x6d    
236a0 2f 2a 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  /* OP_MakeRecord
236b0 3a 20 73 65 72 69 61 6c 74 79 70 65 20 31 30 20  : serialtype 10 
236c0 69 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20  is ok */../*. * 
236d0 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65  Each trigger pre
236e0 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
236f0 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
23700 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74  tored as an inst
23710 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63  ance of. * struc
23720 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a  t Trigger.. *. *
23730 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73   Pointers to ins
23740 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
23750 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f   Trigger are sto
23760 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e  red in two ways.
23770 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74  . * 1. In the "t
23780 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61  rigHash" hash ta
23790 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65  ble (part of the
237a0 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72   sqlite3* that r
237b0 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a  epresents the. *
237c0 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54      database). T
237d0 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67  his allows Trigg
237e0 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  er structures to
237f0 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79   be retrieved by
23800 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c   name.. * 2. All
23810 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69   triggers associ
23820 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67  ated with a sing
23830 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  le table form a 
23840 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69  linked list, usi
23850 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65  ng the. *    pNe
23860 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72  xt member of str
23870 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70  uct Trigger. A p
23880 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
23890 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
238a0 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20  he. *    linked 
238b0 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61  list is stored a
238c0 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22  s the "pTrigger"
238d0 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61   member of the a
238e0 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20  ssociated. *    
238f0 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a  struct Table.. *
23900 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69  . * The "step_li
23910 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74  st" member point
23920 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  s to the first e
23930 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b  lement of a link
23940 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61  ed list. * conta
23950 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
23960 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
23970 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65  ed as the trigge
23980 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73  r program.. */.s
23990 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a  truct Trigger {.
239a0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
239b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
239c0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69   name of the tri
239d0 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20  gger            
239e0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
239f0 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20   char *table;   
23a00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
23a10 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f  table or view to
23a20 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
23a30 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20  er applies */.  
23a40 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
23a50 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
23a60 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
23a70 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
23a80 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75  T         */.  u
23a90 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20  8 tr_tm;        
23aa0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
23ab0 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c   TRIGGER_BEFORE,
23ac0 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a   TRIGGER_AFTER *
23ad0 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b  /.  Expr *pWhen;
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23af0 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
23b00 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
23b10 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a   (may be NULL) *
23b20 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c  /.  IdList *pCol
23b30 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49  umns;       /* I
23b40 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44  f this is an UPD
23b50 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c  ATE OF <column-l
23b60 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20  ist> trigger,.  
23b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b80 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c             the <
23b90 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20  column-list> is 
23ba0 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
23bb0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
23bc0 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65  ;        /* Sche
23bd0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
23be0 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53  e trigger */.  S
23bf0 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d  chema *pTabSchem
23c00 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
23c10 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
23c20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67  table */.  Trigg
23c30 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73  erStep *step_lis
23c40 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20  t; /* Link list 
23c50 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  of trigger progr
23c60 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20  am steps        
23c70 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65       */.  Trigge
23c80 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  r *pNext;       
23c90 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65    /* Next trigge
23ca0 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
23cb0 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23  h the table */.#
23cc0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
23cd0 42 4c 45 5f 53 48 41 52 45 44 5f 53 43 48 45 4d  BLE_SHARED_SCHEM
23ce0 41 0a 20 20 63 68 61 72 20 2a 7a 54 61 62 53 63  A.  char *zTabSc
23cf0 68 65 6d 61 3b 20 20 20 20 20 20 20 2f 2a 20 54  hema;       /* T
23d00 65 6d 70 20 74 72 69 67 67 65 72 73 20 69 6e 20  emp triggers in 
23d10 49 73 53 68 61 72 65 64 53 63 68 65 6d 61 28 29  IsSharedSchema()
23d20 20 64 62 73 20 6f 6e 6c 79 20 2a 2f 0a 23 65 6e   dbs only */.#en
23d30 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20  dif.};../*.** A 
23d40 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
23d50 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
23d60 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
23d70 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
23d80 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
23d90 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a  rmine which..**.
23da0 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  ** If there are 
23db0 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72  multiple trigger
23dc0 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20  s, you might of 
23dd0 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20  some BEFORE and 
23de0 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49  some AFTER..** I
23df0 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68  n that cases, th
23e00 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  e constants belo
23e10 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f  w can be ORed to
23e20 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  gether..*/.#defi
23e30 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  ne TRIGGER_BEFOR
23e40 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49  E  1.#define TRI
23e50 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a  GGER_AFTER   2..
23e60 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*. * An instanc
23e70 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  e of struct Trig
23e80 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20  gerStep is used 
23e90 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c  to store a singl
23ea0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  e SQL statement.
23eb0 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72   * that is a par
23ec0 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70  t of a trigger-p
23ed0 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e  rogram.. *. * In
23ee0 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
23ef0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72  t TriggerStep ar
23f00 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
23f10 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ngly linked list
23f20 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e   (linked. * usin
23f30 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65  g the "pNext" me
23f40 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64  mber) referenced
23f50 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69   by the "step_li
23f60 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  st" member of th
23f70 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20  e. * associated 
23f80 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69  struct Trigger i
23f90 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72  nstance. The fir
23fa0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
23fb0 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73  e linked list is
23fc0 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74  . * the first st
23fd0 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  ep of the trigge
23fe0 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a  r-program.. *. *
23ff0 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
24000 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
24010 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
24020 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
24030 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
24040 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
24050 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
24060 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
24070 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
24080 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61  ned by the. * va
24090 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
240a0 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
240b0 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
240c0 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
240d0 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
240e0 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
240f0 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
24100 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
24110 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
24120 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
24130 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
24140 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
24150 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
24160 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
24170 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
24180 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72  se NULL.. * zTar
24190 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
241a0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
241b0 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
241c0 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
241d0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
241e0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
241f0 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
24200 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
24210 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
24220 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
24230 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
24240 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
24250 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
24260 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
24270 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
24280 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
24290 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20  ALUES .... *    
242a0 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
242b0 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
242c0 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
242d0 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
242f0 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
24300 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
24310 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
24320 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
24330 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
24340 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20  o delete from.. 
24350 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
24360 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
24370 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
24380 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
24390 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
243a0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
243b0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a  erwise NULL.. *.
243c0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
243d0 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ATE). * zTarget 
243e0 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
243f0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
24400 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57  to update.. * pW
24410 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
24420 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
24430 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
24440 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
24450 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
24460 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
24470 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
24480 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
24490 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
244a0 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
244b0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
244c0 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
244d0 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
244e0 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
244f0 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
24500 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
24510 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
24520 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f  argument.. *. */
24530 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
24540 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
24550 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24560 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
24570 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
24580 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
24590 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
245a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
245b0 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
245c0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
245d0 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
245e0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
245f0 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
24600 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
24610 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
24620 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  * SELECT stateme
24630 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
24640 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20  ERT INTO SELECT 
24650 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ... */.  char *z
24660 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a  Target;       /*
24670 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
24680 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
24690 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
246a0 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
246b0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
246c0 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
246d0 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
246e0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
246f0 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
24700 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
24710 44 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69 73 74  DATE */.  IdList
24720 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f   *pIdList;     /
24730 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66  * Column names f
24740 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 55  or INSERT */.  U
24750 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20  psert *pUpsert; 
24760 20 20 20 20 2f 2a 20 55 70 73 65 72 74 20 63 6c      /* Upsert cl
24770 61 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e 53 45  auses on an INSE
24780 52 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53  RT */.  char *zS
24790 70 61 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  pan;         /* 
247a0 4f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65 78  Original SQL tex
247b0 74 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e  t of this comman
247c0 64 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  d */.  TriggerSt
247d0 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  ep *pNext;  /* N
247e0 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d  ext in the link-
247f0 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65  list */.  Trigge
24800 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f  rStep *pLast;  /
24810 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69  * Last element i
24820 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c  n link-list. Val
24830 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20  id for 1st elem 
24840 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  only */.};../*.*
24850 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
24860 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
24870 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ns information u
24880 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
24890 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69  eFix....** routi
248a0 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b  nes as they walk
248b0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
248c0 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65  to make database
248d0 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65   references.** e
248e0 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65  xplicit..*/.type
248f0 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78  def struct DbFix
24900 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75  er DbFixer;.stru
24910 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50  ct DbFixer {.  P
24920 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
24930 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e     /* The parsin
24940 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f  g context.  Erro
24950 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74  r messages writt
24960 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  en here */.  Sch
24970 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
24980 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f   /* Fix items to
24990 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
249a0 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20    int bVarOnly; 
249b0 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
249c0 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  or variable refe
249d0 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  rences only */. 
249e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
249f0 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;    /* Make sur
24a00 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72  e all objects ar
24a10 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
24a20 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
24a30 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
24a40 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66  ype;  /* Type of
24a50 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
24a60 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
24a70 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f  messages */.  co
24a80 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65  nst Token *pName
24a90 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  ; /* Name of the
24aa0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
24ab0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
24ac0 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ages */.};../*.*
24ad0 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73  * An objected us
24ae0 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65  ed to accumulate
24af0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73   the text of a s
24b00 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a  tring where we.*
24b10 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61  * do not necessa
24b20 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69  rily know how bi
24b30 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c  g the string wil
24b40 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e  l be in the end.
24b50 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74  .*/.struct sqlit
24b60 65 33 5f 73 74 72 20 7b 0a 20 20 73 71 6c 69 74  e3_str {.  sqlit
24b70 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
24b80 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
24b90 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
24ba0 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
24bb0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78   */.  char *zTex
24bc0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  t;         /* Th
24bd0 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74  e string collect
24be0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  ed so far */.  u
24bf0 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  32  nAlloc;     
24c00 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
24c10 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
24c20 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75   in zText */.  u
24c30 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  32  mxAlloc;    
24c40 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
24c50 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f  llowed allocatio
24c60 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c  n.  0 for no mal
24c70 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75  loc usage */.  u
24c80 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20  32  nChar;      
24c90 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
24ca0 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66   the string so f
24cb0 61 72 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63  ar */.  u8   acc
24cc0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
24cd0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6f 72 20  SQLITE_NOMEM or 
24ce0 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 2a 2f  SQLITE_TOOBIG */
24cf0 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c  .  u8   printfFl
24d00 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54  ags;    /* SQLIT
24d10 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62  E_PRINTF flags b
24d20 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69  elow */.};.#defi
24d30 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
24d40 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20  _INTERNAL 0x01  
24d50 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d  /* Internal-use-
24d60 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20  only converters 
24d70 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
24d80 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
24d90 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20  _SQLFUNC  0x02  
24da0 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  /* SQL function 
24db0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50  arguments to VXP
24dc0 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65  rintf */.#define
24dd0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
24de0 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a  ALLOCED 0x04  /*
24df0 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69   True if xText i
24e00 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  s allocated spac
24e10 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73  e */..#define is
24e20 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28  Malloced(X)  (((
24e30 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20  X)->printfFlags 
24e40 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  & SQLITE_PRINTF_
24e50 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a  MALLOCED)!=0)...
24e60 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20  /*.** A pointer 
24e70 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
24e80 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  e is used to com
24e90 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61  municate informa
24ea0 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  tion.** from sql
24eb0 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f  ite3Init and OP_
24ec0 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f  ParseSchema into
24ed0 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74   the sqlite3Init
24ee0 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70  Callback..*/.typ
24ef0 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20  edef struct {.  
24f00 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
24f10 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
24f20 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ase being initia
24f30 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  lized */.  char 
24f40 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
24f50 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
24f60 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
24f70 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
24f80 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61       /* 0 for ma
24f90 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20  in database.  1 
24fa0 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f  for TEMP, 2.. fo
24fb0 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20  r ATTACHed */.  
24fc0 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
24fd0 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f      /* Result co
24fe0 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  de stored here *
24ff0 2f 0a 20 20 75 33 32 20 6d 49 6e 69 74 46 6c 61  /.  u32 mInitFla
25000 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73  gs;     /* Flags
25010 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 65 72 72   controlling err
25020 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
25030 20 75 33 32 20 6e 49 6e 69 74 52 6f 77 3b 20 20   u32 nInitRow;  
25040 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
25050 66 20 72 6f 77 73 20 70 72 6f 63 65 73 73 65 64  f rows processed
25060 20 2a 2f 0a 20 20 75 36 34 20 63 6b 73 75 6d 3b   */.  u64 cksum;
25070 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68            /* Sch
25080 65 6d 61 20 63 68 65 63 6b 73 75 6d 20 66 6f 72  ema checksum for
25090 20 52 45 55 53 45 5f 53 43 48 45 4d 41 20 6d 6f   REUSE_SCHEMA mo
250a0 64 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61  de */.} InitData
250b0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
250c0 20 76 61 6c 75 65 73 20 66 6f 72 20 6d 49 6e 69   values for mIni
250d0 74 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e  tFlags.*/.#defin
250e0 65 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72  e INITFLAG_Alter
250f0 54 61 62 6c 65 20 20 20 30 78 30 30 30 31 20 20  Table   0x0001  
25100 2f 2a 20 54 68 69 73 20 69 73 20 61 20 72 65 70  /* This is a rep
25110 61 72 73 65 20 61 66 74 65 72 20 41 4c 54 45 52  arse after ALTER
25120 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   TABLE */../*.**
25130 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
25140 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
25150 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
25160 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
25170 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
25180 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
25190 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
251a0 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
251b0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
251c0 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
251d0 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251f0 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
25200 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
25210 20 2a 2f 0a 20 20 75 38 20 62 43 6f 72 65 4d 75   */.  u8 bCoreMu
25220 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
25230 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
25240 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
25250 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 75 38 20  utexing */.  u8 
25260 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
25270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25280 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
25290 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
252a0 2f 0a 20 20 75 38 20 62 4f 70 65 6e 55 72 69 3b  /.  u8 bOpenUri;
252b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252c0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
252d0 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e   interpret filen
252e0 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a  ames as URIs */.
252f0 20 20 75 38 20 62 55 73 65 43 69 73 3b 20 20 20    u8 bUseCis;   
25300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25310 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72      /* Use cover
25320 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20  ing indices for 
25330 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20  full-scans */.  
25340 75 38 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b  u8 bSmallMalloc;
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25360 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67 65    /* Avoid large
25370 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
25380 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  ons if true */. 
25390 20 75 38 20 62 45 78 74 72 61 53 63 68 65 6d 61   u8 bExtraSchema
253a0 43 68 65 63 6b 73 3b 20 20 20 20 20 20 20 20 20  Checks;         
253b0 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74 79 70     /* Verify typ
253c0 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 20  e,name,tbl_name 
253d0 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  in schema */.  i
253e0 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
253f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25400 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
25410 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
25420 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b  nt neverCorrupt;
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25440 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
25450 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d  always well-form
25460 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f  ed */.  int szLo
25470 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
25480 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
25490 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
254a0 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20  uffer size */.  
254b0 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20  int nLookaside; 
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254d0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
254e0 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f  kaside buffer co
254f0 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  unt */.  int nSt
25500 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20  mtSpill;        
25510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
25520 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c  mt-journal spill
25530 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f  -to-disk thresho
25540 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ld */.  sqlite3_
25550 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20  mem_methods m;  
25560 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77            /* Low
25570 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c  -level memory al
25580 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61  location interfa
25590 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
255a0 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75  mutex_methods mu
255b0 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77  tex;      /* Low
255c0 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74  -level mutex int
255d0 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
255e0 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
255f0 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a  ds2 pcache2;  /*
25600 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d   Low-level page-
25610 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20  cache interface 
25620 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70  */.  void *pHeap
25630 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25640 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73         /* Heap s
25650 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a  torage space */.
25660 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20    int nHeap;    
25670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25680 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70      /* Size of p
25690 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Heap[] */.  int 
256a0 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20  mnReq, mxReq;   
256b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
256c0 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61   Min and max hea
256d0 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73  p requests sizes
256e0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
256f0 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  t64 szMmap;     
25700 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28          /* mmap(
25710 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e  ) space per open
25720 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74   file */.  sqlit
25730 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b  e3_int64 mxMmap;
25740 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25750 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f  Maximum value fo
25760 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f  r szMmap */.  vo
25770 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20  id *pPage;      
25780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25790 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65  /* Page cache me
257a0 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
257b0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
257c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
257d0 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65  ize of each page
257e0 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
257f0 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20   int nPage;     
25800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25810 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
25820 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d  pages in pPage[]
25830 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73   */.  int mxPars
25840 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20  erStack;        
25850 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d          /* maxim
25860 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20  um depth of the 
25870 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a  parser stack */.
25880 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68    int sharedCach
25890 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20  eEnabled;       
258a0 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73      /* true if s
258b0 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
258c0 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33   enabled */.  u3
258d0 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20  2 szPma;        
258e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258f0 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65  /* Maximum Sorte
25900 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20  r PMA size */.  
25910 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67  /* The above mig
25920 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  ht be initialize
25930 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20  d to non-zero.  
25940 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65  The following ne
25950 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a  ed to always.  *
25960 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a  * initially be z
25970 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f  ero, however. */
25980 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20  .  int isInit;  
25990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259a0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
259b0 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  er initializatio
259c0 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a  n has finished *
259d0 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65  /.  int inProgre
259e0 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ss;             
259f0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68        /* True wh
25a00 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ile initializati
25a10 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a  on in progress *
25a20 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49  /.  int isMutexI
25a30 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
25a40 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
25a50 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20  ter mutexes are 
25a60 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
25a70 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69   int isMallocIni
25a80 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
25a90 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
25aa0 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
25ab0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
25ac0 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20  isPCacheInit;   
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25ae0 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
25af0 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
25b00 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49  d */.  int nRefI
25b10 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
25b20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
25b30 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70  er of users of p
25b40 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73  InitMutex */.  s
25b50 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49  qlite3_mutex *pI
25b60 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
25b70 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62   /* Mutex used b
25b80 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61  y sqlite3_initia
25b90 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  lize() */.  void
25ba0 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69   (*xLog)(void*,i
25bb0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
25bc0 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72   /* Function for
25bd0 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f   logging */.  vo
25be0 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20  id *pLogArg;    
25bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c00 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
25c10 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a  ment to xLog() *
25c20 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
25c30 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20  ENABLE_SQLLOG.  
25c40 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76  void(*xSqllog)(v
25c50 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
25c60 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
25c70 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67  .  void *pSqllog
25c80 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  Arg;.#endif.#ifd
25c90 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ef SQLITE_VDBE_C
25ca0 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65  OVERAGE.  /* The
25cb0 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62   following callb
25cc0 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c  ack (if not NULL
25cd0 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20  ) is invoked on 
25ce0 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e 63  every VDBE branc
25cf0 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  h.  ** operation
25d00 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62  .  Set the callb
25d10 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45  ack using SQLITE
25d20 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43  _TESTCTRL_VDBE_C
25d30 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20  OVERAGE..  */.  
25d40 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e  void (*xVdbeBran
25d50 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73 69 67 6e  ch)(void*,unsign
25d60 65 64 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65  ed iSrcLine,u8 e
25d70 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f  This,u8 eMx);  /
25d80 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  * Callback */.  
25d90 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63  void *pVdbeBranc
25da0 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
25db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
25dd0 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e   argument */.#en
25de0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
25df0 45 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52 49 41  E_ENABLE_DESERIA
25e00 4c 49 5a 45 0a 20 20 73 71 6c 69 74 65 33 5f 69  LIZE.  sqlite3_i
25e10 6e 74 36 34 20 6d 78 4d 65 6d 64 62 53 69 7a 65  nt64 mxMemdbSize
25e20 3b 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61  ;        /* Defa
25e30 75 6c 74 20 6d 61 78 20 6d 65 6d 64 62 20 73 69  ult max memdb si
25e40 7a 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ze */.#endif.#if
25e50 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
25e60 53 54 41 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78  STABLE.  int (*x
25e70 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e  TestCallback)(in
25e80 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  t);        /* In
25e90 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33  voked by sqlite3
25ea0 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65  FaultSim() */.#e
25eb0 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61  ndif.  int bLoca
25ec0 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20  ltimeFault;     
25ed0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
25ee0 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69   to fail localti
25ef0 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20  me() calls */.  
25f00 69 6e 74 20 62 49 6e 74 65 72 6e 61 6c 46 75 6e  int bInternalFun
25f10 63 74 69 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  ctions;         
25f20 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20 53 51    /* Internal SQ
25f30 4c 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  L functions are 
25f40 76 69 73 69 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  visible */.  int
25f50 20 69 4f 6e 63 65 52 65 73 65 74 54 68 72 65 73   iOnceResetThres
25f60 68 6f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 2f  hold;          /
25f70 2a 20 57 68 65 6e 20 74 6f 20 72 65 73 65 74 20  * When to reset 
25f80 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73  OP_Once counters
25f90 20 2a 2f 0a 20 20 75 33 32 20 73 7a 53 6f 72 74   */.  u32 szSort
25fa0 65 72 52 65 66 3b 20 20 20 20 20 20 20 20 20 20  erRef;          
25fb0 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 73          /* Min s
25fc0 69 7a 65 20 69 6e 20 62 79 74 65 73 20 74 6f 20  ize in bytes to 
25fd0 75 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20  use sorter-refs 
25fe0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
25ff0 74 20 69 50 72 6e 67 53 65 65 64 3b 20 20 20 20  t iPrngSeed;    
26000 20 20 20 20 20 20 20 2f 2a 20 41 6c 74 65 72 6e         /* Altern
26010 61 74 69 76 65 20 66 69 78 65 64 20 73 65 65 64  ative fixed seed
26020 20 66 6f 72 20 74 68 65 20 50 52 4e 47 20 2a 2f   for the PRNG */
26030 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
26040 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
26050 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29  side of assert()
26060 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69   statements to i
26070 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20  ndicate that.** 
26080 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e  the assert is on
26090 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65  ly valid on a we
260a0 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
260b0 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a  se.  Instead of:
260c0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
260d0 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e  t( X );.**.** On
260e0 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20  e writes:.**.** 
260f0 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c      assert( X ||
26100 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a   CORRUPT_DB );.*
26110 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20  *.** CORRUPT_DB 
26120 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e  is true during n
26130 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e  ormal operation.
26140 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65    CORRUPT_DB doe
26150 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a  s not indicate.*
26160 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62  * that the datab
26170 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c  ase is definitel
26180 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20  y corrupt, only 
26190 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65  that it might be
261a0 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72   corrupt..** For
261b0 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73   most test cases
261c0 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  , CORRUPT_DB is 
261d0 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69  set to false usi
261e0 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20  ng a special.** 
261f0 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
26200 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e  trol().  This en
26210 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73  ables assert() s
26220 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f  tatements to pro
26230 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61  ve.** things tha
26240 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75  t are always tru
26250 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65  e for well-forme
26260 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
26270 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f  #define CORRUPT_
26280 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66  DB  (sqlite3Conf
26290 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d  ig.neverCorrupt=
262a0 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65  =0)../*.** Conte
262b0 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65  xt pointer passe
262c0 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74  d down through t
262d0 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f  he tree-walk..*/
262e0 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b  .struct Walker {
262f0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
26300 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26320 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
26330 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70   */.  int (*xExp
26340 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  rCallback)(Walke
26350 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20  r*, Expr*);     
26360 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
26370 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
26380 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61   int (*xSelectCa
26390 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
263a0 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61  Select*);  /* Ca
263b0 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
263c0 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  Ts */.  void (*x
263d0 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29  SelectCallback2)
263e0 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
263f0 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c  );/* Second call
26400 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
26410 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72   */.  int walker
26420 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20  Depth;          
26430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26440 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62  /* Number of sub
26450 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20  queries */.  u8 
26460 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  eCode;          
26470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26480 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c         /* A smal
26490 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64  l processing cod
264a0 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20  e */.  union {  
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264d0 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66   /* Extra data f
264e0 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  or callback */. 
264f0 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a     NameContext *
26500 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20  pNC;            
26510 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26520 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a  Naming context *
26530 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20  /.    int n;    
26540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26560 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  /* A counter */.
26570 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20      int iCur;   
26580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
265a0 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   A cursor number
265b0 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20   */.    SrcList 
265c0 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20  *pSrcList;      
265d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265e0 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65    /* FROM clause
265f0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53   */.    struct S
26600 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75  rcCount *pSrcCou
26610 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
26620 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f    /* Counting co
26630 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20  lumn references 
26640 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43 43  */.    struct CC
26650 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e  urHint *pCCurHin
26660 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
26670 20 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65   /* Used by code
26680 43 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a  CursorHint() */.
26690 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20      int *aiCol; 
266a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
266c0 20 61 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e   array of column
266d0 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20   indexes */.    
266e0 73 74 72 75 63 74 20 49 64 78 43 6f 76 65 72 20  struct IdxCover 
266f0 2a 70 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20  *pIdxCover;     
26700 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65            /* Che
26710 63 6b 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76  ck for index cov
26720 65 72 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72  erage */.    str
26730 75 63 74 20 49 64 78 45 78 70 72 54 72 61 6e 73  uct IdxExprTrans
26740 20 2a 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20   *pIdxTrans;    
26750 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72         /* Conver
26760 74 20 69 64 78 65 64 20 65 78 70 72 20 74 6f 20  t idxed expr to 
26770 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78  column */.    Ex
26780 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
26790 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
267a0 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50          /* GROUP
267b0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
267c0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
267d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
267e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
267f0 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63  AVING to WHERE c
26800 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 20  lause ctx */.   
26810 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 52 65   struct WindowRe
26820 77 72 69 74 65 20 2a 70 52 65 77 72 69 74 65 3b  write *pRewrite;
26830 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69             /* Wi
26840 6e 64 6f 77 20 72 65 77 72 69 74 65 20 63 6f 6e  ndow rewrite con
26850 74 65 78 74 20 2a 2f 0a 20 20 20 20 73 74 72 75  text */.    stru
26860 63 74 20 57 68 65 72 65 43 6f 6e 73 74 20 2a 70  ct WhereConst *p
26870 43 6f 6e 73 74 3b 20 20 20 20 20 20 20 20 20 20  Const;          
26880 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63        /* WHERE c
26890 6c 61 75 73 65 20 63 6f 6e 73 74 61 6e 74 73 20  lause constants 
268a0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 52 65  */.    struct Re
268b0 6e 61 6d 65 43 74 78 20 2a 70 52 65 6e 61 6d 65  nameCtx *pRename
268c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
268d0 20 2f 2a 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d   /* RENAME COLUM
268e0 4e 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d  N context */.  }
268f0 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61   u;.};../* Forwa
26900 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
26910 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  */.int sqlite3Wa
26920 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  lkExpr(Walker*, 
26930 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
26940 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28  te3WalkExprList(
26950 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73  Walker*, ExprLis
26960 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
26970 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65  WalkSelect(Walke
26980 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
26990 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
269a0 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  ectExpr(Walker*,
269b0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
269c0 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
269d0 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65  From(Walker*, Se
269e0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
269f0 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28  te3ExprWalkNoop(
26a00 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
26a10 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
26a20 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65  ctWalkNoop(Walke
26a30 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
26a40 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  t sqlite3SelectW
26a50 61 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c  alkFail(Walker*,
26a60 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65   Select*);.#ifde
26a70 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76  f SQLITE_DEBUG.v
26a80 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
26a90 74 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c  tWalkAssert2(Wal
26aa0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
26ab0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
26ac0 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
26ad0 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
26ae0 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
26af0 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
26b00 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
26b10 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
26b20 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
26b30 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
26b40 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
26b50 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
26b60 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
26b70 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
26b80 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
26b90 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
26ba0 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
26bb0 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
26bc0 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
26bd0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
26be0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
26bf0 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
26c00 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
26c10 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
26c20 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
26c30 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
26c40 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
26c50 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
26c60 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
26c70 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
26c80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
26c90 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
26ca0 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
26cb0 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
26cc0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
26cd0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
26ce0 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
26cf0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
26d00 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26d20 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
26d30 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
26d40 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
26d50 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
26d60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
26d70 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
26d80 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
26d90 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
26da0 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
26db0 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
26dc0 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
26dd0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
26de0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
26df0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
26e00 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
26e10 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
26e20 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72  st char *zCteErr
26e30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
26e40 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
26e50 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
26e60 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
26e70 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  ];.};..#ifdef SQ
26e80 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
26e90 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
26ea0 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a  the TreeView obj
26eb0 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20  ect is used for 
26ec0 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e  printing the con
26ed0 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20  tent of.** data 
26ee0 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71  structures on sq
26ef0 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
26f00 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d  () using a tree-
26f10 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74  like view..*/.st
26f20 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a  ruct TreeView {.
26f30 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
26f40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
26f50 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20  ch level of the 
26f60 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a  tree we are on *
26f70 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30  /.  u8  bLine[10
26f80 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  0];         /* D
26f90 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20  raw vertical in 
26fa0 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e  column i if bLin
26fb0 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a  e[i] is true */.
26fc0 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
26fd0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  ITE_DEBUG */../*
26fe0 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20  .** This object 
26ff0 69 73 20 75 73 65 64 20 69 6e 20 76 61 72 69 6f  is used in vario
27000 75 73 20 77 61 79 73 2c 20 6d 6f 73 74 20 28 62  us ways, most (b
27010 75 74 20 6e 6f 74 20 61 6c 6c 29 20 72 65 6c 61  ut not all) rela
27020 74 65 64 20 74 6f 20 77 69 6e 64 6f 77 0a 2a 2a  ted to window.**
27030 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
27040 2a 20 20 20 28 31 29 20 41 20 73 69 6e 67 6c 65  *   (1) A single
27050 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
27060 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 61  s structure is a
27070 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 0a 2a  ttached to the.*
27080 2a 20 20 20 20 20 20 20 74 68 65 20 45 78 70 72  *       the Expr
27090 2e 79 2e 70 57 69 6e 20 66 69 65 6c 64 20 66 6f  .y.pWin field fo
270a0 72 20 65 61 63 68 20 77 69 6e 64 6f 77 20 66 75  r each window fu
270b0 6e 63 74 69 6f 6e 20 69 6e 20 61 6e 20 65 78 70  nction in an exp
270c0 72 65 73 73 69 6f 6e 20 74 72 65 65 2e 0a 2a 2a  ression tree..**
270d0 20 20 20 20 20 20 20 54 68 69 73 20 6f 62 6a 65         This obje
270e0 63 74 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 66  ct holds the inf
270f0 6f 72 6d 61 74 69 6f 6e 20 63 6f 6e 74 61 69 6e  ormation contain
27100 65 64 20 69 6e 20 74 68 65 20 4f 56 45 52 20 63  ed in the OVER c
27110 6c 61 75 73 65 2c 0a 2a 2a 20 20 20 20 20 20 20  lause,.**       
27120 70 6c 75 73 20 61 64 64 69 74 69 6f 6e 61 6c 20  plus additional 
27130 66 69 65 6c 64 73 20 75 73 65 64 20 64 75 72 69  fields used duri
27140 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69  ng code generati
27150 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 32 29 20  on..**.**   (2) 
27160 41 6c 6c 20 77 69 6e 64 6f 77 20 66 75 6e 63 74  All window funct
27170 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c 65  ions in a single
27180 20 53 45 4c 45 43 54 20 66 6f 72 6d 20 61 20 6c   SELECT form a l
27190 69 6e 6b 65 64 2d 6c 69 73 74 0a 2a 2a 20 20 20  inked-list.**   
271a0 20 20 20 20 61 74 74 61 63 68 65 64 20 74 6f 20      attached to 
271b0 53 65 6c 65 63 74 2e 70 57 69 6e 2e 20 20 54 68  Select.pWin.  Th
271c0 65 20 57 69 6e 64 6f 77 2e 70 46 75 6e 63 20 61  e Window.pFunc a
271d0 6e 64 20 57 69 6e 64 6f 77 2e 70 45 78 70 72 0a  nd Window.pExpr.
271e0 2a 2a 20 20 20 20 20 20 20 66 69 65 6c 64 73 20  **       fields 
271f0 70 6f 69 6e 74 20 62 61 63 6b 20 74 6f 20 74 68  point back to th
27200 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
27210 74 20 69 73 20 74 68 65 20 77 69 6e 64 6f 77 20  t is the window 
27220 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
27230 20 20 28 33 29 20 54 68 65 20 74 65 72 6d 73 20    (3) The terms 
27240 6f 66 20 74 68 65 20 57 49 4e 44 4f 57 20 63 6c  of the WINDOW cl
27250 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
27260 20 61 72 65 20 69 6e 73 74 61 6e 63 65 73 20 6f   are instances o
27270 66 20 74 68 69 73 0a 2a 2a 20 20 20 20 20 20 20  f this.**       
27280 6f 62 6a 65 63 74 20 6f 6e 20 61 20 6c 69 6e 6b  object on a link
27290 65 64 20 6c 69 73 74 20 61 74 74 61 63 68 65 64  ed list attached
272a0 20 74 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e 44   to Select.pWinD
272b0 65 66 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 34 29  efn..**.**   (4)
272c0 20 46 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   For an aggregat
272d0 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  e function with 
272e0 61 20 46 49 4c 54 45 52 20 63 6c 61 75 73 65 2c  a FILTER clause,
272f0 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
27300 20 20 20 20 20 20 6f 66 20 74 68 69 73 20 6f 62        of this ob
27310 6a 65 63 74 20 69 73 20 73 74 6f 72 65 64 20 69  ject is stored i
27320 6e 20 45 78 70 72 2e 79 2e 70 57 69 6e 20 77 69  n Expr.y.pWin wi
27330 74 68 20 65 46 72 6d 54 79 70 65 20 73 65 74 20  th eFrmType set 
27340 74 6f 0a 2a 2a 20 20 20 20 20 20 20 54 4b 5f 46  to.**       TK_F
27350 49 4c 54 45 52 2e 20 49 6e 20 74 68 69 73 20 63  ILTER. In this c
27360 61 73 65 20 74 68 65 20 6f 6e 6c 79 20 66 69 65  ase the only fie
27370 6c 64 20 75 73 65 64 20 69 73 20 57 69 6e 64 6f  ld used is Windo
27380 77 2e 70 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a  w.pFilter..**.**
27390 20 54 68 65 20 75 73 65 73 20 28 31 29 20 61 6e   The uses (1) an
273a0 64 20 28 32 29 20 61 72 65 20 72 65 61 6c 6c 79  d (2) are really
273b0 20 74 68 65 20 73 61 6d 65 20 57 69 6e 64 6f 77   the same Window
273c0 20 6f 62 6a 65 63 74 20 74 68 61 74 20 6a 75 73   object that jus
273d0 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74 6f 20  t happens.** to 
273e0 62 65 20 61 63 63 65 73 73 69 62 6c 65 20 69 6e  be accessible in
273f0 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74 20 77   two different w
27400 61 79 73 2e 20 20 55 73 65 20 63 61 73 65 20 28  ays.  Use case (
27410 33 29 20 61 72 65 20 73 65 70 61 72 61 74 65 20  3) are separate 
27420 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
27430 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63 68  ct Window {.  ch
27440 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
27450 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
27460 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62 65 20   window (may be 
27470 4e 55 4c 4c 29 20 2a 2f 0a 20 20 63 68 61 72 20  NULL) */.  char 
27480 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  *zBase;         
27490 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 62 61     /* Name of ba
274a0 73 65 20 77 69 6e 64 6f 77 20 66 6f 72 20 63 68  se window for ch
274b0 61 69 6e 69 6e 67 20 28 6d 61 79 20 62 65 20 4e  aining (may be N
274c0 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ULL) */.  ExprLi
274d0 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e 3b 20  st *pPartition; 
274e0 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e 20 42    /* PARTITION B
274f0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
27500 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
27510 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  ;     /* ORDER B
27520 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38  Y clause */.  u8
27530 20 65 46 72 6d 54 79 70 65 3b 20 20 20 20 20 20   eFrmType;      
27540 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41 4e 47        /* TK_RANG
27550 45 2c 20 54 4b 5f 47 52 4f 55 50 53 2c 20 54 4b  E, TK_GROUPS, TK
27560 5f 52 4f 57 53 2c 20 6f 72 20 30 20 2a 2f 0a 20  _ROWS, or 0 */. 
27570 20 75 38 20 65 53 74 61 72 74 3b 20 20 20 20 20   u8 eStart;     
27580 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f           /* UNBO
27590 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20  UNDED, CURRENT, 
275a0 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c  PRECEDING or FOL
275b0 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20 65  LOWING */.  u8 e
275c0 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
275d0 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44      /* UNBOUNDED
275e0 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45 43 45  , CURRENT, PRECE
275f0 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e  DING or FOLLOWIN
27600 47 20 2a 2f 0a 20 20 75 38 20 62 49 6d 70 6c 69  G */.  u8 bImpli
27610 63 69 74 46 72 61 6d 65 3b 20 20 20 20 20 20 2f  citFrame;      /
27620 2a 20 54 72 75 65 20 69 66 20 66 72 61 6d 65 20  * True if frame 
27630 77 61 73 20 69 6d 70 6c 69 63 69 74 6c 79 20 73  was implicitly s
27640 70 65 63 69 66 69 65 64 20 2a 2f 0a 20 20 75 38  pecified */.  u8
27650 20 65 45 78 63 6c 75 64 65 3b 20 20 20 20 20 20   eExclude;      
27660 20 20 20 20 20 20 2f 2a 20 54 4b 5f 4e 4f 2c 20        /* TK_NO, 
27670 54 4b 5f 43 55 52 52 45 4e 54 2c 20 54 4b 5f 54  TK_CURRENT, TK_T
27680 49 45 53 2c 20 54 4b 5f 47 52 4f 55 50 2c 20 6f  IES, TK_GROUP, o
27690 72 20 30 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  r 0 */.  Expr *p
276a0 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
276b0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66   /* Expression f
276c0 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45 43 45  or "<expr> PRECE
276d0 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72 20  DING" */.  Expr 
276e0 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
276f0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
27700 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c   for "<expr> FOL
27710 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e  LOWING" */.  Win
27720 64 6f 77 20 2a 2a 70 70 54 68 69 73 3b 20 20 20  dow **ppThis;   
27730 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
27740 74 6f 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  to this object i
27750 6e 20 53 65 6c 65 63 74 2e 70 57 69 6e 20 6c 69  n Select.pWin li
27760 73 74 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a  st */.  Window *
27770 70 4e 65 78 74 57 69 6e 3b 20 20 20 20 20 20 20  pNextWin;       
27780 2f 2a 20 4e 65 78 74 20 77 69 6e 64 6f 77 20 66  /* Next window f
27790 75 6e 63 74 69 6f 6e 20 62 65 6c 6f 6e 67 69 6e  unction belongin
277a0 67 20 74 6f 20 74 68 69 73 20 53 45 4c 45 43 54  g to this SELECT
277b0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 46 69 6c   */.  Expr *pFil
277c0 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ter;          /*
277d0 20 54 68 65 20 46 49 4c 54 45 52 20 65 78 70 72   The FILTER expr
277e0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 46 75 6e 63  ession */.  Func
277f0 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
27800 20 20 20 20 2f 2a 20 54 68 65 20 66 75 6e 63 74      /* The funct
27810 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 45 70  ion */.  int iEp
27820 68 43 73 72 3b 20 20 20 20 20 20 20 20 20 20 20  hCsr;           
27830 20 2f 2a 20 50 61 72 74 69 74 69 6f 6e 20 62 75   /* Partition bu
27840 66 66 65 72 20 6f 72 20 50 65 65 72 20 62 75 66  ffer or Peer buf
27850 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  fer */.  int reg
27860 41 63 63 75 6d 3b 20 20 20 20 20 20 20 20 20 20  Accum;          
27870 20 2f 2a 20 41 63 63 75 6d 75 6c 61 74 6f 72 20   /* Accumulator 
27880 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 65 73 75  */.  int regResu
27890 6c 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  lt;          /* 
278a0 49 6e 74 65 72 69 6d 20 72 65 73 75 6c 74 20 2a  Interim result *
278b0 2f 0a 20 20 69 6e 74 20 63 73 72 41 70 70 3b 20  /.  int csrApp; 
278c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
278d0 75 6e 63 74 69 6f 6e 20 63 75 72 73 6f 72 20 28  unction cursor (
278e0 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29  used by min/max)
278f0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41 70 70   */.  int regApp
27900 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
27910 20 46 75 6e 63 74 69 6f 6e 20 72 65 67 69 73 74   Function regist
27920 65 72 20 28 61 6c 73 6f 20 75 73 65 64 20 62 79  er (also used by
27930 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69   min/max) */.  i
27940 6e 74 20 72 65 67 50 61 72 74 3b 20 20 20 20 20  nt regPart;     
27950 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
27960 6f 66 20 72 65 67 69 73 74 65 72 73 20 66 6f 72  of registers for
27970 20 50 41 52 54 49 54 49 4f 4e 20 42 59 20 76 61   PARTITION BY va
27980 6c 75 65 73 20 2a 2f 0a 20 20 45 78 70 72 20 2a  lues */.  Expr *
27990 70 4f 77 6e 65 72 3b 20 20 20 20 20 20 20 20 20  pOwner;         
279a0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
279b0 6f 62 6a 65 63 74 20 74 68 69 73 20 77 69 6e 64  object this wind
279c0 6f 77 20 69 73 20 61 74 74 61 63 68 65 64 20 74  ow is attached t
279d0 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66 66  o */.  int nBuff
279e0 65 72 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f  erCol;         /
279f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
27a00 6d 6e 73 20 69 6e 20 62 75 66 66 65 72 20 74 61  mns in buffer ta
27a10 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72  ble */.  int iAr
27a20 67 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  gCol;           
27a30 20 2f 2a 20 4f 66 66 73 65 74 20 6f 66 20 66 69   /* Offset of fi
27a40 72 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f 72  rst argument for
27a50 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 2a   this function *
27a60 2f 0a 20 20 69 6e 74 20 72 65 67 4f 6e 65 3b 20  /.  int regOne; 
27a70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
27a80 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 69  egister containi
27a90 6e 67 20 63 6f 6e 73 74 61 6e 74 20 76 61 6c 75  ng constant valu
27aa0 65 20 31 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  e 1 */.  int reg
27ab0 53 74 61 72 74 52 6f 77 69 64 3b 0a 20 20 69 6e  StartRowid;.  in
27ac0 74 20 72 65 67 45 6e 64 52 6f 77 69 64 3b 0a 20  t regEndRowid;. 
27ad0 20 75 38 20 62 45 78 70 72 41 72 67 73 3b 20 20   u8 bExprArgs;  
27ae0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 65           /* Defe
27af0 72 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20  r evaluation of 
27b00 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20  window function 
27b10 61 72 67 75 6d 65 6e 74 73 0a 20 20 20 20 20 20  arguments.      
27b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b30 20 20 20 20 2a 2a 20 64 75 65 20 74 6f 20 74 68      ** due to th
27b40 65 20 53 51 4c 49 54 45 5f 53 55 42 54 59 50 45  e SQLITE_SUBTYPE
27b50 20 66 6c 61 67 20 2a 2f 0a 7d 3b 0a 0a 23 69 66   flag */.};..#if
27b60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27b70 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64  _WINDOWFUNC.void
27b80 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 65   sqlite3WindowDe
27b90 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 57  lete(sqlite3*, W
27ba0 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71  indow*);.void sq
27bb0 6c 69 74 65 33 57 69 6e 64 6f 77 55 6e 6c 69 6e  lite3WindowUnlin
27bc0 6b 46 72 6f 6d 53 65 6c 65 63 74 28 57 69 6e 64  kFromSelect(Wind
27bd0 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ow*);.void sqlit
27be0 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65  e3WindowListDele
27bf0 74 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  te(sqlite3 *db, 
27c00 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64  Window *p);.Wind
27c10 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
27c20 77 41 6c 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69  wAlloc(Parse*, i
27c30 6e 74 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  nt, int, Expr*, 
27c40 69 6e 74 20 2c 20 45 78 70 72 2a 2c 20 75 38 29  int , Expr*, u8)
27c50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
27c60 6e 64 6f 77 41 74 74 61 63 68 28 50 61 72 73 65  ndowAttach(Parse
27c70 2a 2c 20 45 78 70 72 2a 2c 20 57 69 6e 64 6f 77  *, Expr*, Window
27c80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27c90 57 69 6e 64 6f 77 4c 69 6e 6b 28 53 65 6c 65 63  WindowLink(Selec
27ca0 74 20 2a 70 53 65 6c 2c 20 57 69 6e 64 6f 77 20  t *pSel, Window 
27cb0 2a 70 57 69 6e 29 3b 0a 69 6e 74 20 73 71 6c 69  *pWin);.int sqli
27cc0 74 65 33 57 69 6e 64 6f 77 43 6f 6d 70 61 72 65  te3WindowCompare
27cd0 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a  (Parse*, Window*
27ce0 2c 20 57 69 6e 64 6f 77 2a 2c 20 69 6e 74 29 3b  , Window*, int);
27cf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
27d00 64 6f 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73  dowCodeInit(Pars
27d10 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  e*, Window*);.vo
27d20 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
27d30 43 6f 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c  CodeStep(Parse*,
27d40 20 53 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49   Select*, WhereI
27d50 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  nfo*, int, int);
27d60 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64  .int sqlite3Wind
27d70 6f 77 52 65 77 72 69 74 65 28 50 61 72 73 65 2a  owRewrite(Parse*
27d80 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
27d90 73 71 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62  sqlite3ExpandSub
27da0 71 75 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74  query(Parse*, st
27db0 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
27dc0 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
27dd0 33 57 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61  3WindowUpdate(Pa
27de0 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57  rse*, Window*, W
27df0 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a  indow*, FuncDef*
27e00 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
27e10 65 33 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69  e3WindowDup(sqli
27e20 74 65 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70  te3 *db, Expr *p
27e30 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70  Owner, Window *p
27e40 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
27e50 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28  e3WindowListDup(
27e60 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
27e70 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71  dow *p);.void sq
27e80 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74  lite3WindowFunct
27e90 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
27ea0 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 68   sqlite3WindowCh
27eb0 61 69 6e 28 50 61 72 73 65 2a 2c 20 57 69 6e 64  ain(Parse*, Wind
27ec0 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 57  ow*, Window*);.W
27ed0 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69  indow *sqlite3Wi
27ee0 6e 64 6f 77 41 73 73 65 6d 62 6c 65 28 50 61 72  ndowAssemble(Par
27ef0 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 45 78  se*, Window*, Ex
27f00 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
27f10 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 23 65 6c  t*, Token*);.#el
27f20 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
27f30 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28  te3WindowDelete(
27f40 61 2c 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71  a,b).# define sq
27f50 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74  lite3WindowFunct
27f60 69 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20  ions().# define 
27f70 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74  sqlite3WindowAtt
27f80 61 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69  ach(a,b,c).#endi
27f90 66 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  f../*.** Assumin
27fa0 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
27fb0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
27fc0 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
27fd0 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
27fe0 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
27ff0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
28000 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
28010 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
28020 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
28030 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
28040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28050 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
28060 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
28070 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
28080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
28090 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
280a0 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
280b0 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
280c0 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
280d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28100 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
28110 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
28120 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
28130 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
28140 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
28150 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
28160 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
28170 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
28180 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
28190 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
281a0 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
281b0 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
281c0 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
281d0 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
281e0 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
281f0 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
28200 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
28210 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
28220 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
28230 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
28240 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70  /.int sqlite3Rep
28250 6f 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72  ortError(int iEr
28260 72 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63  r, int lineno, c
28270 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
28280 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
28290 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b  rruptError(int);
282a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75  .int sqlite3Misu
282b0 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  seError(int);.in
282c0 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  t sqlite3Cantope
282d0 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65  nError(int);.#de
282e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
282f0 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  UPT_BKPT sqlite3
28300 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
28310 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
28320 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
28330 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  T sqlite3MisuseE
28340 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
28350 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41  define SQLITE_CA
28360 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69  NTOPEN_BKPT sqli
28370 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
28380 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65  (__LINE__).#ifde
28390 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
283a0 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65   int sqlite3Nome
283b0 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69  mError(int);.  i
283c0 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e  nt sqlite3Ioerrn
283d0 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a  omemError(int);.
283e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72    int sqlite3Cor
283f0 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e  ruptPgnoError(in
28400 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e  t,Pgno);.# defin
28410 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
28420 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  KPT sqlite3Nomem
28430 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
28440 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
28450 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
28460 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d   sqlite3Ioerrnom
28470 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
28480 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
28490 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50  E_CORRUPT_PGNO(P
284a0 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  ) sqlite3Corrupt
284b0 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  PgnoError(__LINE
284c0 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20  __,(P)).#else.# 
284d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
284e0 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
284f0 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53  NOMEM.# define S
28500 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
28510 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f  M_BKPT SQLITE_IO
28520 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69  ERR_NOMEM.# defi
28530 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
28540 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65  T_PGNO(P) sqlite
28550 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f  3CorruptError(__
28560 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a  LINE__).#endif..
28570 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46  /*.** FTS3 and F
28580 54 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65  TS4 both require
28590 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
285a0 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65  upport.*/.#if de
285b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
285c0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
285d0 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
285e0 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64  NABLE_FTS3.# und
285f0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
28600 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _FTS4.#endif../*
28610 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c  .** FTS4 is real
28620 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20  ly an extension 
28630 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73  for FTS3.  It is
28640 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74   enabled using t
28650 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  he.** SQLITE_ENA
28660 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20  BLE_FTS3 macro. 
28670 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f   But to avoid co
28680 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20  nfusion we also 
28690 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49  call.** the SQLI
286a0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d  TE_ENABLE_FTS4 m
286b0 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73  acro to serve as
286c0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51   an alias for SQ
286d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
286e0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
286f0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
28700 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64  TS4) && !defined
28710 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
28720 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TS3).# define SQ
28730 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
28740 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
28750 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
28760 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
28770 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
28780 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
28790 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
287a0 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
287b0 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
287c0 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
287d0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
287e0 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
287f0 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
28800 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
28810 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
28820 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
28830 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
28840 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
28850 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
28860 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
28870 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
28880 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
28890 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
288a0 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
288b0 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
288c0 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
288d0 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
288e0 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
288f0 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
28900 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
28910 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
28920 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
28930 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
28940 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
28950 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
28960 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
28970 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
28980 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
28990 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
289a0 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
289b0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
289c0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
289d0 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
289e0 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
289f0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
28a00 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
28a10 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
28a20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
28a30 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
28a40 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
28a50 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
28a60 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
28a70 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
28a80 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
28a90 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
28aa0 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
28ab0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
28ac0 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
28ad0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
28ae0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
28af0 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
28b00 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
28b10 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
28b20 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
28b30 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65   char)(x)]).# de
28b40 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75  fine sqlite3Isqu
28b50 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ote(x)   (sqlite
28b60 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
28b70 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
28b80 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  80).#else.# defi
28b90 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
28ba0 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28  r(x)   toupper((
28bb0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
28bc0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
28bd0 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
28be0 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65  isspace((unsigne
28bf0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
28c00 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
28c10 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d  num(x)   isalnum
28c20 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
28c30 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
28c40 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
28c50 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67    isalpha((unsig
28c60 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
28c70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
28c80 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67  digit(x)   isdig
28c90 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
28ca0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
28cb0 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
28cc0 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e  x)  isxdigit((un
28cd0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
28ce0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28cf0 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f  3Tolower(x)   to
28d00 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20  lower((unsigned 
28d10 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
28d20 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74  ne sqlite3Isquot
28d30 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27  e(x)   ((x)=='"'
28d40 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29  ||(x)=='\''||(x)
28d50 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29  =='['||(x)=='`')
28d60 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
28d70 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b  te3IsIdChar(u8);
28d80 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c  ../*.** Internal
28d90 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74   function protot
28da0 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ypes.*/.int sqli
28db0 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74  te3StrICmp(const
28dc0 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
28dd0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
28de0 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63  Strlen30(const c
28df0 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73  har*);.#define s
28e00 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e  qlite3Strlen30NN
28e10 28 43 29 20 28 73 74 72 6c 65 6e 28 43 29 26 30  (C) (strlen(C)&0
28e20 78 33 66 66 66 66 66 66 66 29 0a 63 68 61 72 20  x3fffffff).char 
28e30 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79  *sqlite3ColumnTy
28e40 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a  pe(Column*,char*
28e50 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
28e60 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
28e70 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
28e80 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
28e90 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
28ea0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
28eb0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
28ec0 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b  ite3Malloc(u64);
28ed0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
28ee0 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76  llocZero(u64);.v
28ef0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
28f00 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
28f10 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
28f20 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
28f30 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  w(sqlite3*, u64)
28f40 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
28f50 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c  bMallocRawNN(sql
28f60 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61  ite3*, u64);.cha
28f70 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44  r *sqlite3DbStrD
28f80 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
28f90 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
28fa0 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70  sqlite3DbStrNDup
28fb0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
28fc0 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61  char*, u64);.cha
28fd0 72 20 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e  r *sqlite3DbSpan
28fe0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
28ff0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
29000 68 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  har*);.void *sql
29010 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64  ite3Realloc(void
29020 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
29030 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
29040 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c  rFree(sqlite3 *,
29050 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
29060 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
29070 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c  alloc(sqlite3 *,
29080 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
29090 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
290a0 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
290b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
290c0 44 62 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33  DbFreeNN(sqlite3
290d0 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *, void*);.int s
290e0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
290f0 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  (void*);.int sql
29100 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
29110 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
29120 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
29130 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  PageMalloc(int);
29140 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67  .void sqlite3Pag
29150 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  eFree(void*);.vo
29160 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74  id sqlite3MemSet
29170 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23  Default(void);.#
29180 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
29190 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71  TESTABLE.void sq
291a0 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f  lite3BenignMallo
291b0 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28  cHooks(void (*)(
291c0 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28  void), void (*)(
291d0 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69  void));.#endif.i
291e0 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65  nt sqlite3HeapNe
291f0 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a  arlyFull(void);.
29200 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d  ./*.** On system
29210 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61  s with ample sta
29220 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61  ck space and tha
29230 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61  t support alloca
29240 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20  (), make.** use 
29250 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f  of alloca() to o
29260 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20  btain space for 
29270 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20  large automatic 
29280 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66  objects.  By def
29290 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20  ault,.** obtain 
292a0 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f  space from mallo
292b0 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  c()..**.** The a
292c0 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20  lloca() routine 
292d0 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55  never returns NU
292e0 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  LL.  This will c
292f0 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a  ause code paths.
29300 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74  ** that deal wit
29310 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  h sqlite3StackAl
29320 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74  loc() failures t
29330 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65  o be unreachable
29340 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
29350 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20  TE_USE_ALLOCA.# 
29360 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
29370 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
29380 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64     alloca(N).# d
29390 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
293a0 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
293b0 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28    memset(alloca(
293c0 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69  N), 0, N).# defi
293d0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
293e0 72 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23  ree(D,P).#else.#
293f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
29400 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
29410 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  )   sqlite3DbMal
29420 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65  locRaw(D,N).# de
29430 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
29440 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
29450 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
29460 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69  Zero(D,N).# defi
29470 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
29480 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73  ree(D,P)       s
29490 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50  qlite3DbFree(D,P
294a0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20  ).#endif../* Do 
294b0 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d  not allow both M
294c0 45 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59  EMSYS5 and MEMSY
294d0 53 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64  S3 to be defined
294e0 20 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74   together.  If t
294f0 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61  hey.** are, disa
29500 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23  ble MEMSYS3.*/.#
29510 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
29520 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
29530 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
29540 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
29550 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
29560 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45  );.#undef SQLITE
29570 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
29580 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
29590 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
295a0 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
295b0 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
295c0 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
295d0 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
295e0 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
295f0 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20  TE_MUTEX_OMIT.  
29600 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
29610 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
29620 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78  ite3DefaultMutex
29630 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
29640 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
29650 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f  const *sqlite3No
29660 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  opMutex(void);. 
29670 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
29680 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
29690 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  c(int);.  int sq
296a0 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76  lite3MutexInit(v
296b0 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
296c0 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64  te3MutexEnd(void
296d0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  );.#endif.#if !d
296e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
296f0 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65  TEX_OMIT) && !de
29700 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
29710 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20  EX_NOOP).  void 
29720 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72  sqlite3MemoryBar
29730 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73  rier(void);.#els
29740 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
29750 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
29760 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65  ).#endif..sqlite
29770 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
29780 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b  tatusValue(int);
29790 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
297a0 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b  tusUp(int, int);
297b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
297c0 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74  tusDown(int, int
297d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
297e0 74 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69  tatusHighwater(i
297f0 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
29800 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73  lite3LookasideUs
29810 65 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a  ed(sqlite3*,int*
29820 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f  );../* Access to
29830 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79   mutexes used by
29840 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28   sqlite3_status(
29850 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74  ) */.sqlite3_mut
29860 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68  ex *sqlite3Pcach
29870 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73  e1Mutex(void);.s
29880 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
29890 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78  lite3MallocMutex
298a0 28 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66  (void);..#if def
298b0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
298c0 4c 45 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44  LE_MULTITHREADED
298d0 5f 43 48 45 43 4b 53 29 20 26 26 20 21 64 65 66  _CHECKS) && !def
298e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
298f0 58 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c  X_OMIT).void sql
29900 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43  ite3MutexWarnOnC
29910 6f 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65  ontention(sqlite
29920 33 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65  3_mutex*);.#else
29930 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29940 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74  3MutexWarnOnCont
29950 65 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66  ention(x).#endif
29960 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
29970 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
29980 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 45 58  OINT.# define EX
29990 50 37 35 34 20 28 28 28 75 36 34 29 30 78 37 66  P754 (((u64)0x7f
299a0 66 29 3c 3c 35 32 29 0a 23 20 64 65 66 69 6e 65  f)<<52).# define
299b0 20 4d 41 4e 37 35 34 20 28 28 28 28 75 36 34 29   MAN754 ((((u64)
299c0 31 29 3c 3c 35 32 29 2d 31 29 0a 23 20 64 65 66  1)<<52)-1).# def
299d0 69 6e 65 20 49 73 4e 61 4e 28 58 29 20 28 28 28  ine IsNaN(X) (((
299e0 58 29 26 45 58 50 37 35 34 29 3d 3d 45 58 50 37  X)&EXP754)==EXP7
299f0 35 34 20 26 26 20 28 28 58 29 26 4d 41 4e 37 35  54 && ((X)&MAN75
29a00 34 29 21 3d 30 29 0a 20 20 69 6e 74 20 73 71 6c  4)!=0).  int sql
29a10 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65  ite3IsNaN(double
29a20 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29a30 65 20 49 73 4e 61 4e 28 58 29 20 20 20 20 20 20  e IsNaN(X)      
29a40 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71     0.# define sq
29a50 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
29a60 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
29a70 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
29a80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
29a90 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
29aa0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
29ab0 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
29ac0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
29ad0 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
29ae0 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
29af0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
29b00 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
29b10 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
29b20 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
29b30 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
29b40 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
29b50 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
29b60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29b70 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
29b80 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
29b90 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
29ba0 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
29bb0 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
29bc0 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72  lues */.};..char
29bd0 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66   *sqlite3MPrintf
29be0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
29bf0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
29c00 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e  r *sqlite3VMPrin
29c10 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
29c20 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
29c30 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
29c40 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
29c50 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
29c60 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20  AVE_OS_TRACE).  
29c70 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
29c80 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
29c90 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
29ca0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
29cb0 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
29cc0 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
29cd0 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
29ce0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
29cf0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
29d00 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73  _DEBUG).  void s
29d10 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
29d20 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  pr(TreeView*, co
29d30 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  nst Expr*, u8);.
29d40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
29d50 65 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69  eeViewBareExprLi
29d60 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
29d70 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  nst ExprList*, c
29d80 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
29d90 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
29da0 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65  iewExprList(Tree
29db0 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
29dc0 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73  rList*, u8, cons
29dd0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
29de0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
29df0 53 72 63 4c 69 73 74 28 54 72 65 65 56 69 65 77  SrcList(TreeView
29e00 2a 2c 20 63 6f 6e 73 74 20 53 72 63 4c 69 73 74  *, const SrcList
29e10 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
29e20 65 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74  e3TreeViewSelect
29e30 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
29e40 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a  t Select*, u8);.
29e50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
29e60 65 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56  eeViewWith(TreeV
29e70 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68  iew*, const With
29e80 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  *, u8);.#ifndef 
29e90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
29ea0 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64 20 73 71  OWFUNC.  void sq
29eb0 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69 6e  lite3TreeViewWin
29ec0 64 6f 77 28 54 72 65 65 56 69 65 77 2a 2c 20 63  dow(TreeView*, c
29ed0 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38  onst Window*, u8
29ee0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29ef0 33 54 72 65 65 56 69 65 77 57 69 6e 46 75 6e 63  3TreeViewWinFunc
29f00 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
29f10 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a  t Window*, u8);.
29f20 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a  #endif.#endif...
29f30 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
29f40 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
29f50 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
29f60 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
29f70 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
29f80 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
29f90 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74   ...);.int sqlit
29fa0 65 33 45 72 72 6f 72 54 6f 50 61 72 73 65 72 28  e3ErrorToParser(
29fb0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
29fc0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f  oid sqlite3Dequo
29fd0 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  te(char*);.void 
29fe0 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 45 78  sqlite3DequoteEx
29ff0 70 72 28 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  pr(Expr*);.void 
2a000 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74  sqlite3TokenInit
2a010 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a  (Token*,char*);.
2a020 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  int sqlite3Keywo
2a030 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73  rdCode(const uns
2a040 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74  igned char*, int
2a050 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
2a060 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
2a070 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
2a080 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
2a090 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28  te3FinishCoding(
2a0a0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
2a0b0 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50  ite3GetTempReg(P
2a0c0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
2a0d0 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
2a0e0 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  eg(Parse*,int);.
2a0f0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
2a100 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
2a110 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2a120 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67  3ReleaseTempRang
2a130 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
2a140 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2a150 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65  learTempRegCache
2a160 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66  (Parse*);.#ifdef
2a170 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
2a180 74 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73  t sqlite3NoTemps
2a190 49 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  InRange(Parse*,i
2a1a0 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  nt,int);.#endif.
2a1b0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2a1c0 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
2a1d0 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
2a1e0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
2a1f0 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
2a200 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
2a210 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a220 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
2a230 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
2a240 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
2a250 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
2a260 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
2a270 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
2a280 6f 69 64 20 73 71 6c 69 74 65 33 50 45 78 70 72  oid sqlite3PExpr
2a290 41 64 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a  AddSelect(Parse*
2a2a0 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a  , Expr*, Select*
2a2b0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2a2c0 45 78 70 72 41 6e 64 28 50 61 72 73 65 2a 2c 45  ExprAnd(Parse*,E
2a2d0 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
2a2e0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53  pr *sqlite3ExprS
2a2f0 69 6d 70 6c 69 66 69 65 64 41 6e 64 4f 72 28 45  implifiedAndOr(E
2a300 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
2a310 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e  ite3ExprFunction
2a320 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
2a330 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
2a340 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a350 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72  rAssignVarNumber
2a360 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2a370 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
2a380 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c  e3ExprDelete(sql
2a390 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  ite3*, Expr*);.v
2a3a0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 55  oid sqlite3ExprU
2a3b0 6e 6d 61 70 41 6e 64 44 65 6c 65 74 65 28 50 61  nmapAndDelete(Pa
2a3c0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  rse*, Expr*);.Ex
2a3d0 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
2a3e0 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61  xprListAppend(Pa
2a3f0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
2a400 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
2a410 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
2a420 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61 72  AppendVector(Par
2a430 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64  se*,ExprList*,Id
2a440 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  List*,Expr*);.vo
2a450 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
2a460 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45  stSetSortOrder(E
2a470 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
2a480 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a490 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50  xprListSetName(P
2a4a0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
2a4b0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
2a4c0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
2a4d0 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c  tSetSpan(Parse*,
2a4e0 45 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  ExprList*,const 
2a4f0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2a500 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a510 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
2a520 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
2a530 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  t*);.u32 sqlite3
2a540 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f  ExprListFlags(co
2a550 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nst ExprList*);.
2a560 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
2a570 48 61 73 44 75 70 6c 69 63 61 74 65 52 6f 6f 74  HasDuplicateRoot
2a580 50 61 67 65 28 49 6e 64 65 78 2a 29 3b 0a 69 6e  Page(Index*);.in
2a590 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71  t sqlite3Init(sq
2a5a0 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b  lite3*, char**);
2a5b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
2a5c0 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20  Callback(void*, 
2a5d0 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61  int, char**, cha
2a5e0 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r**);.int sqlite
2a5f0 33 49 6e 69 74 4f 6e 65 28 73 71 6c 69 74 65 33  3InitOne(sqlite3
2a600 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
2a610 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
2a620 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c  e3Pragma(Parse*,
2a630 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
2a640 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64  ken*,int);.#ifnd
2a650 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2a660 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75  IRTUALTABLE.Modu
2a670 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61 67 6d  le *sqlite3Pragm
2a680 61 56 74 61 62 52 65 67 69 73 74 65 72 28 73 71  aVtabRegister(sq
2a690 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2a6a0 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69  r *zName);.#endi
2a6b0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  f.void sqlite3Re
2a6c0 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
2a6d0 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65  onnection(sqlite
2a6e0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
2a6f0 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
2a700 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2a710 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  oid sqlite3Colla
2a720 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
2a730 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
2a740 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
2a750 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71  ternalChanges(sq
2a760 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2a770 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d  lite3DeleteColum
2a780 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c  nNames(sqlite3*,
2a790 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
2a7a0 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45  ite3ColumnsFromE
2a7b0 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45  xprList(Parse*,E
2a7c0 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f  xprList*,i16*,Co
2a7d0 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lumn**);.void sq
2a7e0 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f  lite3SelectAddCo
2a7f0 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61  lumnTypeAndColla
2a800 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
2a810 65 2a 2c 53 65 6c 65 63 74 2a 2c 63 68 61 72 29  e*,Select*,char)
2a820 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
2a830 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63  ResultSetOfSelec
2a840 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a  t(Parse*,Select*
2a850 2c 63 68 61 72 29 3b 0a 76 6f 69 64 20 73 71 6c  ,char);.void sql
2a860 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61  ite3OpenMasterTa
2a870 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ble(Parse *, int
2a880 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
2a890 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  3PrimaryKeyIndex
2a8a0 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71  (Table*);.i16 sq
2a8b0 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64  lite3ColumnOfInd
2a8c0 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b  ex(Index*, i16);
2a8d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
2a8e0 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  rtTable(Parse*,T
2a8f0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
2a900 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23  ,int,int,int);.#
2a910 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
2a920 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a  _HIDDEN_COLUMNS.
2a930 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2a940 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72  lumnPropertiesFr
2a950 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43  omName(Table*, C
2a960 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23  olumn*);.#else.#
2a970 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2a980 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46  olumnPropertiesF
2a990 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20  romName(T,C) /* 
2a9a0 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a  no-op */.#endif.
2a9b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
2a9c0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b  olumn(Parse*,Tok
2a9d0 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  en*,Token*);.voi
2a9e0 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e  d sqlite3AddNotN
2a9f0 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ull(Parse*, int)
2aa00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
2aa10 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73  dPrimaryKey(Pars
2aa20 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
2aa30 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
2aa40 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68  oid sqlite3AddCh
2aa50 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  eckConstraint(Pa
2aa60 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
2aa70 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66  id sqlite3AddDef
2aa80 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a  aultValue(Parse*
2aa90 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
2aaa0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2aab0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
2aac0 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73  CollateType(Pars
2aad0 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
2aae0 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c  d sqlite3EndTabl
2aaf0 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
2ab00 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74  Token*,u8,Select
2ab10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  *);.int sqlite3P
2ab20 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68  arseUri(const ch
2ab30 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
2ab40 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20  unsigned int*,. 
2ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab60 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a     sqlite3_vfs**
2ab70 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29  ,char**,char **)
2ab80 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2ab90 48 41 53 5f 43 4f 44 45 43 0a 20 20 69 6e 74 20  HAS_CODEC.  int 
2aba0 73 71 6c 69 74 65 33 43 6f 64 65 63 51 75 65 72  sqlite3CodecQuer
2abb0 79 50 61 72 61 6d 65 74 65 72 73 28 73 71 6c 69  yParameters(sqli
2abc0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
2abd0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  ,const char*);.#
2abe0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2abf0 6c 69 74 65 33 43 6f 64 65 63 51 75 65 72 79 50  lite3CodecQueryP
2ac00 61 72 61 6d 65 74 65 72 73 28 41 2c 42 2c 43 29  arameters(A,B,C)
2ac10 20 30 0a 23 65 6e 64 69 66 0a 42 74 72 65 65 20   0.#endif.Btree 
2ac20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f  *sqlite3DbNameTo
2ac30 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63  Btree(sqlite3*,c
2ac40 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69  onst char*);..#i
2ac50 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  fdef SQLITE_UNTE
2ac60 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20  STABLE.# define 
2ac70 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
2ac80 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c  X) SQLITE_OK.#el
2ac90 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  se.  int sqlite3
2aca0 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23  FaultSim(int);.#
2acb0 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73  endif..Bitvec *s
2acc0 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61  qlite3BitvecCrea
2acd0 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  te(u32);.int sql
2ace0 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42  ite3BitvecTest(B
2acf0 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
2ad00 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
2ad10 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65  estNotNull(Bitve
2ad20 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
2ad30 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42  lite3BitvecSet(B
2ad40 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f  itvec*, u32);.vo
2ad50 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
2ad60 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75  Clear(Bitvec*, u
2ad70 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  32, void*);.void
2ad80 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65   sqlite3BitvecDe
2ad90 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a  stroy(Bitvec*);.
2ada0 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65  u32 sqlite3Bitve
2adb0 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a  cSize(Bitvec*);.
2adc0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
2add0 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73 71  NTESTABLE.int sq
2ade0 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74  lite3BitvecBuilt
2adf0 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29  inTest(int,int*)
2ae00 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74  ;.#endif..RowSet
2ae10 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49   *sqlite3RowSetI
2ae20 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  nit(sqlite3*);.v
2ae30 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
2ae40 74 44 65 6c 65 74 65 28 76 6f 69 64 2a 29 3b 0a  tDelete(void*);.
2ae50 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
2ae60 65 74 43 6c 65 61 72 28 76 6f 69 64 2a 29 3b 0a  etClear(void*);.
2ae70 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
2ae80 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a  etInsert(RowSet*
2ae90 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
2aea0 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f  te3RowSetTest(Ro
2aeb0 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63  wSet*, int iBatc
2aec0 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  h, i64);.int sql
2aed0 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52  ite3RowSetNext(R
2aee0 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a  owSet*, i64*);..
2aef0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
2af00 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f  teView(Parse*,To
2af10 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
2af20 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  n*,ExprList*,Sel
2af30 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a  ect*,int,int);..
2af40 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2af50 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c  ITE_OMIT_VIEW) |
2af60 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  | !defined(SQLIT
2af70 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2af80 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLE).  int sqlit
2af90 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
2afa0 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ames(Parse*,Tabl
2afb0 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
2afc0 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47  ine sqlite3ViewG
2afd0 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c  etColumnNames(A,
2afe0 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66  B) 0.#endif..#if
2aff0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
2b000 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71  CHED>30.  int sq
2b010 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
2b020 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e  ro(yDbMask);.#en
2b030 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2b040 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
2b050 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
2b060 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2b070 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65  te3CodeDropTable
2b080 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2b090 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2b0a0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61   sqlite3DeleteTa
2b0b0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
2b0c0 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ble*);.void sqli
2b0d0 74 65 33 46 72 65 65 49 6e 64 65 78 28 73 71 6c  te3FreeIndex(sql
2b0e0 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  ite3*, Index*);.
2b0f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b100 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
2b110 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
2b120 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
2b130 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  in(Parse *pParse
2b140 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2b150 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
2b160 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  d(Parse *pParse)
2b170 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2b180 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
2b190 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20  ementBegin(X).# 
2b1a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2b1b0 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58  toincrementEnd(X
2b1c0 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
2b1d0 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73  lite3Insert(Pars
2b1e0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65  e*, SrcList*, Se
2b1f0 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  lect*, IdList*, 
2b200 69 6e 74 2c 20 55 70 73 65 72 74 2a 29 3b 0a 76  int, Upsert*);.v
2b210 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61  oid *sqlite3Arra
2b220 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65  yAllocate(sqlite
2b230 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74  3*,void*,int,int
2b240 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20  *,int*);.IdList 
2b250 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70  *sqlite3IdListAp
2b260 70 65 6e 64 28 50 61 72 73 65 2a 2c 20 49 64 4c  pend(Parse*, IdL
2b270 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
2b280 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  nt sqlite3IdList
2b290 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f  Index(IdList*,co
2b2a0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c  nst char*);.SrcL
2b2b0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
2b2c0 69 73 74 45 6e 6c 61 72 67 65 28 50 61 72 73 65  istEnlarge(Parse
2b2d0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
2b2e0 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
2b2f0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
2b300 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 20 53 72  ppend(Parse*, Sr
2b310 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
2b320 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74  Token*);.SrcList
2b330 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
2b340 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50  AppendFromTerm(P
2b350 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2b360 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
2b370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b390 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53         Token*, S
2b3a0 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49  elect*, Expr*, I
2b3b0 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
2b3c0 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65  lite3SrcListInde
2b3d0 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53  xedBy(Parse *, S
2b3e0 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20  rcList *, Token 
2b3f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b400 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28  SrcListFuncArgs(
2b410 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2b420 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
2b430 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
2b440 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
2b450 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
2b460 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
2b470 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
2b480 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
2b490 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
2b4a0 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
2b4b0 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
2b4c0 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
2b4d0 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
2b4e0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
2b4f0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
2b500 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
2b510 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
2b520 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
2b530 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
2b540 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
2b550 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
2b560 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
2b570 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  eateIndex(Parse*
2b580 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
2b590 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  rcList*,ExprList
2b5a0 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20  *,int,Token*,.  
2b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5c0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69          Expr*, i
2b5d0 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
2b5e0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
2b5f0 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
2b600 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
2b610 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
2b620 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
2b630 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
2b640 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
2b650 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
2b660 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
2b670 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
2b680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b690 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
2b6a0 45 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78  ExprList*,u32,Ex
2b6b0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2b6c0 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73  e3SelectDelete(s
2b6d0 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a  qlite3*, Select*
2b6e0 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
2b6f0 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50  3SrcListLookup(P
2b700 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
2b710 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
2b720 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20  eadOnly(Parse*, 
2b730 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Table*, int);.vo
2b740 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  id sqlite3OpenTa
2b750 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20  ble(Parse*, int 
2b760 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54  iCur, int iDb, T
2b770 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  able*, int);.#if
2b780 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2b790 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
2b7a0 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21  LETE_LIMIT) && !
2b7b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2b7c0 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78  MIT_SUBQUERY).Ex
2b7d0 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74  pr *sqlite3Limit
2b7e0 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63  Where(Parse*,Src
2b7f0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
2b800 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72  List*,Expr*,char
2b810 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  *);.#endif.void 
2b820 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f  sqlite3DeleteFro
2b830 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
2b840 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c  t*, Expr*, ExprL
2b850 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
2b860 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
2b870 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2b880 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  *, ExprList*,Exp
2b890 72 2a 2c 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a  r*,int,ExprList*
2b8a0 2c 45 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20  ,Expr*,.        
2b8b0 20 20 20 20 20 20 20 20 20 20 20 55 70 73 65 72             Upser
2b8c0 74 2a 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  t*);.WhereInfo *
2b8d0 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
2b8e0 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
2b8f0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
2b900 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
2b910 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b920 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
2b930 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73  Info*);.LogEst s
2b940 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75  qlite3WhereOutpu
2b950 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49  tRowCount(WhereI
2b960 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
2b970 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
2b980 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
2b990 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
2b9a0 73 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e  sOrdered(WhereIn
2b9b0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2b9c0 33 57 68 65 72 65 4f 72 64 65 72 42 79 4c 69 6d  3WhereOrderByLim
2b9d0 69 74 4f 70 74 4c 61 62 65 6c 28 57 68 65 72 65  itOptLabel(Where
2b9e0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
2b9f0 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
2ba00 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2ba10 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f  t sqlite3WhereCo
2ba20 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72  ntinueLabel(Wher
2ba30 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2ba40 69 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61  ite3WhereBreakLa
2ba50 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
2ba60 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2ba70 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65  eOkOnePass(Where
2ba80 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64  Info*, int*);.#d
2ba90 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46  efine ONEPASS_OF
2baa0 46 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20  F      0        
2bab0 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53  /* Use of ONEPAS
2bac0 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f  S not allowed */
2bad0 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
2bae0 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20  _SINGLE   1     
2baf0 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61     /* ONEPASS va
2bb00 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  lid for a single
2bb10 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23   row update */.#
2bb20 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d  define ONEPASS_M
2bb30 55 4c 54 49 20 20 20 20 32 20 20 20 20 20 20 20  ULTI    2       
2bb40 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76   /* ONEPASS is v
2bb50 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c  alid for multipl
2bb60 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73  e rows */.void s
2bb70 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f  qlite3ExprCodeLo
2bb80 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61  adIndexColumn(Pa
2bb90 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
2bba0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  t, int, int);.in
2bbb0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
2bbc0 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
2bbd0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2bbe0 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  int, int, u8);.v
2bbf0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2bc00 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
2bc10 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ble(Vdbe*, Table
2bc20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2bc30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2bc40 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73  xprCodeMove(Pars
2bc50 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
2bc60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2bc70 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c  ExprCode(Parse*,
2bc80 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
2bc90 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2bca0 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45  deCopy(Parse*, E
2bcb0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
2bcc0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2bcd0 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65  Factorable(Parse
2bce0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2bcf0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2bd00 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
2bd10 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
2bd20 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2bd30 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45  deTemp(Parse*, E
2bd40 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
2bd50 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2bd60 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45  Target(Parse*, E
2bd70 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
2bd80 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2bd90 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c  AndCache(Parse*,
2bda0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2bdb0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
2bdc0 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  eExprList(Parse*
2bdd0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2bde0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66  , int, u8);.#def
2bdf0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
2be00 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f  DUP      0x01  /
2be10 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c  * Deep, not shal
2be20 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64  low copies */.#d
2be30 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
2be40 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20  L_FACTOR   0x02 
2be50 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63   /* Factor out c
2be60 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f  onstant terms */
2be70 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2be80 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78  ECEL_REF      0x
2be90 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c  04  /* Use ExprL
2bea0 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79  ist.u.x.iOrderBy
2beb0 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  Col */.#define S
2bec0 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52  QLITE_ECEL_OMITR
2bed0 45 46 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69  EF  0x08  /* Omi
2bee0 74 20 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e  t if ExprList.u.
2bef0 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f  x.iOrderByCol */
2bf00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2bf10 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20  rIfTrue(Parse*, 
2bf20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
2bf30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2bf40 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a  prIfFalse(Parse*
2bf50 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
2bf60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2bf70 45 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50  ExprIfFalseDup(P
2bf80 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2bf90 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a  t, int);.Table *
2bfa0 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
2bfb0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
2bfc0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2bfd0 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43  r*);.#define LOC
2bfe0 41 54 45 5f 56 49 45 57 20 20 20 20 30 78 30 31  ATE_VIEW    0x01
2bff0 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f  .#define LOCATE_
2c000 4e 4f 45 52 52 20 20 20 30 78 30 32 0a 54 61 62  NOERR   0x02.Tab
2c010 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
2c020 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33  eTable(Parse*,u3
2c030 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68  2 flags,const ch
2c040 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2c050 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
2c060 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d  3LocateTableItem
2c070 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67  (Parse*,u32 flag
2c080 73 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  s,struct SrcList
2c090 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20  _item *);.Index 
2c0a0 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65  *sqlite3FindInde
2c0b0 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  x(sqlite3*,const
2c0c0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2c0d0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2c0e0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2c0f0 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
2c100 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
2c110 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
2c120 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
2c130 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  ex(sqlite3*,int,
2c140 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2c150 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d  id sqlite3Vacuum
2c160 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45  (Parse*,Token*,E
2c170 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2c180 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
2c190 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e  **, sqlite3*, in
2c1a0 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
2c1b0 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
2c1c0 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73  3NameFromToken(s
2c1d0 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
2c1e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2c1f0 72 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c  rCompare(Parse*,
2c200 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
2c210 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2c220 78 70 72 43 6f 6d 70 61 72 65 53 6b 69 70 28 45  xprCompareSkip(E
2c230 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
2c240 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2c250 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78  prListCompare(Ex
2c260 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
2c270 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
2c280 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73  lite3ExprImplies
2c290 45 78 70 72 28 50 61 72 73 65 2a 2c 45 78 70 72  Expr(Parse*,Expr
2c2a0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2c2b0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2c2c0 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77  mpliesNonNullRow
2c2d0 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69  (Expr*,int);.voi
2c2e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
2c2f0 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e  lyzeAggregates(N
2c300 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2c310 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2c320 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c  3ExprAnalyzeAggL
2c330 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  ist(NameContext*
2c340 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
2c350 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 76 65   sqlite3ExprCove
2c360 72 65 64 42 79 49 6e 64 65 78 28 45 78 70 72 2a  redByIndex(Expr*
2c370 2c 20 69 6e 74 20 69 43 75 72 2c 20 49 6e 64 65  , int iCur, Inde
2c380 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73 71  x *pIdx);.int sq
2c390 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65  lite3FunctionUse
2c3a0 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20  sThisSrc(Expr*, 
2c3b0 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20  SrcList*);.Vdbe 
2c3c0 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28  *sqlite3GetVdbe(
2c3d0 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Parse*);.#ifndef
2c3e0 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2c3f0 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  LE.void sqlite3P
2c400 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69  rngSaveState(voi
2c410 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2c420 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65  PrngRestoreState
2c430 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76  (void);.#endif.v
2c440 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62  oid sqlite3Rollb
2c450 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c  ackAll(sqlite3*,
2c460 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c470 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
2c480 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ma(Parse*, int);
2c490 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
2c4a0 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65  eVerifyNamedSche
2c4b0 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ma(Parse*, const
2c4c0 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69   char *zDb);.voi
2c4d0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
2c4e0 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
2c4f0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2c500 69 74 65 33 45 6e 64 54 72 61 6e 73 61 63 74 69  ite3EndTransacti
2c510 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  on(Parse*,int);.
2c520 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65  void sqlite3Save
2c530 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  point(Parse*, in
2c540 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  t, Token*);.void
2c550 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
2c560 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20  epoints(sqlite3 
2c570 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c580 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f  LeaveMutexAndClo
2c590 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33  seZombie(sqlite3
2c5a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2c5b0 78 70 72 49 64 54 6f 54 72 75 65 46 61 6c 73 65  xprIdToTrueFalse
2c5c0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
2c5d0 69 74 65 33 45 78 70 72 54 72 75 74 68 56 61 6c  ite3ExprTruthVal
2c5e0 75 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ue(const Expr*);
2c5f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2c600 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  IsConstant(Expr*
2c610 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2c620 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a  prIsConstantNotJ
2c630 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  oin(Expr*);.int 
2c640 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
2c650 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28  stantOrFunction(
2c660 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  Expr*, u8);.int 
2c670 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
2c680 73 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50  stantOrGroupBy(P
2c690 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  arse*, Expr*, Ex
2c6a0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
2c6b0 6c 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65  lite3ExprIsTable
2c6c0 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69  Constant(Expr*,i
2c6d0 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
2c6e0 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52  TE_ENABLE_CURSOR
2c6f0 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74  _HINTS.int sqlit
2c700 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75  e3ExprContainsSu
2c710 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23  bquery(Expr*);.#
2c720 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2c730 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45  3ExprIsInteger(E
2c740 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
2c750 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42   sqlite3ExprCanB
2c760 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72  eNull(const Expr
2c770 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2c780 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69  xprNeedsNoAffini
2c790 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45  tyChange(const E
2c7a0 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74  xpr*, char);.int
2c7b0 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28   sqlite3IsRowid(
2c7c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2c7d0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
2c7e0 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20  teRowDelete(.   
2c7f0 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54   Parse*,Table*,T
2c800 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c  rigger*,int,int,
2c810 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38  int,i16,u8,u8,u8
2c820 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2c830 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e  te3GenerateRowIn
2c840 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a  dexDelete(Parse*
2c850 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
2c860 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
2c870 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72  int sqlite3Gener
2c880 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73  ateIndexKey(Pars
2c890 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
2c8a0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
2c8b0 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Index*,int);.voi
2c8c0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
2c8d0 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72  PartIdxLabel(Par
2c8e0 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  se*,int);.int sq
2c8f0 6c 69 74 65 33 45 78 70 72 52 65 66 65 72 65 6e  lite3ExprReferen
2c900 63 65 73 55 70 64 61 74 65 64 43 6f 6c 75 6d 6e  cesUpdatedColumn
2c910 28 45 78 70 72 2a 2c 69 6e 74 2a 2c 69 6e 74 29  (Expr*,int*,int)
2c920 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
2c930 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74  nerateConstraint
2c940 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61  Checks(Parse*,Ta
2c950 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ble*,int*,int,in
2c960 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  t,int,int,.     
2c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c990 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69  u8,u8,int,int*,i
2c9a0 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 23 69  nt*,Upsert*);.#i
2c9b0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2c9c0 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76  LE_NULL_TRIM.  v
2c9d0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61  oid sqlite3SetMa
2c9e0 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a  keRecordP5(Vdbe*
2c9f0 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
2ca00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2ca10 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28  SetMakeRecordP5(
2ca20 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  A,B).#endif.void
2ca30 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
2ca40 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
2ca50 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Table*,int,int,
2ca60 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  int,int*,int,int
2ca70 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
2ca80 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e  e3OpenTableAndIn
2ca90 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61  dices(Parse*, Ta
2caa0 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69  ble*, int, u8, i
2cab0 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69  nt, u8*, int*, i
2cac0 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
2cad0 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
2cae0 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ation(Parse*, in
2caf0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2cb00 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28  lite3MultiWrite(
2cb10 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2cb20 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61  lite3MayAbort(Pa
2cb30 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
2cb40 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e  te3HaltConstrain
2cb50 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
2cb60 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75  nt, char*, i8, u
2cb70 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2cb80 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74  UniqueConstraint
2cb90 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e  (Parse*, int, In
2cba0 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2cbb0 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69  te3RowidConstrai
2cbc0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
2cbd0 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Table*);.Expr *s
2cbe0 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71  qlite3ExprDup(sq
2cbf0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
2cc00 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
2cc10 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28  ite3ExprListDup(
2cc20 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
2cc30 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t*,int);.SrcList
2cc40 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
2cc50 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63  Dup(sqlite3*,Src
2cc60 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69  List*,int);.IdLi
2cc70 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
2cc80 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64  tDup(sqlite3*,Id
2cc90 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  List*);.Select *
2cca0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70  sqlite3SelectDup
2ccb0 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
2ccc0 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20  *,int);.FuncDef 
2ccd0 2a 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e  *sqlite3Function
2cce0 53 65 61 72 63 68 28 69 6e 74 2c 63 6f 6e 73 74  Search(int,const
2ccf0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2cd00 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74  lite3InsertBuilt
2cd10 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a  inFuncs(FuncDef*
2cd20 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a  ,int);.FuncDef *
2cd30 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74  sqlite3FindFunct
2cd40 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ion(sqlite3*,con
2cd50 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c  st char*,int,u8,
2cd60 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2cd70 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
2cd80 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
2cd90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2cda0 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
2cdb0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
2cdc0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
2cdd0 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42  erPerConnectionB
2cde0 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
2cdf0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2ce00 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
2ce10 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
2ce20 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
2ce30 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
2ce40 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2ce50 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
2ce60 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
2ce70 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2ce80 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
2ce90 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2cea0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
2ceb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
2cec0 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
2ced0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
2cee0 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78  r*, ExprList*,Ex
2cef0 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  pr*,int);.#endif
2cf00 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2cf10 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
2cf20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
2cf30 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
2cf40 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
2cf50 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
2cf60 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
2cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf80 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
2cf90 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2cfa0 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
2cfb0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
2cfc0 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
2cfd0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
2cfe0 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
2cff0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
2d000 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2d010 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
2d020 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
2d030 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
2d040 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
2d050 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
2d060 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
2d070 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
2d080 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
2d090 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
2d0a0 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
2d0b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2d0c0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
2d0d0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
2d0e0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
2d0f0 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
2d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d110 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
2d120 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
2d130 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
2d140 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
2d150 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
2d160 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
2d170 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
2d180 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
2d190 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
2d1a0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
2d1b0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
2d1c0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2d1d0 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
2d1e0 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
2d1f0 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
2d200 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2d210 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
2d220 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a  lite3*,Select*,.
2d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d250 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2d260 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2d270 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2d280 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49  *sqlite3TriggerI
2d290 6e 73 65 72 74 53 74 65 70 28 50 61 72 73 65 2a  nsertStep(Parse*
2d2a0 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
2d2b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2d0 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74            Select
2d2e0 2a 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20 20  *,u8,Upsert*,.  
2d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d310 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2d320 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2d330 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
2d340 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
2d350 61 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54  ateStep(Parse*,T
2d360 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
2d370 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20   Expr*, u8,.    
2d380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3a0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2d3b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2d3c0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2d3d0 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74  ite3TriggerDelet
2d3e0 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b  eStep(Parse*,Tok
2d3f0 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20  en*, Expr*,.    
2d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d420 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2d430 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2d440 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2d450 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
2d460 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  3*, Trigger*);. 
2d470 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c   void sqlite3Unl
2d480 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
2d490 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ger(sqlite3*,int
2d4a0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2d4b0 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67   u32 sqlite3Trig
2d4c0 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65  gerColmask(Parse
2d4d0 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c  *,Trigger*,ExprL
2d4e0 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62  ist*,int,int,Tab
2d4f0 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69  le*,int);.# defi
2d500 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
2d510 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
2d520 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29  >pToplevel ? (p)
2d530 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70  ->pToplevel : (p
2d540 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
2d550 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29  te3IsToplevel(p)
2d560 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
2d570 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
2d580 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
2d590 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45  ersExist(B,C,D,E
2d5a0 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
2d5b0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
2d5c0 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
2d5d0 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
2d5e0 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
2d5f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
2d600 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
2d610 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
2d620 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
2d630 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
2d640 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64  D,E,F,G,H,I).# d
2d650 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
2d660 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
2d670 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23  t(A,B,C,D,E,F).#
2d680 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
2d690 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29  riggerList(X, Y)
2d6a0 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
2d6b0 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
2d6c0 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73  (p) p.# define s
2d6d0 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c  qlite3IsToplevel
2d6e0 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73  (p) 1.# define s
2d6f0 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
2d700 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  mask(A,B,C,D,E,F
2d710 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e  ,G) 0.#endif..in
2d720 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70  t sqlite3JoinTyp
2d730 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2d740 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2d750 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2d760 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28  reateForeignKey(
2d770 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2d780 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  *, Token*, ExprL
2d790 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
2d7a0 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72   sqlite3DeferFor
2d7b0 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
2d7c0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
2d7d0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
2d7e0 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73  IZATION.  void s
2d7f0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50  qlite3AuthRead(P
2d800 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65  arse*,Expr*,Sche
2d810 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20  ma*,SrcList*);. 
2d820 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
2d830 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74  Check(Parse*,int
2d840 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2d850 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2d860 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
2d870 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2d880 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20  extPush(Parse*, 
2d890 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f  AuthContext*, co
2d8a0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2d8b0 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
2d8c0 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e  ntextPop(AuthCon
2d8d0 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  text*);.  int sq
2d8e0 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c  lite3AuthReadCol
2d8f0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2d900 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
2d910 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  r *, int);.#else
2d920 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2d930 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c  3AuthRead(a,b,c,
2d940 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  d).# define sqli
2d950 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62  te3AuthCheck(a,b
2d960 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54  ,c,d,e)    SQLIT
2d970 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71  E_OK.# define sq
2d980 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
2d990 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65  Push(a,b,c).# de
2d9a0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
2d9b0 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28  ContextPop(a)  (
2d9c0 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69  (void)(a)).#endi
2d9d0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74  f.void sqlite3At
2d9e0 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
2d9f0 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  r*, Expr*, Expr*
2da00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2da10 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  etach(Parse*, Ex
2da20 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2da30 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65  e3FixInit(DbFixe
2da40 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c  r*, Parse*, int,
2da50 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2da60 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  nst Token*);.int
2da70 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69   sqlite3FixSrcLi
2da80 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63  st(DbFixer*, Src
2da90 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2daa0 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46  te3FixSelect(DbF
2dab0 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ixer*, Select*);
2dac0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
2dad0 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78  xpr(DbFixer*, Ex
2dae0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2daf0 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46  3FixExprList(DbF
2db00 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ixer*, ExprList*
2db10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2db20 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46  xTriggerStep(DbF
2db30 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74  ixer*, TriggerSt
2db40 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ep*);.int sqlite
2db50 33 52 65 61 6c 53 61 6d 65 41 73 49 6e 74 28 64  3RealSameAsInt(d
2db60 6f 75 62 6c 65 2c 73 71 6c 69 74 65 33 5f 69 6e  ouble,sqlite3_in
2db70 74 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t64);.int sqlite
2db80 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
2db90 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e   *z, double*, in
2dba0 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
2dbb0 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73  te3GetInt32(cons
2dbc0 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b  t char *, int*);
2dbd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
2dbe0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
2dbf0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2dc00 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c  IT_UTF16.int sql
2dc10 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
2dc20 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
2dc30 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
2dc40 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2dc50 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
2dc60 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
2dc70 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
2dc80 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
2dc90 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f  (const u8**);.Lo
2dca0 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2dcb0 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20  st(u64);.LogEst 
2dcc0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64  sqlite3LogEstAdd
2dcd0 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b  (LogEst,LogEst);
2dce0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2dcf0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2dd00 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  E.LogEst sqlite3
2dd10 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65  LogEstFromDouble
2dd20 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66  (double);.#endif
2dd30 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2dd40 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
2dd50 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c  SCANSTATUS) || \
2dd60 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
2dd70 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
2dd80 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e  ) || \.    defin
2dd90 65 64 28 53 51 4c 49 54 45 5f 45 58 50 4c 41 49  ed(SQLITE_EXPLAI
2dda0 4e 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f 57 53  N_ESTIMATED_ROWS
2ddb0 29 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67  ).u64 sqlite3Log
2ddc0 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29  EstToInt(LogEst)
2ddd0 3b 0a 23 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a  ;.#endif.VList *
2dde0 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64 64 28  sqlite3VListAdd(
2ddf0 73 71 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c  sqlite3*,VList*,
2de00 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
2de10 69 6e 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  int);.const char
2de20 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75   *sqlite3VListNu
2de30 6d 54 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69  mToName(VList*,i
2de40 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2de50 56 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56  VListNameToNum(V
2de60 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
2de70 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  *,int);../*.** R
2de80 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20  outines to read 
2de90 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62  and write variab
2dea0 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
2deb0 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20  rs.  These used 
2dec0 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64  to.** be defined
2ded0 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f   locally, but no
2dee0 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72  w we use the var
2def0 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20  int routines in 
2df00 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69  the util.c.** fi
2df10 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  le..*/.int sqlit
2df20 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69  e3PutVarint(unsi
2df30 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29  gned char*, u64)
2df40 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
2df50 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69  arint(const unsi
2df60 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34  gned char *, u64
2df70 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47   *);.u8 sqlite3G
2df80 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
2df90 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
2dfa0 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71  , u32 *);.int sq
2dfb0 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75  lite3VarintLen(u
2dfc0 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  64 v);../*.** Th
2dfd0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73  e common case is
2dfe0 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f   for a varint to
2dff0 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74   be a single byt
2e000 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69  e.  They followi
2e010 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e  ng.** macros han
2e020 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63  dle the common c
2e030 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72  ase without a pr
2e040 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75  ocedure call, bu
2e050 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74  t then call.** t
2e060 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72  he procedure for
2e070 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e   larger varints.
2e080 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56  .*/.#define getV
2e090 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
2e0a0 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38    (u8)((*(A)<(u8
2e0b0 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32  )0x80)?((B)=(u32
2e0c0 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33  )*(A)),1:sqlite3
2e0d0 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c  GetVarint32((A),
2e0e0 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64  (u32 *)&(B))).#d
2e0f0 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33  efine putVarint3
2e100 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
2e110 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29  (((u32)(B)<(u32)
2e120 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73  0x80)?(*(A)=(uns
2e130 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c  igned char)(B)),
2e140 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74  1:\.  sqlite3Put
2e150 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29  Varint((A),(B)))
2e160 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
2e170 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74  nt    sqlite3Get
2e180 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70  Varint.#define p
2e190 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  utVarint    sqli
2e1a0 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63  te3PutVarint...c
2e1b0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2e1c0 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
2e1d0 74 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64  tr(sqlite3*, Ind
2e1e0 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
2e1f0 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28  e3TableAffinity(
2e200 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
2e210 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  nt);.char sqlite
2e220 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79  3CompareAffinity
2e230 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
2e240 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71  ar aff2);.int sq
2e250 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
2e260 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72  tyOk(Expr *pExpr
2e270 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e  , char idx_affin
2e280 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ity);.char sqlit
2e290 65 33 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66  e3TableColumnAff
2e2a0 69 6e 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74  inity(Table*,int
2e2b0 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45  );.char sqlite3E
2e2c0 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72  xprAffinity(Expr
2e2d0 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71   *pExpr);.int sq
2e2e0 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73  lite3Atoi64(cons
2e2f0 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69  t char*, i64*, i
2e300 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
2e310 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
2e320 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
2e330 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  64*);.void sqlit
2e340 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73  e3ErrorWithMsg(s
2e350 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
2e360 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
2e370 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
2e380 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  r(sqlite3*,int);
2e390 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73  .void sqlite3Sys
2e3a0 74 65 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33  temError(sqlite3
2e3b0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  *,int);.void *sq
2e3c0 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73  lite3HexToBlob(s
2e3d0 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
2e3e0 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a  har *z, int n);.
2e3f0 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49  u8 sqlite3HexToI
2e400 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73  nt(int h);.int s
2e410 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d  qlite3TwoPartNam
2e420 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  e(Parse *, Token
2e430 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
2e440 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66  en **);..#if def
2e450 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44  ined(SQLITE_NEED
2e460 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74  _ERR_NAME).const
2e470 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
2e480 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64  rName(int);.#end
2e490 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2e4a0 45 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52 49 41  E_ENABLE_DESERIA
2e4b0 4c 49 5a 45 0a 69 6e 74 20 73 71 6c 69 74 65 33  LIZE.int sqlite3
2e4c0 4d 65 6d 64 62 49 6e 69 74 28 76 6f 69 64 29 3b  MemdbInit(void);
2e4d0 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63  .#endif..const c
2e4e0 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53  har *sqlite3ErrS
2e4f0 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  tr(int);.int sql
2e500 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50  ite3ReadSchema(P
2e510 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43  arse *pParse);.C
2e520 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46  ollSeq *sqlite3F
2e530 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74  indCollSeq(sqlit
2e540 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73  e3*,u8 enc, cons
2e550 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 69 6e  t char*,int);.in
2e560 74 20 73 71 6c 69 74 65 33 49 73 42 69 6e 61 72  t sqlite3IsBinar
2e570 79 28 63 6f 6e 73 74 20 43 6f 6c 6c 53 65 71 2a  y(const CollSeq*
2e580 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2e590 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71  te3LocateCollSeq
2e5a0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2e5b0 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65  const char*zName
2e5c0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2e5d0 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
2e5e0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2e5f0 70 72 20 2a 70 45 78 70 72 29 3b 0a 43 6f 6c 6c  pr *pExpr);.Coll
2e600 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
2e610 4e 4e 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  NNCollSeq(Parse 
2e620 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
2e630 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
2e640 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 4d 61 74  e3ExprCollSeqMat
2e650 63 68 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ch(Parse*,Expr*,
2e660 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
2e670 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
2e680 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a  ateToken(Parse *
2e690 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63  pParse, Expr*, c
2e6a0 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  onst Token*, int
2e6b0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2e6c0 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74  ExprAddCollateSt
2e6d0 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72  ring(Parse*,Expr
2e6e0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2e6f0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2e700 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70  rSkipCollate(Exp
2e710 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
2e720 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
2e730 65 41 6e 64 4c 69 6b 65 6c 79 28 45 78 70 72 2a  eAndLikely(Expr*
2e740 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
2e750 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  eckCollSeq(Parse
2e760 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a   *, CollSeq *);.
2e770 69 6e 74 20 73 71 6c 69 74 65 33 57 72 69 74 61  int sqlite3Writa
2e780 62 6c 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65  bleSchema(sqlite
2e790 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2e7a0 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28  CheckObjectName(
2e7b0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2e7c0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
2e7d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2e7e0 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
2e7f0 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
2e800 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
2e810 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
2e820 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2e830 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
2e840 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
2e850 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
2e860 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
2e870 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
2e880 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2e890 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
2e8a0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
2e8b0 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
2e8c0 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
2e8d0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2e8e0 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
2e8f0 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
2e900 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
2e910 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38  const char *z,u8
2e920 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
2e930 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
2e940 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
2e950 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2e960 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
2e970 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
2e980 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2e990 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
2e9a0 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
2e9b0 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20  nst void *,u8,. 
2e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9d0 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76         void(*)(v
2e9e0 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
2e9f0 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c  ite3ValueSetNull
2ea00 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2ea10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2ea20 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
2ea30 76 61 6c 75 65 2a 29 3b 0a 23 69 66 6e 64 65 66  value*);.#ifndef
2ea40 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2ea50 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  LE.void sqlite3R
2ea60 65 73 75 6c 74 49 6e 74 52 65 61 6c 28 73 71 6c  esultIntReal(sql
2ea70 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a  ite3_context*);.
2ea80 23 65 6e 64 69 66 0a 73 71 6c 69 74 65 33 5f 76  #endif.sqlite3_v
2ea90 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c  alue *sqlite3Val
2eaa0 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29  ueNew(sqlite3 *)
2eab0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2eac0 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 68 61 72  _OMIT_UTF16.char
2ead0 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f   *sqlite3Utf16to
2eae0 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  8(sqlite3 *, con
2eaf0 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75  st void*, int, u
2eb00 38 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  8);.#endif.int s
2eb10 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45  qlite3ValueFromE
2eb20 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45  xpr(sqlite3 *, E
2eb30 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73  xpr *, u8, u8, s
2eb40 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
2eb50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2eb60 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79  lueApplyAffinity
2eb70 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
2eb80 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64  , u8, u8);.#ifnd
2eb90 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
2eba0 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f  MATION.extern co
2ebb0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2ebc0 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  r sqlite3OpcodeP
2ebd0 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72  roperty[];.exter
2ebe0 6e 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c  n const char sql
2ebf0 69 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b  ite3StrBINARY[];
2ec00 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
2ec10 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
2ec20 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
2ec30 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
2ec40 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
2ec50 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b  lite3CtypeMap[];
2ec60 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
2ec70 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  SD struct Sqlite
2ec80 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  3Config sqlite3C
2ec90 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75  onfig;.extern Fu
2eca0 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65  ncDefHash sqlite
2ecb0 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
2ecc0 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
2ecd0 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
2ece0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
2ecf0 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
2ed00 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 56  .#endif.#ifdef V
2ed10 44 42 45 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65  DBE_PROFILE.exte
2ed20 72 6e 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36  rn sqlite3_uint6
2ed30 34 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c  4 sqlite3NProfil
2ed40 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  eCnt;.#endif.voi
2ed50 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
2ed60 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
2ed70 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2ed80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
2ed90 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
2eda0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
2edb0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
2edc0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2edd0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2ede0 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
2edf0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
2ee00 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2ee10 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 43  ite3AlterRenameC
2ee20 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 53 72  olumn(Parse*, Sr
2ee30 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
2ee40 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2ee50 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e  ite3GetToken(con
2ee60 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2ee70 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64   *, int *);.void
2ee80 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61   sqlite3NestedPa
2ee90 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  rse(Parse*, cons
2eea0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
2eeb0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72  oid sqlite3Expir
2eec0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
2eed0 6e 74 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  nts(sqlite3*, in
2eee0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2eef0 43 6f 64 65 52 68 73 4f 66 49 4e 28 50 61 72 73  CodeRhsOfIN(Pars
2ef00 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2ef10 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
2ef20 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a  Subselect(Parse*
2ef30 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2ef40 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70  qlite3SelectPrep
2ef50 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
2ef60 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
2ef70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
2ef80 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73  ectWrongNumTerms
2ef90 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61  Error(Parse *pPa
2efa0 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b  rse, Select *p);
2efb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63  .int sqlite3Matc
2efc0 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20  hSpanName(const 
2efd0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2efe0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
2eff0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69   const char*);.i
2f000 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
2f010 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43  eExprNames(NameC
2f020 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
2f030 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
2f040 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73  lveExprListNames
2f050 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2f060 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  xprList*);.void 
2f070 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
2f080 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a  lectNames(Parse*
2f090 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
2f0a0 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
2f0b0 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66  lite3ResolveSelf
2f0c0 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a  Reference(Parse*
2f0d0 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72  ,Table*,int,Expr
2f0e0 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
2f0f0 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2f100 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72  OrderGroupBy(Par
2f110 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  se*, Select*, Ex
2f120 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
2f130 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2f140 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
2f150 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
2f160 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2f170 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69  d sqlite3AlterFi
2f180 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61  nishAddColumn(Pa
2f190 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  rse *, Token *);
2f1a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2f1b0 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e  erBeginAddColumn
2f1c0 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
2f1d0 74 20 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  t *);.void *sqli
2f1e0 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61  te3RenameTokenMa
2f1f0 70 28 50 61 72 73 65 2a 2c 20 76 6f 69 64 2a 2c  p(Parse*, void*,
2f200 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2f210 71 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65  qlite3RenameToke
2f220 6e 52 65 6d 61 70 28 50 61 72 73 65 2a 2c 20 76  nRemap(Parse*, v
2f230 6f 69 64 20 2a 70 54 6f 2c 20 76 6f 69 64 20 2a  oid *pTo, void *
2f240 70 46 72 6f 6d 29 3b 0a 76 6f 69 64 20 73 71 6c  pFrom);.void sql
2f250 69 74 65 33 52 65 6e 61 6d 65 45 78 70 72 55 6e  ite3RenameExprUn
2f260 6d 61 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  map(Parse*, Expr
2f270 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f280 52 65 6e 61 6d 65 45 78 70 72 6c 69 73 74 55 6e  RenameExprlistUn
2f290 6d 61 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  map(Parse*, Expr
2f2a0 4c 69 73 74 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  List*);.CollSeq 
2f2b0 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
2f2c0 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
2f2d0 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
2f2e0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
2f2f0 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
2f300 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f  (const char*, Co
2f310 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lumn*);.void sql
2f320 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
2f330 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2f340 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2f350 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
2f360 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20  r(BusyHandler*, 
2f370 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a  sqlite3_file*);.
2f380 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
2f390 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  b(sqlite3*, Toke
2f3a0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2f3b0 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74  FindDbName(sqlit
2f3c0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
2f3d0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2f3e0 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c  AnalysisLoad(sql
2f3f0 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a  ite3*,int iDB);.
2f400 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2f410 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73  teIndexSamples(s
2f420 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b  qlite3*,Index*);
2f430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
2f440 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78  aultRowEst(Index
2f450 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f460 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
2f470 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20  tions(sqlite3*, 
2f480 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2f490 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28  3IsLikeFunction(
2f4a0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
2f4b0 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nt*,char*);.void
2f4c0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
2f4d0 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 76 6f 69  ear(void *);.voi
2f4e0 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43  d sqlite3SchemaC
2f4f0 6c 65 61 72 4f 72 44 69 73 63 6f 6e 6e 65 63 74  learOrDisconnect
2f500 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
2f510 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2f520 45 4e 41 42 4c 45 5f 53 48 41 52 45 44 5f 53 43  ENABLE_SHARED_SC
2f530 48 45 4d 41 20 0a 69 6e 74 20 73 71 6c 69 74 65  HEMA .int sqlite
2f540 33 53 63 68 65 6d 61 43 6f 6e 6e 65 63 74 28 73  3SchemaConnect(s
2f550 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 75 36  qlite3*, int, u6
2f560 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  4);.int sqlite3S
2f570 63 68 65 6d 61 44 69 73 63 6f 6e 6e 65 63 74 28  chemaDisconnect(
2f580 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20  sqlite3 *, int, 
2f590 69 6e 74 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71  int);.Schema *sq
2f5a0 6c 69 74 65 33 53 63 68 65 6d 61 45 78 74 72 61  lite3SchemaExtra
2f5b0 63 74 28 53 63 68 65 6d 61 50 6f 6f 6c 2a 29 3b  ct(SchemaPool*);
2f5c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
2f5d0 6d 61 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c  maLoad(sqlite3*,
2f5e0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 63 68 61 72   int, int*, char
2f5f0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
2f600 33 53 63 68 65 6d 61 52 65 6c 65 61 73 65 41 6c  3SchemaReleaseAl
2f610 6c 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  l(sqlite3*);.voi
2f620 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 52  d sqlite3SchemaR
2f630 65 6c 65 61 73 65 28 73 71 6c 69 74 65 33 2a 2c  elease(sqlite3*,
2f640 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2f650 74 65 33 53 63 68 65 6d 61 41 64 6a 75 73 74 55  te3SchemaAdjustU
2f660 73 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  sed(sqlite3*, in
2f670 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 76  t, int, int*);.v
2f680 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d  oid sqlite3Schem
2f690 61 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  aWritable(Parse*
2f6a0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2f6b0 69 74 65 33 55 6e 6c 6f 63 6b 52 65 75 73 61 62  ite3UnlockReusab
2f6c0 6c 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33  leSchema(sqlite3
2f6d0 20 2a 64 62 2c 20 69 6e 74 20 62 52 65 6c 65 61   *db, int bRelea
2f6e0 73 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  se);.int sqlite3
2f6f0 4c 6f 63 6b 52 65 75 73 61 62 6c 65 53 63 68 65  LockReusableSche
2f700 6d 61 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ma(sqlite3 *db);
2f710 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2f720 73 71 6c 69 74 65 33 53 63 68 65 6d 61 57 72 69  sqlite3SchemaWri
2f730 74 61 62 6c 65 28 78 2c 79 29 0a 23 20 64 65 66  table(x,y).# def
2f740 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 6f 63  ine sqlite3Unloc
2f750 6b 52 65 75 73 61 62 6c 65 53 63 68 65 6d 61 28  kReusableSchema(
2f760 78 2c 79 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x,y).# define sq
2f770 6c 69 74 65 33 4c 6f 63 6b 52 65 75 73 61 62 6c  lite3LockReusabl
2f780 65 53 63 68 65 6d 61 28 78 29 20 30 0a 23 20 64  eSchema(x) 0.# d
2f790 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 63 68  efine sqlite3Sch
2f7a0 65 6d 61 44 69 73 63 6f 6e 6e 65 63 74 28 78 2c  emaDisconnect(x,
2f7b0 79 2c 7a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  y,z) SQLITE_OK.#
2f7c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
2f7d0 63 68 65 6d 61 4c 6f 61 64 28 77 2c 78 2c 79 2c  chemaLoad(w,x,y,
2f7e0 7a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64  z) SQLITE_OK.# d
2f7f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 63 68  efine sqlite3Sch
2f800 65 6d 61 52 65 6c 65 61 73 65 28 79 2c 7a 29 0a  emaRelease(y,z).
2f810 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2f820 53 63 68 65 6d 61 43 6f 6e 6e 65 63 74 28 78 2c  SchemaConnect(x,
2f830 79 2c 7a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  y,z) SQLITE_OK.#
2f840 65 6e 64 69 66 0a 0a 53 63 68 65 6d 61 20 2a 73  endif..Schema *s
2f850 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
2f860 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
2f870 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2f880 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
2f890 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
2f8a0 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
2f8b0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c  qlite3KeyInfoAll
2f8c0 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
2f8d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2f8e0 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b  e3KeyInfoUnref(K
2f8f0 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
2f900 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2f910 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  oRef(KeyInfo*);.
2f920 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2f930 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50  KeyInfoOfIndex(P
2f940 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  arse*, Index*);.
2f950 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2f960 4b 65 79 49 6e 66 6f 46 72 6f 6d 45 78 70 72 4c  KeyInfoFromExprL
2f970 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ist(Parse*, Expr
2f980 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
2f990 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 61 73  ;.int sqlite3Has
2f9a0 45 78 70 6c 69 63 69 74 4e 75 6c 6c 73 28 50 61  ExplicitNulls(Pa
2f9b0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  rse*, ExprList*)
2f9c0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
2f9d0 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
2f9e0 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65  e3KeyInfoIsWrite
2f9f0 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  able(KeyInfo*);.
2fa00 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2fa10 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c  e3CreateFunc(sql
2fa20 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
2fa30 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ar *, int, int, 
2fa40 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28  void *,.  void (
2fa50 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2fa60 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
2fa70 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
2fa80 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2fa90 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2faa0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20  e3_value **), . 
2fab0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2fac0 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76  3_context*),.  v
2fad0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2fae0 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69  context*),.  voi
2faf0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2fb00 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2fb10 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20  e3_value **), . 
2fb20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
2fb30 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a  *pDestructor.);.
2fb40 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 6f 6f 70  void sqlite3Noop
2fb50 44 65 73 74 72 75 63 74 6f 72 28 76 6f 69 64 2a  Destructor(void*
2fb60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
2fb70 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a  omFault(sqlite3*
2fb80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
2fb90 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a  omClear(sqlite3*
2fba0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
2fbb0 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
2fbc0 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
2fbd0 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
2fbe0 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
2fbf0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
2fc00 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
2fc10 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68  m*, sqlite3*, ch
2fc20 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  ar*, int, int);.
2fc30 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72  char *sqlite3Str
2fc40 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41  AccumFinish(StrA
2fc50 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
2fc60 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e  ite3SelectDestIn
2fc70 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69  it(SelectDest*,i
2fc80 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  nt,int);.Expr *s
2fc90 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75  qlite3CreateColu
2fca0 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  mnExpr(sqlite3 *
2fcb0 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74  , SrcList *, int
2fcc0 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71  , int);..void sq
2fcd0 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61  lite3BackupResta
2fce0 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  rt(sqlite3_backu
2fcf0 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  p *);.void sqlit
2fd00 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73  e3BackupUpdate(s
2fd10 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c  qlite3_backup *,
2fd20 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20   Pgno, const u8 
2fd30 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  *);..#ifndef SQL
2fd40 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
2fd50 59 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  Y.int sqlite3Exp
2fd60 72 43 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c  rCheckIN(Parse*,
2fd70 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   Expr*);.#else.#
2fd80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
2fd90 78 70 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20  xprCheckIN(x,y) 
2fda0 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66  SQLITE_OK.#endif
2fdb0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2fdc0 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 69 6e 74  ENABLE_STAT4.int
2fdd0 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
2fde0 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20 20  beSetValue(.    
2fdf0 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
2fe00 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
2fe10 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  xpr*,int,int,int
2fe20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2fe30 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70  tat4ValueFromExp
2fe40 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
2fe50 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
2fe60 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ue**);.void sqli
2fe70 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65  te3Stat4ProbeFre
2fe80 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  e(UnpackedRecord
2fe90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2fea0 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74  tat4Column(sqlit
2feb0 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  e3*, const void*
2fec0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69  , int, int, sqli
2fed0 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68  te3_value**);.ch
2fee0 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78 43  ar sqlite3IndexC
2fef0 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 71  olumnAffinity(sq
2ff00 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20  lite3*, Index*, 
2ff10 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  int);.#endif../*
2ff20 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
2ff30 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
2ff40 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
2ff50 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2ff60 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20  E_AMALGAMATION. 
2ff70 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61   void *sqlite3Pa
2ff80 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28  rserAlloc(void*(
2ff90 2a 29 28 75 36 34 29 2c 20 50 61 72 73 65 2a 29  *)(u64), Parse*)
2ffa0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2ffb0 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
2ffc0 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
2ffd0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2ffe0 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69  qlite3Parser(voi
2fff0 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b  d*, int, Token);
30000 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
30010 65 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74 29 3b  erFallback(int);
30020 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
30030 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
30040 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
30050 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
30060 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
30070 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
30080 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
30090 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
300a0 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
300b0 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
300c0 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
300d0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
300e0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
300f0 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
30100 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
30110 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30120 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
30130 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
30140 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
30150 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
30160 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
30170 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
30180 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
30190 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
301a0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
301b0 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
301c0 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
301d0 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
301e0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
301f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
30200 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
30210 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
30220 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
30230 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
30240 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
30250 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
30260 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
30270 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
30280 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
30290 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
302a0 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
302b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
302c0 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65  tabLock(X).#  de
302d0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
302e0 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  Unlock(X).#  def
302f0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4d  ine sqlite3VtabM
30300 6f 64 75 6c 65 55 6e 72 65 66 28 44 2c 58 29 0a  oduleUnref(D,X).
30310 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
30320 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
30330 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
30340 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
30350 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54  t(X, Y, Z) SQLIT
30360 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
30370 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
30380 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29  X,Y)  ((VTable*)
30390 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  0).#else.   void
303a0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
303b0 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  r(sqlite3 *db, T
303c0 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20  able*);.   void 
303d0 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f  sqlite3VtabDisco
303e0 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64  nnect(sqlite3 *d
303f0 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20  b, Table *p);.  
30400 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
30410 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62  Sync(sqlite3 *db
30420 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74  , Vdbe*);.   int
30430 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
30440 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  back(sqlite3 *db
30450 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
30460 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69  3VtabCommit(sqli
30470 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69  te3 *db);.   voi
30480 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  d sqlite3VtabLoc
30490 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
304a0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
304b0 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  Unlock(VTable *)
304c0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
304d0 33 56 74 61 62 4d 6f 64 75 6c 65 55 6e 72 65 66  3VtabModuleUnref
304e0 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65  (sqlite3*,Module
304f0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
30500 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
30510 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
30520 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
30530 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
30540 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
30550 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
30560 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56  abImportErrmsg(V
30570 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  dbe*, sqlite3_vt
30580 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  ab*);.   VTable 
30590 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
305a0 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
305b0 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a  e*);.   Module *
305c0 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61 74  sqlite3VtabCreat
305d0 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71  eModule(.     sq
305e0 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e  lite3*,.     con
305f0 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63  st char*,.     c
30600 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
30610 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a  ule*,.     void*
30620 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76  ,.     void(*)(v
30630 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64  oid*).   );.#  d
30640 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
30650 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62  bInSync(db) ((db
30660 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20  )->nVTrans>0 && 
30670 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30  (db)->aVTrans==0
30680 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
30690 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
306a0 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65  sTableInit(Parse
306b0 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
306c0 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
306d0 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28  ymousTableClear(
306e0 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a  sqlite3*,Module*
306f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
30700 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28  tabMakeWritable(
30710 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
30720 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
30730 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
30740 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
30750 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
30760 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
30770 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72  bFinishParse(Par
30780 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
30790 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
307a0 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76  gInit(Parse*);.v
307b0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
307c0 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c  rgExtend(Parse*,
307d0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
307e0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
307f0 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ate(sqlite3*, in
30800 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  t, const char *,
30810 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73   char **);.int s
30820 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f  qlite3VtabCallCo
30830 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61  nnect(Parse*, Ta
30840 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
30850 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
30860 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  y(sqlite3*, int,
30870 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
30880 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42  int sqlite3VtabB
30890 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20  egin(sqlite3 *, 
308a0 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44  VTable *);.FuncD
308b0 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f  ef *sqlite3VtabO
308c0 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28  verloadFunction(
308d0 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65  sqlite3 *,FuncDe
308e0 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78  f*, int nArg, Ex
308f0 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  pr*);.sqlite3_in
30900 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
30910 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
30920 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
30930 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
30940 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
30950 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
30960 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
30970 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
30980 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
30990 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
309a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
309b0 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
309c0 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
309d0 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c 49  E_ENABLE_NORMALI
309e0 5a 45 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  ZE.char *sqlite3
309f0 4e 6f 72 6d 61 6c 69 7a 65 28 56 64 62 65 2a 2c  Normalize(Vdbe*,
30a00 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
30a10 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
30a20 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a  3Reprepare(Vdbe*
30a30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
30a40 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67  xprListCheckLeng
30a50 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  th(Parse*, ExprL
30a60 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
30a70 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
30a80 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72  ite3BinaryCompar
30a90 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
30aa0 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a  , Expr *, Expr *
30ab0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  );.int sqlite3Te
30ac0 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74  mpInMemory(const
30ad0 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73   sqlite3*);.cons
30ae0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
30af0 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
30b00 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
30b10 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
30b20 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70  nt sqlite3Checkp
30b30 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69  oint(sqlite3*, i
30b40 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
30b50 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  nt*);.  int sqli
30b60 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
30b70 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  k(void*,sqlite3*
30b80 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
30b90 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  );.#endif.#ifnde
30ba0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54  f SQLITE_OMIT_CT
30bb0 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65  E.  With *sqlite
30bc0 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c  3WithAdd(Parse*,
30bd0 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  With*,Token*,Exp
30be0 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b  rList*,Select*);
30bf0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
30c00 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ithDelete(sqlite
30c10 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69  3*,With*);.  voi
30c20 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  d sqlite3WithPus
30c30 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c  h(Parse*, With*,
30c40 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66   u8);.#else.#def
30c50 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50  ine sqlite3WithP
30c60 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69  ush(x,y,z).#defi
30c70 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  ne sqlite3WithDe
30c80 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66  lete(x,y).#endif
30c90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30ca0 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20 20 55 70  OMIT_UPSERT.  Up
30cb0 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73  sert *sqlite3Ups
30cc0 65 72 74 4e 65 77 28 73 71 6c 69 74 65 33 2a 2c  ertNew(sqlite3*,
30cd0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
30ce0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
30cf0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
30d00 55 70 73 65 72 74 44 65 6c 65 74 65 28 73 71 6c  UpsertDelete(sql
30d10 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  ite3*,Upsert*);.
30d20 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65    Upsert *sqlite
30d30 33 55 70 73 65 72 74 44 75 70 28 73 71 6c 69 74  3UpsertDup(sqlit
30d40 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20  e3*,Upsert*);.  
30d50 69 6e 74 20 73 71 6c 69 74 65 33 55 70 73 65 72  int sqlite3Upser
30d60 74 41 6e 61 6c 79 7a 65 54 61 72 67 65 74 28 50  tAnalyzeTarget(P
30d70 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 55  arse*,SrcList*,U
30d80 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64 20  psert*);.  void 
30d90 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 6f 55  sqlite3UpsertDoU
30da0 70 64 61 74 65 28 50 61 72 73 65 2a 2c 55 70 73  pdate(Parse*,Ups
30db0 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64 65  ert*,Table*,Inde
30dc0 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23  x*,int);.#else.#
30dd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70  define sqlite3Up
30de0 73 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79 2c  sertNew(v,w,x,y,
30df0 7a 29 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a  z) ((Upsert*)0).
30e00 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55  #define sqlite3U
30e10 70 73 65 72 74 44 65 6c 65 74 65 28 78 2c 79 29  psertDelete(x,y)
30e20 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
30e30 55 70 73 65 72 74 44 75 70 28 78 2c 79 29 20 20  UpsertDup(x,y)  
30e40 20 20 20 20 20 28 28 55 70 73 65 72 74 2a 29 30       ((Upsert*)0
30e50 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 65  ).#endif.../* De
30e60 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
30e70 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
30e80 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
30e90 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
30ea0 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
30eb0 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
30ec0 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
30ed0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
30ee0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
30ef0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
30f00 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
30f10 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
30f20 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
30f30 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
30f40 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
30f50 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
30f60 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
30f70 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
30f80 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
30f90 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
30fa0 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
30fb0 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65  ty is.** provide
30fc0 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f  d (enforcement o
30fd0 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  f FK constraints
30fe0 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72   requires the tr
30ff0 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65  iggers sub-syste
31000 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  m)..*/.#if !defi
31010 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
31020 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
31030 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
31040 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
31050 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68  void sqlite3FkCh
31060 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  eck(Parse*, Tabl
31070 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
31080 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
31090 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
310a0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
310b0 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ist *, Table*);.
310c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
310d0 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20  Actions(Parse*, 
310e0 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74  Table*, ExprList
310f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  *, int, int*, in
31100 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
31110 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73  3FkRequired(Pars
31120 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a  e*, Table*, int*
31130 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71  , int);.  u32 sq
31140 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50  lite3FkOldmask(P
31150 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
31160 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46    FKey *sqlite3F
31170 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c  kReferences(Tabl
31180 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  e *);.#else.  #d
31190 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41  efine sqlite3FkA
311a0 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65  ctions(a,b,c,d,e
311b0 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
311c0 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62  lite3FkCheck(a,b
311d0 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
311e0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  ine sqlite3FkDro
311f0 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20  pTable(a,b,c).  
31200 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
31210 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20  kOldmask(a,b)   
31220 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e        0.  #defin
31230 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  e sqlite3FkRequi
31240 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20  red(a,b,c,d)    
31250 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
31260 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
31270 61 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64  a)        0.#end
31280 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
31290 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
312a0 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  EY.  void sqlite
312b0 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65  3FkDelete(sqlite
312c0 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  3 *, Table*);.  
312d0 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  int sqlite3FkLoc
312e0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
312f0 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64  Table*,FKey*,Ind
31300 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c  ex**,int**);.#el
31310 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
31320 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62  ite3FkDelete(a,b
31330 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
31340 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
31350 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64  (a,b,c,d,e).#end
31360 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c  if.../*.** Avail
31370 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63  able fault injec
31380 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65  tors.  Should be
31390 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e   numbered beginn
313a0 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23  ing with 0..*/.#
313b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
313c0 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c  ULTINJECTOR_MALL
313d0 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  OC     0.#define
313e0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
313f0 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20  ECTOR_COUNT     
31400 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e   1../*.** The in
31410 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63  terface to the c
31420 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75  ode in fault.c u
31430 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79  sed for identify
31440 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20  ing "benign".** 
31450 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e  malloc failures.
31460 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72   This is only pr
31470 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f  esent if SQLITE_
31480 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69 73  UNTESTABLE.** is
31490 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
314a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
314b0 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f 69  UNTESTABLE.  voi
314c0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  d sqlite3BeginBe
314d0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
314e0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
314f0 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
31500 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23  void);.#else.  #
31510 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65  define sqlite3Be
31520 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
31530 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
31540 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
31550 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  oc().#endif../*.
31560 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  ** Allowed retur
31570 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
31580 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
31590 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ().*/.#define IN
315a0 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20  _INDEX_ROWID    
315b0 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63      1   /* Searc
315c0 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  h the rowid of t
315d0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  he table */.#def
315e0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48  ine IN_INDEX_EPH
315f0 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a            2   /*
31600 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d   Search an ephem
31610 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23  eral b-tree */.#
31620 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
31630 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20  INDEX_ASC    3  
31640 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
31650 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  ex ASCENDING */.
31660 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
31670 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20  _INDEX_DESC   4 
31680 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
31690 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a  dex DESCENDING *
316a0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
316b0 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20  EX_NOOP         
316c0 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20  5   /* No table 
316d0 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63  available. Use c
316e0 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a  omparisons */./*
316f0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67  .** Allowed flag
31700 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61  s for the 3rd pa
31710 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
31720 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e  e3FindInIndex().
31730 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
31740 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20  NDEX_NOOP_OK    
31750 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74   0x0001  /* OK t
31760 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45  o return IN_INDE
31770 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e  X_NOOP */.#defin
31780 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45  e IN_INDEX_MEMBE
31790 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f  RSHIP  0x0002  /
317a0 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
317b0 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69  ed for membershi
317c0 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e  p test */.#defin
317d0 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20  e IN_INDEX_LOOP 
317e0 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
317f0 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
31800 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a  ed as a loop */.
31810 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49  int sqlite3FindI
31820 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20  nIndex(Parse *, 
31830 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74  Expr *, u32, int
31840 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  *, int*, int*);.
31850 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
31860 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
31870 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  vfs *, const cha
31880 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c  r *, sqlite3_fil
31890 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
318a0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
318b0 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76  alSize(sqlite3_v
318c0 66 73 20 2a 29 3b 0a 23 69 66 20 64 65 66 69 6e  fs *);.#if defin
318d0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
318e0 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 20 5c  _ATOMIC_WRITE) \
318f0 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  . || defined(SQL
31900 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48  ITE_ENABLE_BATCH
31910 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a 20  _ATOMIC_WRITE). 
31920 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
31930 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  nalCreate(sqlite
31940 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69  3_file *);.#endi
31950 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
31960 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28  urnalIsInMemory(
31970 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29  sqlite3_file *p)
31980 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
31990 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  mJournalOpen(sql
319a0 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76  ite3_file *);..v
319b0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53  oid sqlite3ExprS
319c0 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73  etHeightAndFlags
319d0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
319e0 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51  Expr *p);.#if SQ
319f0 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45  LITE_MAX_EXPR_DE
31a00 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69  PTH>0.  int sqli
31a10 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
31a20 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20  ght(Select *);. 
31a30 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72   int sqlite3Expr
31a40 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73  CheckHeight(Pars
31a50 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  e*, int);.#else.
31a60 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
31a70 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
31a80 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65  t(x) 0.  #define
31a90 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
31aa0 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e  kHeight(x,y).#en
31ab0 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33  dif..u32 sqlite3
31ac0 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75  Get4byte(const u
31ad0 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
31ae0 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75  3Put4byte(u8*, u
31af0 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  32);..#ifdef SQL
31b00 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
31b10 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20  K_NOTIFY.  void 
31b20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
31b30 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  nBlocked(sqlite3
31b40 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a   *, sqlite3 *);.
31b50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
31b60 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
31b70 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
31b80 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
31b90 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71  nectionClosed(sq
31ba0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73  lite3 *db);.#els
31bb0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
31bc0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
31bd0 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66  cked(x,y).  #def
31be0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
31bf0 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29  ctionUnlocked(x)
31c00 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
31c10 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
31c20 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ed(x).#endif..#i
31c30 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
31c40 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
31c50 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45  ParserTrace(FILE
31c60 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64  *, char *);.#end
31c70 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 59  if.#if defined(Y
31c80 59 43 4f 56 45 52 41 47 45 29 0a 20 20 69 6e 74  YCOVERAGE).  int
31c90 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 43 6f   sqlite3ParserCo
31ca0 76 65 72 61 67 65 28 46 49 4c 45 2a 29 3b 0a 23  verage(FILE*);.#
31cb0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
31cc0 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
31cd0 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73  E IOTRACE exists
31ce0 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c   then the global
31cf0 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c   variable.** sql
31d00 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61  ite3IoTrace is a
31d10 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72   pointer to a pr
31d20 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e  intf-like routin
31d30 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69  e used to.** pri
31d40 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d  nt I/O tracing m
31d50 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64  essages..*/.#ifd
31d60 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
31d70 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e  _IOTRACE.# defin
31d80 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66  e IOTRACE(A)  if
31d90 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  ( sqlite3IoTrace
31da0 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61   ){ sqlite3IoTra
31db0 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73  ce A; }.  void s
31dc0 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
31dd0 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c  eSql(Vdbe*);.SQL
31de0 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45  ITE_API SQLITE_E
31df0 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49  XTERN void (SQLI
31e00 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65  TE_CDECL *sqlite
31e10 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
31e20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
31e30 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
31e40 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
31e50 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
31e60 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
31e70 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
31e80 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
31e90 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
31ea0 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
31eb0 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
31ec0 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
31ed0 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
31ee0 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
31ef0 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
31f00 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
31f10 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
31f20 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
31f30 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
31f40 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
31f50 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
31f60 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
31f70 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
31f80 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
31f90 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
31fa0 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
31fb0 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
31fc0 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
31fd0 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
31fe0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
31ff0 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
32000 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
32010 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
32020 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
32030 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
32040 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
32050 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
32060 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
32070 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
32080 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
32090 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
320a0 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
320b0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
320c0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
320d0 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
320e0 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
320f0 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
32100 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
32110 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
32120 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
32130 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
32140 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
32150 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
32160 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
32170 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
32180 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
32190 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
321a0 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
321b0 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
321c0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
321d0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
321e0 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
321f0 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
32200 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
32210 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
32220 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
32230 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
32240 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
32250 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
32260 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
32270 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
32280 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
32290 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
322a0 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
322b0 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
322c0 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
322d0 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
322e0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
322f0 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
32300 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
32310 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
32320 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
32330 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
32340 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
32350 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
32360 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41  straint..**.** A
32370 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f  ll of this is no
32380 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63  -op for a produc
32390 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20  tion build.  It 
323a0 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a  only comes into.
323b0 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65  ** play when the
323c0 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
323d0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
323e0 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  tion is used..*/
323f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d  .#ifdef SQLITE_M
32400 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  EMDEBUG.  void s
32410 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
32420 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  tType(void*,u8);
32430 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
32440 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f  mdebugHasType(vo
32450 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
32460 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
32470 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
32480 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
32490 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
324a0 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e  tType(X,Y)  /* n
324b0 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65  o-op */.# define
324c0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
324d0 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a  HasType(X,Y)  1.
324e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
324f0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58  MemdebugNoType(X
32500 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23  ,Y)   1.#endif.#
32510 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48  define MEMTYPE_H
32520 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20  EAP       0x01  
32530 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20  /* General heap 
32540 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
32550 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c  define MEMTYPE_L
32560 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20  OOKASIDE  0x02  
32570 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69 67  /* Heap that mig
32580 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f  ht have been loo
32590 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e  kaside */.#defin
325a0 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45  e MEMTYPE_PCACHE
325b0 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 50 61       0x04  /* Pa
325c0 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74  ge cache allocat
325d0 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  ions */../*.** T
325e0 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61  hreading interfa
325f0 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  ce.*/.#if SQLITE
32600 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
32610 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65  ADS>0.int sqlite
32620 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51  3ThreadCreate(SQ
32630 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69  LiteThread**,voi
32640 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69  d*(*)(void*),voi
32650 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
32660 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74  ThreadJoin(SQLit
32670 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a  eThread*, void**
32680 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
32690 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
326a0 41 42 4c 45 5f 44 42 50 41 47 45 5f 56 54 41 42  ABLE_DBPAGE_VTAB
326b0 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
326c0 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71  ITE_TEST).int sq
326d0 6c 69 74 65 33 44 62 70 61 67 65 52 65 67 69 73  lite3DbpageRegis
326e0 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ter(sqlite3*);.#
326f0 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
32700 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
32710 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20  DBSTAT_VTAB) || 
32720 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
32730 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33  EST).int sqlite3
32740 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28 73  DbstatRegister(s
32750 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66  qlite3*);.#endif
32760 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ..int sqlite3Exp
32770 72 56 65 63 74 6f 72 53 69 7a 65 28 45 78 70 72  rVectorSize(Expr
32780 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71   *pExpr);.int sq
32790 6c 69 74 65 33 45 78 70 72 49 73 56 65 63 74 6f  lite3ExprIsVecto
327a0 72 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  r(Expr *pExpr);.
327b0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 56 65 63  Expr *sqlite3Vec
327c0 74 6f 72 46 69 65 6c 64 53 75 62 65 78 70 72 28  torFieldSubexpr(
327d0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70  Expr*, int);.Exp
327e0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 6f  r *sqlite3ExprFo
327f0 72 56 65 63 74 6f 72 46 69 65 6c 64 28 50 61 72  rVectorField(Par
32800 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  se*,Expr*,int);.
32810 76 6f 69 64 20 73 71 6c 69 74 65 33 56 65 63 74  void sqlite3Vect
32820 6f 72 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  orErrorMsg(Parse
32830 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23 69 66 6e  *, Expr*);..#ifn
32840 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
32850 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
32860 41 47 53 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  AGS.const char *
32870 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c 65 4f  *sqlite3CompileO
32880 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f 70  ptions(int *pnOp
32890 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64  t);.#endif..#end
328a0 69 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f  if /* SQLITEINT_
328b0 48 20 2a 2f 0a                                   H */.