/ Hex Artifact Content
Login

Artifact 4c910d9c0d88a90e8639a4f83ef05f701ccfe731cf593e757444074f01df4964:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 69 6c 65  *.** The compile
5710: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 53 51  -time options SQ
5720: 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52  LITE_MMAP_READWR
5730: 49 54 45 20 61 6e 64 20 0a 2a 2a 20 53 51 4c 49  ITE and .** SQLI
5740: 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f  TE_ENABLE_BATCH_
5750: 41 54 4f 4d 49 43 5f 57 52 49 54 45 20 61 72 65  ATOMIC_WRITE are
5760: 20 6e 6f 74 20 63 6f 6d 70 61 74 69 62 6c 65 20   not compatible 
5770: 77 69 74 68 20 6f 6e 65 20 61 6e 6f 74 68 65 72  with one another
5780: 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73 74 20 63 68  ..** You must ch
5790: 6f 6f 73 65 20 6f 6e 65 20 6f 72 20 74 68 65 20  oose one or the 
57a0: 6f 74 68 65 72 20 28 6f 72 20 6e 65 69 74 68 65  other (or neithe
57b0: 72 29 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e  r) but not both.
57c0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
57d0: 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44  SQLITE_MMAP_READ
57e0: 57 52 49 54 45 29 20 26 26 20 64 65 66 69 6e 65  WRITE) && define
57f0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
5800: 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49  BATCH_ATOMIC_WRI
5810: 54 45 29 0a 23 65 72 72 6f 72 20 43 61 6e 6e 6f  TE).#error Canno
5820: 74 20 75 73 65 20 62 6f 74 68 20 53 51 4c 49 54  t use both SQLIT
5830: 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45  E_MMAP_READWRITE
5840: 20 61 6e 64 20 53 51 4c 49 54 45 5f 45 4e 41 42   and SQLITE_ENAB
5850: 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f  LE_BATCH_ATOMIC_
5860: 57 52 49 54 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  WRITE.#endif../*
5870: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
5880: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
5890: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
58a0: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
58b0: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
58c0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
58d0: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
58e0: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
58f0: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
5900: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
5910: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
5920: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
5930: 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  cros to compute 
5940: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
5950: 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65  mum of two numbe
5960: 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4d  rs..*/.#ifndef M
5970: 49 4e 0a 23 20 64 65 66 69 6e 65 20 4d 49 4e 28  IN.# define MIN(
5980: 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41  A,B) ((A)<(B)?(A
5990: 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a 23 69  ):(B)).#endif.#i
59a0: 66 6e 64 65 66 20 4d 41 58 0a 23 20 64 65 66 69  fndef MAX.# defi
59b0: 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29  ne MAX(A,B) ((A)
59c0: 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65  >(B)?(A):(B)).#e
59d0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70  ndif../*.** Swap
59e0: 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20   two objects of 
59f0: 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64  type TYPE..*/.#d
5a00: 65 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c  efine SWAP(TYPE,
5a10: 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20  A,B) {TYPE t=A; 
5a20: 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a  A=B; B=t;}../*.*
5a30: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
5a40: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
5a50: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
5a60: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
5a70: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
5a80: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
5a90: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
5aa0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
5ab0: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
5ac0: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
5ad0: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
5ae0: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
5af0: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
5b00: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
5b10: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
5b20: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
5b30: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
5b40: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
5b50: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
5b60: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
5b70: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
5b80: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
5b90: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
5ba0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
5bb0: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
5bc0: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
5bd0: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
5be0: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
5bf0: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
5c00: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
5c10: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
5c20: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
5c30: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
5c40: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
5c50: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
5c60: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
5c70: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
5c80: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
5c90: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
5ca0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
5cb0: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
5cc0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
5cd0: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
5ce0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
5cf0: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
5d00: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
5d10: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
5d20: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
5d30: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
5d40: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
5d50: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
5d60: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d70: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
5d80: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
5d90: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
5da0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
5db0: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
5dc0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
5dd0: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
5de0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
5df0: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
5e00: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
5e10: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
5e20: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
5e30: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
5e40: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
5e50: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
5e60: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
5e70: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
5e80: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5e90: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
5ea0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
5eb0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
5ec0: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
5ed0: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
5ee0: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
5ef0: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
5f00: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
5f10: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
5f20: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
5f30: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
5f40: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5f50: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
5f60: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
5f70: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
5f80: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
5f90: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
5fa0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
5fb0: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
5fc0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
5fd0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
5fe0: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
5ff0: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
6000: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
6010: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
6020: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
6030: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
6040: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
6050: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
6060: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
6070: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
6080: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
6090: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
60a0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
60b0: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
60c0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
60d0: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
60e0: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
60f0: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
6100: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
6110: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
6120: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
6130: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
6140: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
6150: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
6160: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
6170: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
6180: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
6190: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
61a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
61b0: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
61c0: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
61d0: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
61e0: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
61f0: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
6200: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
6210: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
6220: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
6230: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
6240: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
6250: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
6260: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
6270: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
6280: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
6290: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
62a0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
62b0: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
62c0: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
62d0: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
62e0: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
62f0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
6300: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
6310: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
6320: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
6330: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
6340: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
6350: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
6360: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
6370: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
6380: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
6390: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
63a0: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
63b0: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
63c0: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
63d0: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
63e0: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
63f0: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
6400: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
6410: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
6420: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
6430: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
6440: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
6450: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
6460: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
6470: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
6480: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
6490: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
64a0: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
64b0: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
64c0: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
64d0: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
64e0: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
64f0: 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65  LogEst quantitie
6500: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
6510: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
6520: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
6530: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
6540: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
6550: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
6560: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
6570: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
6580: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
6590: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
65a0: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
65b0: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
65c0: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
65d0: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
65e0: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
65f0: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
6600: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
6610: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
6620: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
6630: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
6640: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
6650: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
6660: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
6670: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
6680: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
6690: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
66a0: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
66b0: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
66c0: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
66d0: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
66e0: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
66f0: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
6700: 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  ..** Examples:.*
6710: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
6720: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
6730: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
6740: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
6750: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
6760: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
6770: 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54 45  * Set the SQLITE
6780: 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74  _PTRSIZE macro t
6790: 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
67a0: 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74  bytes in a point
67b0: 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
67c0: 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69  LITE_PTRSIZE.# i
67d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45  f defined(__SIZE
67e0: 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20  OF_POINTER__).# 
67f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6800: 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46  PTRSIZE __SIZEOF
6810: 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69  _POINTER__.# eli
6820: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
6830: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6840: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
6850: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
6860: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65  |    \.       de
6870: 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20  fined(_M_ARM)   
6880: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d  || defined(__arm
6890: 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  __)    || define
68a0: 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66  d(__x86).#   def
68b0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  ine SQLITE_PTRSI
68c0: 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20  ZE 4.# else.#   
68d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
68e0: 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a  RSIZE 8.# endif.
68f0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 75  #endif../* The u
6900: 70 74 72 20 74 79 70 65 20 69 73 20 61 6e 20 75  ptr type is an u
6910: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
6920: 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
6930: 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72 0a 2a  hold a pointer.*
6940: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 48 41  /.#if defined(HA
6950: 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20 20 74  VE_STDINT_H).  t
6960: 79 70 65 64 65 66 20 75 69 6e 74 70 74 72 5f 74  ypedef uintptr_t
6970: 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53 51 4c   uptr;.#elif SQL
6980: 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34 0a 20  ITE_PTRSIZE==4. 
6990: 20 74 79 70 65 64 65 66 20 75 33 32 20 75 70 74   typedef u32 upt
69a0: 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  r;.#else.  typed
69b0: 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23 65 6e  ef u64 uptr;.#en
69c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  dif../*.** The S
69d0: 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53  QLITE_WITHIN(P,S
69e0: 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63 6b 73  ,E) macro checks
69f0: 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69 6e 74   to see if point
6a00: 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  er P points to.*
6a10: 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65 74 77  * something betw
6a20: 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69 76 65  een S (inclusive
6a30: 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75 73 69  ) and E (exclusi
6a40: 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ve)..**.** In ot
6a50: 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69 73 20  her words, S is 
6a60: 61 20 62 75 66 66 65 72 20 61 6e 64 20 45 20 69  a buffer and E i
6a70: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
6a80: 68 65 20 66 69 72 73 74 20 62 79 74 65 20 61 66  he first byte af
6a90: 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f  ter.** the end o
6aa0: 66 20 62 75 66 66 65 72 20 53 2e 20 20 54 68 69  f buffer S.  Thi
6ab0: 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e 73 20  s macro returns 
6ac0: 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e 74 73  true if P points
6ad0: 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a   to something.**
6ae0: 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
6af0: 6e 20 74 68 65 20 62 75 66 66 65 72 20 53 2e 0a  n the buffer S..
6b00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
6b10: 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20  E_WITHIN(P,S,E) 
6b20: 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28 75 70  (((uptr)(P)>=(up
6b30: 74 72 29 28 53 29 29 26 26 28 28 75 70 74 72 29  tr)(S))&&((uptr)
6b40: 28 50 29 3c 28 75 70 74 72 29 28 45 29 29 29 0a  (P)<(uptr)(E))).
6b50: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
6b60: 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  o determine whet
6b70: 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20  her the machine 
6b80: 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65  is big or little
6b90: 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20   endian,.** and 
6ba0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
6bb0: 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f  hat determinatio
6bc0: 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72  n is run-time or
6bd0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a   compile-time..*
6be0: 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65  *.** For best pe
6bf0: 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74  rformance, an at
6c00: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
6c10: 20 67 75 65 73 73 20 61 74 20 74 68 65 20 62 79   guess at the by
6c20: 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e  te-order.** usin
6c30: 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72  g C-preprocessor
6c40: 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61   macros.  If tha
6c50: 74 20 69 73 20 75 6e 73 75 63 63 65 73 73 66 75  t is unsuccessfu
6c60: 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51  l, or if.** -DSQ
6c70: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 30  LITE_BYTEORDER=0
6c80: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79   is set, then by
6c90: 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65  te-order is dete
6ca0: 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e  rmined.** at run
6cb0: 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65  -time..*/.#ifnde
6cc0: 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  f SQLITE_BYTEORD
6cd0: 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ER.# if defined(
6ce0: 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66  i386)     || def
6cf0: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20  ined(__i386__)  
6d00: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49   || defined(_M_I
6d10: 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20  X86) ||    \.   
6d20: 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f    defined(__x86_
6d30: 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  64) || defined(_
6d40: 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65  _x86_64__) || de
6d50: 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c  fined(_M_X64)  |
6d60: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
6d70: 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c  ned(_M_AMD64) ||
6d80: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29   defined(_M_ARM)
6d90: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
6da0: 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c  __x86)   ||    \
6db0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
6dc0: 61 72 6d 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e  arm__).#   defin
6dd0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
6de0: 45 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69  ER    1234.# eli
6df0: 66 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29  f defined(sparc)
6e00: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6e10: 5f 70 70 63 5f 5f 29 0a 23 20 20 20 64 65 66 69  _ppc__).#   defi
6e20: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
6e30: 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 65 6c  DER    4321.# el
6e40: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
6e50: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 30  LITE_BYTEORDER 0
6e60: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
6e70: 23 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  #if SQLITE_BYTEO
6e80: 52 44 45 52 3d 3d 34 33 32 31 0a 23 20 64 65 66  RDER==4321.# def
6e90: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
6ea0: 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69  DIAN    1.# defi
6eb0: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
6ec0: 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e  ENDIAN 0.# defin
6ed0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
6ee0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
6ef0: 31 36 42 45 0a 23 65 6c 69 66 20 53 51 4c 49 54  16BE.#elif SQLIT
6f00: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31 32 33  E_BYTEORDER==123
6f10: 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  4.# define SQLIT
6f20: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
6f30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6f40: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
6f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6f60: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
6f70: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c 73  ITE_UTF16LE.#els
6f80: 65 0a 23 20 69 66 64 65 66 20 53 51 4c 49 54 45  e.# ifdef SQLITE
6f90: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
6fa0: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
6fb0: 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65  3one = 1;.# else
6fc0: 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  .  extern const 
6fd0: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
6fe0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
6ff0: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
7000: 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28  N    (*(char *)(
7010: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29  &sqlite3one)==0)
7020: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7030: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a  _LITTLEENDIAN (*
7040: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7050: 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69  3one)==1).# defi
7060: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
7070: 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f 42  ATIVE  (SQLITE_B
7080: 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f  IGENDIAN?SQLITE_
7090: 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55  UTF16BE:SQLITE_U
70a0: 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a  TF16LE).#endif..
70b0: 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20  /*.** Constants 
70c0: 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74 20  for the largest 
70d0: 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73  and smallest pos
70e0: 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67  sible 64-bit sig
70f0: 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  ned integers..**
7100: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72   These macros ar
7110: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f  e designed to wo
7120: 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20  rk correctly on 
7130: 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20  both 32-bit and 
7140: 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c  64-bit.** compil
7150: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
7160: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28  LARGEST_INT64  (
7170: 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69 36  0xffffffff|(((i6
7180: 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
7190: 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c  2)).#define SMAL
71a0: 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36  LEST_INT64 (((i6
71b0: 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f  4)-1) - LARGEST_
71c0: 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  INT64)../*.** Ro
71d0: 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20  und up a number 
71e0: 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67  to the next larg
71f0: 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  er multiple of 8
7200: 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a  .  This is used.
7210: 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79  ** to force 8-by
7220: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20  te alignment on 
7230: 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74  64-bit architect
7240: 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ures..*/.#define
7250: 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28   ROUND8(x)     (
7260: 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a  ((x)+7)&~7)../*.
7270: 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f  ** Round down to
7280: 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c   the nearest mul
7290: 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64  tiple of 8.*/.#d
72a0: 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38  efine ROUNDDOWN8
72b0: 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a  (x) ((x)&~7)../*
72c0: 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20  .** Assert that 
72d0: 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73  the pointer X is
72e0: 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38   aligned to an 8
72f0: 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20  -byte boundary. 
7300: 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69   This.** macro i
7310: 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68  s used only with
7320: 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76  in assert() to v
7330: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63  erify that the c
7340: 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20  ode gets.** all 
7350: 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69  alignment restri
7360: 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a  ctions correct..
7370: 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66  **.** Except, if
7380: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
7390: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73  LIGNED_MALLOC is
73a0: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74   defined, then t
73b0: 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  he.** underlying
73c0: 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d   malloc() implem
73d0: 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72  entation might r
73e0: 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20  eturn us 4-byte 
73f0: 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74  aligned.** point
7400: 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61  ers.  In that ca
7410: 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20  se, only verify 
7420: 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  4-byte alignment
7430: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
7440: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
7450: 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e  D_MALLOC.# defin
7460: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
7470: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
7480: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
7490: 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c  r*)0)&3)==0).#el
74a0: 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  se.# define EIGH
74b0: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
74c0: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
74d0: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
74e0: 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f  7)==0).#endif../
74f0: 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41  *.** Disable MMA
7500: 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77  P on platforms w
7510: 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e  here it is known
7520: 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a   to not work.*/.
7530: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70  #if defined(__Op
7540: 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69  enBSD__) || defi
7550: 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a  ned(__QNXNTO__).
7560: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
7570: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  AX_MMAP_SIZE.# d
7580: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
7590: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e  _MMAP_SIZE 0.#en
75a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
75b0: 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  lt maximum size 
75c0: 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62  of memory used b
75d0: 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20  y memory-mapped 
75e0: 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a  I/O in the VFS.*
75f0: 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45  /.#ifdef __APPLE
7600: 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61  __.# include <Ta
7610: 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73  rgetConditionals
7620: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  .h>.#endif.#ifnd
7630: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
7640: 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65 66  AP_SIZE.# if def
7650: 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20  ined(__linux__) 
7660: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
7670: 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64  WIN32) \.  || (d
7680: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
7690: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d  ) && defined(__M
76a0: 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64  ACH__)) \.  || d
76b0: 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a  efined(__sun) \.
76c0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46    || defined(__F
76d0: 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c  reeBSD__) \.  ||
76e0: 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f   defined(__Drago
76f0: 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65 66 69  nFly__).#   defi
7700: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
7710: 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30  AP_SIZE 0x7fff00
7720: 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31  00  /* 214741811
7730: 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20  2 */.# else.#   
7740: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
7750: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
7760: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
7770: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
7780: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72  MMAP_SIZE is zer
7790: 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72  o on all platfor
77a0: 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66  ms.  Or, even if
77b0: 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66   a larger.** def
77c0: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
77d0: 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63  s specified at c
77e0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b  ompile-time, mak
77f0: 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64  e sure that it d
7800: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65  oes.** not excee
7810: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d  d the maximum mm
7820: 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e  ap size..*/.#ifn
7830: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
7840: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
7850: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
7860: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  AULT_MMAP_SIZE 0
7870: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
7880: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7890: 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE>SQLITE_MAX_
78a0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65  MMAP_SIZE.# unde
78b0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
78c0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
78d0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
78e0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c  LT_MMAP_SIZE SQL
78f0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7900: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
7910: 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49  Only one of SQLI
7920: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20  TE_ENABLE_STAT3 
7930: 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
7940: 5f 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65  _STAT4 can be de
7950: 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69  fined..** Priori
7960: 74 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53  ty is given to S
7970: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7980: 54 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61  T4.  If either a
7990: 72 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f  re defined, also
79a0: 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .** define SQLIT
79b0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
79c0: 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65  R_STAT4.*/.#ifde
79d0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
79e0: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
79f0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7a00: 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  3.# define SQLIT
7a10: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7a20: 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20  R_STAT4 1.#elif 
7a30: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7a40: 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  AT3.# define SQL
7a50: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7a60: 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69  _OR_STAT4 1.#eli
7a70: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7a80: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
7a90: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
7aa0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7ab0: 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AT4.#endif../*.*
7ac0: 2a 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  * SELECTTRACE_EN
7ad0: 41 42 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69  ABLED will be ei
7ae0: 74 68 65 72 20 31 20 6f 72 20 30 20 64 65 70 65  ther 1 or 0 depe
7af0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
7b00: 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53   or not.** the S
7b10: 65 6c 65 63 74 20 71 75 65 72 79 20 67 65 6e 65  elect query gene
7b20: 72 61 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f  rator tracing lo
7b30: 67 69 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  gic is turned on
7b40: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
7b50: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
7b60: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
7b70: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
7b80: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
7b90: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
7ba0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
7bb0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
7bc0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7bd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7be0: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
7bf0: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
7c00: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
7c10: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
7c20: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
7c30: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
7c40: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
7c50: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
7c60: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
7c70: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
7c80: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
7c90: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
7ca0: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
7cb0: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
7cc0: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
7cd0: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
7ce0: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7cf0: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
7d00: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
7d10: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
7d20: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
7d30: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
7d40: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
7d50: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
7d60: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
7d70: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
7d80: 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76    int (*xFunc)(v
7d90: 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20  oid *,int);  /* 
7da0: 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  The busy callbac
7db0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  k */.  void *pAr
7dc0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7dd0: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74    /* First arg t
7de0: 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  o busy callback 
7df0: 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20  */.  int nBusy; 
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e10: 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  /* Incremented w
7e20: 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61  ith each busy ca
7e30: 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ll */.};../*.** 
7e40: 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74  Name of the mast
7e50: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
7e60: 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64  e.  The master d
7e70: 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a  atabase table.**
7e80: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61   is a special ta
7e90: 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ble that holds t
7ea0: 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74  he names and att
7eb0: 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a  ributes of all.*
7ec0: 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e  * user tables an
7ed0: 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64  d indices..*/.#d
7ee0: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d  efine MASTER_NAM
7ef0: 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f  E       "sqlite_
7f00: 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20  master".#define 
7f10: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
7f20: 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d    "sqlite_temp_m
7f30: 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68  aster"../*.** Th
7f40: 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
7f50: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7f60: 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  se table..*/.#de
7f70: 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54  fine MASTER_ROOT
7f80: 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20         1../*.** 
7f90: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
7fa0: 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f  schema table..*/
7fb0: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
7fc0: 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49  TABLE(x)  ((!OMI
7fd0: 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31  T_TEMPDB)&&(x==1
7fe0: 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  )?TEMP_MASTER_NA
7ff0: 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a  ME:MASTER_NAME).
8000: 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69  ./*.** A conveni
8010: 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20  ence macro that 
8020: 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
8030: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
8040: 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a  n.** an array..*
8050: 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53  /.#define ArrayS
8060: 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29  ize(X)    ((int)
8070: 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f  (sizeof(X)/sizeo
8080: 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a  f(X[0])))../*.**
8090: 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
80a0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
80b0: 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a  power of two.*/.
80c0: 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f  #define IsPowerO
80d0: 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28  fTwo(X) (((X)&((
80e0: 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  X)-1))==0)../*.*
80f0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
8100: 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72  value as a destr
8110: 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75  uctor means to u
8120: 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  se sqlite3DbFree
8130: 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  ()..** The sqlit
8140: 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69  e3DbFree() routi
8150: 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20  ne requires two 
8160: 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65  parameters inste
8170: 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65  ad of the.** one
8180: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
8190: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
81a0: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
81b0: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
81c0: 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  uce.** this magi
81d0: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
81e0: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
81f0: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
8200: 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74  y.  Any.** point
8210: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
8220: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
8230: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
8240: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
8250: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
8260: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
8270: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
8280: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
8290: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
82a0: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
82b0: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
82c0: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
82d0: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
82e0: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
82f0: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
8300: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
8310: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
8320: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
8330: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
8340: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
8350: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
8360: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
8370: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
8380: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
8390: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
83a0: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
83b0: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
83c0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
83d0: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
83e0: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
83f0: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
8400: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
8410: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
8420: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
8430: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
8440: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
8450: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
8460: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
8470: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
8480: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
8490: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
84a0: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
84b0: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
84c0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
84d0: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
84e0: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
84f0: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
8500: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
8510: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
8520: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
8530: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
8540: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
8550: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
8560: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
8570: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
8580: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
8590: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
85a0: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
85b0: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
85c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
85d0: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
85e0: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
85f0: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
8600: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
8610: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
8620: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
8630: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
8640: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
8650: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
8660: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
8670: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
8680: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
8690: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
86a0: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
86b0: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
86c0: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
86d0: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
86e0: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20 23  e SQLITE_WSD.  #
86f0: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8700: 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73  v) v.  #define s
8710: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
8720: 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
8730: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
8740: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
8750: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
8760: 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65  suppress compile
8770: 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74  r warnings and t
8780: 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65  o.** make it cle
8790: 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64  ar to human read
87a0: 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74  ers when a funct
87b0: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
87c0: 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a   deliberately.**
87d0: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
87e0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
87f0: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
8800: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
8810: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
8820: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
8830: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
8840: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
8850: 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  e the.** impleme
8860: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51  ntation of an SQ
8870: 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70  L aggregate step
8880: 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f   callback may no
8890: 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72  t use the.** par
88a0: 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e  ameter indicatin
88b0: 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  g the number of 
88c0: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
88d0: 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74   to the aggregat
88e0: 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77  e,.** if it know
88f0: 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  s that this is e
8900: 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72  nforced elsewher
8910: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20  e..**.** When a 
8920: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
8930: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  er is not used a
8940: 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65  t all within the
8950: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
8960: 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65  ion,.** it is ge
8970: 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e  nerally named "N
8980: 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55  otUsed" or "NotU
8990: 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68  sed2" to make th
89a0: 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65  ings even cleare
89b0: 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74  r..** However, t
89c0: 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20  hese macros may 
89d0: 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
89e0: 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67  suppress warning
89f0: 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20  s related to.** 
8a00: 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  parameters that 
8a10: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
8a20: 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67  e used depending
8a30: 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20   on compilation 
8a40: 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20  options..** For 
8a50: 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61  example those pa
8a60: 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73  rameters only us
8a70: 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73  ed in assert() s
8a80: 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68  tatements. In th
8a90: 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65  ese.** cases the
8aa0: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
8ab0: 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65  named as per the
8ac0: 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f   usual conventio
8ad0: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ns..*/.#define U
8ae0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
8af0: 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65  x) (void)(x).#de
8b00: 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41  fine UNUSED_PARA
8b10: 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53  METER2(x,y) UNUS
8b20: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c  ED_PARAMETER(x),
8b30: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b40: 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61  (y)../*.** Forwa
8b50: 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  rd references to
8b60: 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74   structures.*/.t
8b70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67  ypedef struct Ag
8b80: 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74  gInfo AggInfo;.t
8b90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
8ba0: 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f  thContext AuthCo
8bb0: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
8bc0: 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
8bd0: 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74  o AutoincInfo;.t
8be0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69  ypedef struct Bi
8bf0: 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70  tvec Bitvec;.typ
8c00: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c  edef struct Coll
8c10: 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70  Seq CollSeq;.typ
8c20: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75  edef struct Colu
8c30: 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64  mn Column;.typed
8c40: 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b  ef struct Db Db;
8c50: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c60: 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74  Schema Schema;.t
8c70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
8c80: 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66  pr Expr;.typedef
8c90: 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
8ca0: 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64   ExprList;.typed
8cb0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53 70  ef struct ExprSp
8cc0: 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70  an ExprSpan;.typ
8cd0: 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79  edef struct FKey
8ce0: 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73   FKey;.typedef s
8cf0: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
8d00: 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63  ctor FuncDestruc
8d10: 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tor;.typedef str
8d20: 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63  uct FuncDef Func
8d30: 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Def;.typedef str
8d40: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
8d50: 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70  FuncDefHash;.typ
8d60: 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69  edef struct IdLi
8d70: 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64  st IdList;.typed
8d80: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20  ef struct Index 
8d90: 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73  Index;.typedef s
8da0: 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
8db0: 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74  e IndexSample;.t
8dc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
8dd0: 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b  yClass KeyClass;
8de0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8df0: 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b  KeyInfo KeyInfo;
8e00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e10: 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73  Lookaside Lookas
8e20: 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ide;.typedef str
8e30: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
8e40: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b  t LookasideSlot;
8e50: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e60: 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74  Module Module;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61  ypedef struct Na
8e80: 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f  meContext NameCo
8e90: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
8ea0: 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73  truct Parse Pars
8eb0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8ec0: 74 20 50 72 65 55 70 64 61 74 65 20 50 72 65 55  t PreUpdate PreU
8ed0: 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66 20 73  pdate;.typedef s
8ee0: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
8ef0: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
8f00: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
8f10: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
8f20: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
8f30: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
8f40: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
8f50: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
8f60: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
8f70: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
8f80: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
8f90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fa0: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
8fb0: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
8fc0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
8fd0: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
8fe0: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
8ff0: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
9000: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
9010: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9020: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
9030: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
9040: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
9050: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
9060: 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65  uct TreeView Tre
9070: 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73  eView;.typedef s
9080: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
9090: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
90a0: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
90b0: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
90c0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
90d0: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
90e0: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
90f0: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
9100: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
9110: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9120: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
9130: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9140: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
9150: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9160: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
9170: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
9180: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
9190: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
91a0: 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a  t With With;../*
91b0: 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74 20   A VList object 
91c0: 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69 6e  records a mappin
91d0: 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d 65  g between parame
91e0: 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f 77  ters/variables/w
91f0: 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20 74  ildcards.** in t
9200: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
9210: 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c 20   (such as $abc, 
9220: 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20 61  @pqr, or :xyz) a
9230: 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a 2a  nd the integer.*
9240: 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  * variable numbe
9250: 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
9260: 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65 72  h that parameter
9270: 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d 61  .  See the forma
9280: 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a 2a  t description.**
9290: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 56   on the sqlite3V
92a0: 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69 6e  ListAdd() routin
92b0: 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72  e for more infor
92c0: 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73 74  mation.  A VList
92d0: 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75   is really.** ju
92e0: 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69  st an array of i
92f0: 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70 65  ntegers..*/.type
9300: 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a 0a  def int VList;..
9310: 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72  /*.** Defer sour
9320: 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20  cing vdbe.h and 
9330: 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66  btree.h until af
9340: 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64  ter the "u8" and
9350: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
9360: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
9370: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
9380: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
9390: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
93a0: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
93b0: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
93c0: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
93d0: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
93e0: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
93f0: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
9400: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
9410: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  h".#include "os.
9420: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
9430: 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51  ex.h"../* The SQ
9440: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
9450: 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  LE compile-time 
9460: 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 73  option used to s
9470: 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2a  et the default.*
9480: 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  * synchronous se
9490: 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e 20  tting to EXTRA. 
94a0: 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72   It is no longer
94b0: 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23   supported..*/.#
94c0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54  ifdef SQLITE_EXT
94d0: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61 72  RA_DURABLE.# war
94e0: 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45 5f  ning Use SQLITE_
94f0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9500: 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f 66  OUS=3 instead of
9510: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9520: 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 53  RABLE.# define S
9530: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9540: 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64  NCHRONOUS 3.#end
9550: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c  if../*.** Defaul
9560: 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65  t synchronous le
9570: 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  vels..**.** Note
9580: 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74 6f   that (for histo
9590: 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74 68  rcal reasons) th
95a0: 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  e PAGER_SYNCHRON
95b0: 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66  OUS_* macros dif
95c0: 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  fer.** from the 
95d0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
95e0: 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65  YNCHRONOUS value
95f0: 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20   by 1..**.**    
9600: 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59 4e         PAGER_SYN
9610: 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20 44  CHRONOUS       D
9620: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9630: 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20 20  US.**   OFF     
9640: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9660: 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20  0.**   NORMAL   
9670: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
9680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
9690: 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20 20  .**   FULL      
96a0: 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20      3           
96b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 0a                2.
96c0: 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20 20  **   EXTRA      
96d0: 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20 20     4            
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a 2a               3.*
96f0: 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d 41  *.** The "PRAGMA
9700: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74   synchronous" st
9710: 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65  atement also use
9720: 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  s the zero-based
9730: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20   numbers..** In 
9740: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
9750: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9760: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
9770: 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e   all external in
9780: 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20  terfaces.** and 
9790: 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76 61  the one-based va
97a0: 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  lues are used in
97b0: 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66  ternally..*/.#if
97c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
97d0: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
97e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
97f0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9800: 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69 66  OUS 2.#endif.#if
9810: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
9820: 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e  ULT_WAL_SYNCHRON
9830: 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  OUS.# define SQL
9840: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f  ITE_DEFAULT_WAL_
9850: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49  SYNCHRONOUS SQLI
9860: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9870: 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f  RONOUS.#endif../
9880: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
9890: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
98a0: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
98b0: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
98c0: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
98d0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
98e0: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
98f0: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
9900: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
9910: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
9920: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
9930: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
9940: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
9950: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
9960: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
9970: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
9980: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
9990: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
99a0: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
99b0: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
99c0: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
99d0: 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20 20   *zDbSName;     
99e0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
99f0: 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68 65   database. (sche
9a00: 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69 6c  ma name, not fil
9a10: 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72 65  ename) */.  Btre
9a20: 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
9a30: 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73   /* The B*Tree s
9a40: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 69  tructure for thi
9a50: 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  s database file 
9a60: 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c  */.  u8 safety_l
9a70: 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77  evel;     /* How
9a80: 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20 73   aggressive at s
9a90: 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64  yncing data to d
9aa0: 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79 6e  isk */.  u8 bSyn
9ab0: 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  cSet;         /*
9ac0: 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d 41   True if "PRAGMA
9ad0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22 20   synchronous=N" 
9ae0: 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f 0a  has been run */.
9af0: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
9b00: 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a;     /* Pointe
9b10: 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63  r to database sc
9b20: 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73  hema (possibly s
9b30: 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  hared) */.};../*
9b40: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
9b50: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
9b60: 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65   structure store
9b70: 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68  s a database sch
9b80: 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20  ema..**.** Most 
9b90: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61  Schema objects a
9ba0: 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  re associated wi
9bb0: 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65  th a Btree.  The
9bc0: 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a   exception is.**
9bd0: 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20   the Schema for 
9be0: 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65  the TEMP databae
9bf0: 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31  s (sqlite3.aDb[1
9c00: 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65  ]) which is free
9c10: 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e  -standing..** In
9c20: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
9c30: 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68  de, a single Sch
9c40: 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62  ema object can b
9c50: 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  e shared by mult
9c60: 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74  iple.** Btrees t
9c70: 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
9c80: 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67   same underlying
9c90: 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74   BtShared object
9ca0: 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f  ..**.** Schema o
9cb0: 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d  bjects are autom
9cc0: 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63  atically dealloc
9cd0: 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  ated when the la
9ce0: 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a  st Btree that.**
9cf0: 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d   references them
9d00: 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20   is destroyed.  
9d10: 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61   The TEMP Schema
9d20: 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65   is manually fre
9d30: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
9d40: 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41  _close()..*.** A
9d50: 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20   thread must be 
9d60: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
9d70: 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
9d80: 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72  ding Btree in or
9d90: 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73  der.** to access
9da0: 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e   Schema content.
9db0: 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74    This implies t
9dc0: 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d  hat the thread m
9dd0: 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68  ust also be.** h
9de0: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
9df0: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f  n the sqlite3 co
9e00: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
9e10: 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42   that owns the B
9e20: 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54  tree..** For a T
9e30: 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79  EMP Schema, only
9e40: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
9e50: 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65  mutex is require
9e60: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68  d..*/.struct Sch
9e70: 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65  ema {.  int sche
9e80: 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20  ma_cookie;   /* 
9e90: 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  Database schema 
9ea0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
9eb0: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
9ec0: 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f    int iGeneratio
9ed0: 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61  n;     /* Genera
9ee0: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49  tion counter.  I
9ef0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
9f00: 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20  each change */. 
9f10: 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20   Hash tblHash;  
9f20: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62        /* All tab
9f30: 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  les indexed by n
9f40: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64  ame */.  Hash id
9f50: 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  xHash;        /*
9f60: 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64   All (named) ind
9f70: 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  ices indexed by 
9f80: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  name */.  Hash t
9f90: 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f  rigHash;       /
9fa0: 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69  * All triggers i
9fb0: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
9fc0: 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73  /.  Hash fkeyHas
9fd0: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
9fe0: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20  foreign keys by 
9ff0: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
a000: 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65   name */.  Table
a010: 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20   *pSeqTab;      
a020: 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  /* The sqlite_se
a030: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65  quence table use
a040: 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45  d by AUTOINCREME
a050: 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f  NT */.  u8 file_
a060: 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20  format;      /* 
a070: 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65  Schema format ve
a080: 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66  rsion for this f
a090: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ile */.  u8 enc;
a0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a0b0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75   Text encoding u
a0c0: 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61  sed by this data
a0d0: 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63  base */.  u16 sc
a0e0: 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f  hemaFlags;     /
a0f0: 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74  * Flags associat
a100: 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68  ed with this sch
a110: 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63  ema */.  int cac
a120: 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a  he_size;      /*
a130: 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
a140: 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63   to use in the c
a150: 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ache */.};../*.*
a160: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
a170: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
a180: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
a190: 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a  r bits in the.**
a1a0: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
a1b0: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
a1c0: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
a1d0: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
a1e0: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
a1f0: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
a200: 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
a210: 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70  ine DbHasAnyProp
a220: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28  erty(D,I,P)  (((
a230: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
a240: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
a250: 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
a260: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44   DbSetProperty(D
a270: 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61  ,I,P)     (D)->a
a280: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a290: 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a  chemaFlags|=(P).
a2a0: 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50  #define DbClearP
a2b0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a2c0: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
a2d0: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a2e0: 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41  s&=~(P)../*.** A
a2f0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
a300: 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61  r the DB.pSchema
a310: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
a320: 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65  *.** The DB_Sche
a330: 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73  maLoaded flag is
a340: 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64   set after the d
a350: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
a360: 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20  as been.** read 
a370: 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61  into internal ha
a380: 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  sh tables..**.**
a390: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
a3a0: 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20   means that one 
a3b0: 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61  or more views ha
a3c0: 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ve column names 
a3d0: 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65  that.** have bee
a3e0: 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49  n filled out.  I
a3f0: 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  f the schema cha
a400: 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75  nges, these colu
a410: 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a  mn names might.*
a420: 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f  * changes and so
a430: 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e   the view will n
a440: 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e  eed to be reset.
a450: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53  .*/.#define DB_S
a460: 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30  chemaLoaded    0
a470: 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63  x0001  /* The sc
a480: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f  hema has been lo
a490: 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aded */.#define 
a4a0: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
a4b0: 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f     0x0002  /* So
a4c0: 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65  me views have de
a4d0: 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  fined column nam
a4e0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
a4f0: 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20  _Empty          
a500: 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20   0x0004  /* The 
a510: 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c  file is empty (l
a520: 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a  ength 0 bytes) *
a530: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 52 65 73  /.#define DB_Res
a540: 65 74 57 61 6e 74 65 64 20 20 20 20 20 30 78 30  etWanted     0x0
a550: 30 30 38 20 20 2f 2a 20 52 65 73 65 74 20 74 68  008  /* Reset th
a560: 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 53  e schema when nS
a570: 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a  chemaLock==0 */.
a580: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
a590: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
a5a0: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
a5b0: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
a5c0: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
a5d0: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
a5e0: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
a5f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
a600: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
a610: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
a620: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
a630: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
a640: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
a650: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
a660: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
a670: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
a680: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
a690: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
a6a0: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
a6b0: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
a6c0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
a6d0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
a6e0: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
a6f0: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
a700: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
a710: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
a720: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
a730: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
a740: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
a750: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
a760: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
a770: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
a780: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
a790: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
a7a0: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
a7b0: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
a7c0: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
a7d0: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
a7e0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
a7f0: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
a800: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
a810: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
a820: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
a830: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
a840: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
a850: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
a860: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
a870: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
a880: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
a890: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
a8a0: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
a8b0: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
a8c0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
a8d0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
a8e0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
a8f0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
a900: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
a910: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
a920: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
a930: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
a940: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
a950: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
a960: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
a970: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
a980: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
a990: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
a9a0: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
a9b0: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
a9c0: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
a9d0: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
a9e0: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
a9f0: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
aa00: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
aa10: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
aa20: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
aa30: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
aa40: 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c   {.  u32 bDisabl
aa50: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
aa60: 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65  Only operate the
aa70: 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20   lookaside when 
aa80: 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a  zero */.  u16 sz
aa90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
aaa0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
aab0: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
aac0: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
aad0: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
aae0: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
aaf0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
ab00: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
ab10: 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f 74 3b 20  */.  u32 nSlot; 
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ab30: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b 61 73  Number of lookas
ab40: 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61  ide slots alloca
ab50: 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 61 6e 53  ted */.  u32 anS
ab60: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
ab70: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
ab80: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
ab90: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
aba0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
abb0: 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a 20 4c 69   *pInit;   /* Li
abc0: 73 74 20 6f 66 20 62 75 66 66 65 72 73 20 6e 6f  st of buffers no
abd0: 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
abe0: 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  d */.  Lookaside
abf0: 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f  Slot *pFree;   /
ac00: 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61  * List of availa
ac10: 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  ble buffers */. 
ac20: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20   void *pStart;  
ac30: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
ac40: 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61  t byte of availa
ac50: 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  ble memory space
ac60: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64   */.  void *pEnd
ac70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
ac80: 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74   First byte past
ac90: 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c   end of availabl
aca0: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74  e space */.};.st
acb0: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
acc0: 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  ot {.  Lookaside
acd0: 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  Slot *pNext;    
ace0: 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69  /* Next buffer i
acf0: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72  n the list of fr
ad00: 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b  ee buffers */.};
ad10: 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74  ../*.** A hash t
ad20: 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69  able for built-i
ad30: 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  n function defin
ad40: 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63  itions.  (Applic
ad50: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a  ation-defined.**
ad60: 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61   functions use a
ad70: 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74   regular table t
ad80: 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68  able from hash.h
ad90: 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61  .).**.** Hash ea
ada0: 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ch FuncDef struc
adb0: 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66  ture into one of
adc0: 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68   the FuncDefHash
add0: 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43  .a[] slots..** C
ade0: 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e  ollisions are on
adf0: 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70   the FuncDef.u.p
ae00: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23  Hash chain..*/.#
ae10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ae20: 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74  NC_HASH_SZ 23.st
ae30: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
ae40: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
ae50: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
ae60: 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  _SZ];       /* H
ae70: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
ae80: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23  nctions */.};..#
ae90: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
aea0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
aeb0: 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69  ./*.** Informati
aec0: 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22  on held in the "
aed0: 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73  sqlite3" databas
aee0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  e connection obj
aef0: 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ect and used.** 
af00: 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61  to manage user a
af10: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a  uthentication..*
af20: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
af30: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
af40: 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  h sqlite3_userau
af50: 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74  th;.struct sqlit
af60: 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20  e3_userauth {.  
af70: 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20  u8 authLevel;   
af80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
af90: 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74   Current authent
afa0: 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f  ication level */
afb0: 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20  .  int nAuthPW; 
afc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afd0: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
afe0: 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73  zAuthPW in bytes
aff0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
b000: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
b010: 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20      /* Password 
b020: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
b030: 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cate */.  char *
b040: 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20  zAuthUser;      
b050: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
b060: 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74  name used to aut
b070: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a  henticate */.};.
b080: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
b090: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75  es for sqlite3_u
b0a0: 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65  serauth.authLeve
b0b0: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  l */.#define UAU
b0c0: 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30  TH_Unknown     0
b0d0: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
b0e0: 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63  cation not yet c
b0f0: 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e  hecked */.#defin
b100: 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20  e UAUTH_Fail    
b110: 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65      1     /* Use
b120: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
b130: 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69   failed */.#defi
b140: 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20  ne UAUTH_User   
b150: 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75       2     /* Au
b160: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
b170: 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a   normal user */.
b180: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64  #define UAUTH_Ad
b190: 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20  min       3     
b1a0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
b1b0: 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72   as an administr
b1c0: 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63  ator */../* Func
b1d0: 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20  tions used only 
b1e0: 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a  by user authoriz
b1f0: 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69  ation logic */.i
b200: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
b210: 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68  thTable(const ch
b220: 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
b230: 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f  3UserAuthCheckLo
b240: 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  gin(sqlite3*,con
b250: 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76  st char*,u8*);.v
b260: 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41  oid sqlite3UserA
b270: 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  uthInit(sqlite3*
b280: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
b290: 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33  ryptFunc(sqlite3
b2a0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
b2b0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
b2c0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b2d0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b2e0: 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ATION */../*.** 
b2f0: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20  typedef for the 
b300: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
b310: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e  llback function.
b320: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
b330: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b340: 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20  ATION.  typedef 
b350: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
b360: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
b370: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b380: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b390: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3b0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20     const char*, 
b3c0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
b3d0: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e  lse.  typedef in
b3e0: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
b3f0: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
b400: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b410: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
b420: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b440: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
b450: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
b460: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b470: 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73  CATED./* This is
b480: 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45   an extra SQLITE
b490: 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61  _TRACE macro tha
b4a0: 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67  t indicates "leg
b4b0: 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20  acy" tracing.** 
b4c0: 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20  in the style of 
b4d0: 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a  sqlite3_trace().
b4e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b4f0: 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20  E_TRACE_LEGACY  
b500: 30 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66 69  0x80.#else.#defi
b510: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
b520: 4c 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69 66  LEGACY  0.#endif
b530: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
b540: 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 0a  DEPRECATED */...
b550: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
b560: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
b570: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
b580: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
b590: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
b5a0: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
b5b0: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
b5c0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
b5d0: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
b5e0: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
b5f0: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
b600: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
b610: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
b620: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
b630: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
b640: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
b650: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
b660: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
b670: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
b680: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
b690: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
b6a0: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
b6b0: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b6d0: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
b6e0: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
b6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b700: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
b710: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
b720: 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6d  n use */.  u32 m
b730: 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  DbFlags;        
b740: 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67           /* flag
b750: 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e 74 65  s recording inte
b760: 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20  rnal state */.  
b770: 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b790: 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c 65 20   flags settable 
b7a0: 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65 65 20  by pragmas. See 
b7b0: 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c  below */.  i64 l
b7c0: 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20  astRowid;       
b7d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49           /* ROWI
b7e0: 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74  D of most recent
b7f0: 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f   insert (see abo
b800: 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d  ve) */.  i64 szM
b810: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
b820: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
b830: 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74  t mmap_size sett
b840: 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53 63  ing */.  u32 nSc
b850: 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20 20  hemaLock;       
b860: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
b870: 20 72 65 73 65 74 20 74 68 65 20 73 63 68 65 6d   reset the schem
b880: 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  a when non-zero 
b890: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
b8a0: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
b8b0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73     /* Flags pass
b8c0: 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66  ed to sqlite3_vf
b8d0: 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69  s.xOpen() */.  i
b8e0: 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  nt errCode;     
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b900: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
b910: 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a  r code (SQLITE_*
b920: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61  ) */.  int errMa
b930: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sk;             
b940: 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74       /* & result
b950: 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73   codes with this
b960: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
b970: 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73 45  g */.  int iSysE
b980: 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20 20  rrno;           
b990: 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76 61       /* Errno va
b9a0: 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73 79  lue from last sy
b9b0: 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20 20  stem error */.  
b9c0: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b9e0: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
b9f0: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
ba00: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65  ations */.  u8 e
ba10: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
ba20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
ba30: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  t encoding */.  
ba40: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ba60: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
ba70: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
ba80: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
ba90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
baa0: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
bab0: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
bac0: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bae0: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
baf0: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
bb00: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42  ilure */.  u8 bB
bb10: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20  enignMalloc;    
bb20: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
bb30: 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20  ot require OOMs 
bb40: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
bb50: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20  dfltLockMode;   
bb60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
bb70: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  fault locking-mo
bb80: 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20  de for attached 
bb90: 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20  dbs */.  signed 
bba0: 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63  char nextAutovac
bbb0: 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61  ;      /* Autova
bbc0: 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20  c setting after 
bbd0: 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f  VACUUM if >=0 */
bbe0: 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72  .  u8 suppressEr
bbf0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
bc00: 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65   /* Do not issue
bc10: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
bc20: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
bc30: 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20  vtabOnConflict; 
bc40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
bc50: 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f  lue to return fo
bc60: 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e  r s3_vtab_on_con
bc70: 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20  flict() */.  u8 
bc80: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
bc90: 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72  epoint;    /* Tr
bca0: 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d  ue if the outerm
bcb0: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73  ost savepoint is
bcc0: 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54   a TS */.  u8 mT
bcd0: 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20 20  race;           
bce0: 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f           /* zero
bcf0: 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f   or more SQLITE_
bd00: 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20  TRACE flags */. 
bd10: 20 75 38 20 73 6b 69 70 42 74 72 65 65 4d 75 74   u8 skipBtreeMut
bd20: 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ex;            /
bd30: 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61  * True if no sha
bd40: 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e  red-cache backen
bd50: 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45  ds */.  u8 nSqlE
bd60: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
bd70: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
bd80: 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71  of pending OP_Sq
bd90: 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f  lExec opcodes */
bda0: 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73  .  int nextPages
bdb0: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
bdc0: 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74   /* Pagesize aft
bdd0: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20  er VACUUM if >0 
bde0: 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20  */.  u32 magic; 
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be00: 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62     /* Magic numb
be10: 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69  er for detect li
be20: 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a  brary misuse */.
be30: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
be40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be50: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
be60: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61  d by sqlite3_cha
be70: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
be80: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20  nTotalChange;   
be90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
bea0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
beb0: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
bec0: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
bed0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f  aLimit[SQLITE_N_
bee0: 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d  LIMIT];   /* Lim
bef0: 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  its */.  int nMa
bf00: 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20  xSorterMmap;    
bf10: 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
bf20: 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e  m size of region
bf30: 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74  s mapped by sort
bf40: 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  er */.  struct s
bf50: 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b  qlite3InitInfo {
bf60: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
bf70: 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67  tion used during
bf80: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
bf90: 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e  */.    int newTn
bfa0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
bfb0: 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f     /* Rootpage o
bfc0: 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  f table being in
bfd0: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
bfe0: 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20   u8 iDb;        
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c000: 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73  Which db file is
c010: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
c020: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73  ed */.    u8 bus
c030: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
c040: 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66        /* TRUE if
c050: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69   currently initi
c060: 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75  alizing */.    u
c070: 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b  8 orphanTrigger;
c080: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
c090: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  st statement is 
c0a0: 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72  orphaned TEMP tr
c0b0: 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  igger */.    u8 
c0c0: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20  imposterTable;  
c0d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c           /* Buil
c0e0: 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72  ding an imposter
c0f0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e   table */.  } in
c100: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
c110: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
c120: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c130: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
c140: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
c150: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
c160: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c170: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c180: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
c190: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
c1a0: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c1c0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c1d0: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
c1e0: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
c1f0: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
c200: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c210: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
c220: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
c230: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ec() */.  int nV
c240: 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20  Destroy;        
c250: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c260: 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56  r of active OP_V
c270: 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
c280: 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74  ns */.  int nExt
c290: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
c2a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c2b0: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
c2c0: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
c2d0: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
c2e0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
c2f0: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
c300: 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20  ry handles */.  
c310: 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33  int (*xTrace)(u3
c320: 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f  2,void*,void*,vo
c330: 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61  id*);     /* Tra
c340: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
c350: 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67   void *pTraceArg
c360: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c370: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c380: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72  gument to the tr
c390: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
c3a0: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
c3b0: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
c3c0: 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50  har*,u64);  /* P
c3d0: 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f  rofiling functio
c3e0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  n */.  void *pPr
c3f0: 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20  ofileArg;       
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c410: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c420: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
c430: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d   */.  void *pCom
c440: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
c450: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c460: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
c470: 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e  llback() */.  in
c480: 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  t (*xCommitCallb
c490: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20  ack)(void*);    
c4a0: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
c4b0: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
c4c0: 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b   void *pRollback
c4d0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
c4e0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c4f0: 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  o xRollbackCallb
c500: 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ack() */.  void 
c510: 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  (*xRollbackCallb
c520: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20  ack)(void*); /* 
c530: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
c540: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
c550: 69 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a  id *pUpdateArg;.
c560: 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65    void (*xUpdate
c570: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
c580: 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
c590: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c  ,const char*,sql
c5a0: 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64  ite_int64);.#ifd
c5b0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
c5c0: 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
c5d0: 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61    void *pPreUpda
c5e0: 74 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  teArg;          
c5f0: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
c600: 74 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43  t to xPreUpdateC
c610: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
c620: 64 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61  d (*xPreUpdateCa
c630: 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65  llback)(   /* Re
c640: 67 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73  gistered using s
c650: 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65  qlite3_preupdate
c660: 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76  _hook() */.    v
c670: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
c680: 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68  t,char const*,ch
c690: 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65  ar const*,sqlite
c6a0: 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f  3_int64,sqlite3_
c6b0: 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65  int64.  );.  Pre
c6c0: 55 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61  Update *pPreUpda
c6d0: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  te;        /* Co
c6e0: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
c6f0: 20 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c   pre-update call
c700: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  back */.#endif /
c710: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
c720: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a  PREUPDATE_HOOK *
c730: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
c740: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
c750: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
c760: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
c770: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
c780: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
c790: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
c7a0: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
c7b0: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
c7c0: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
c7d0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
c7e0: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
c7f0: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
c800: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
c810: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
c820: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
c830: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
c840: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
c850: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
c860: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
c870: 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  age */.  union {
c880: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
c890: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
c8a0: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
c8b0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
c8c0: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
c8d0: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
c8e0: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
c8f0: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
c900: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
c910: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
c920: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
c930: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
c940: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
c950: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
c960: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73  UTHORIZATION.  s
c970: 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75  qlite3_xauth xAu
c980: 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  th;          /* 
c990: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
c9a0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
c9b0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
c9c0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c9d0: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
c9e0: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
c9f0: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
ca00: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
ca10: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
ca20: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
ca30: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
ca40: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
ca50: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
ca60: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
ca70: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
ca80: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
ca90: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
caa0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
cab0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
cac0: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
cad0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
cae0: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
caf0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
cb00: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
cb10: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
cb20: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
cb30: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
cb40: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
cb50: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
cb60: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
cb70: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
cb80: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
cb90: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
cba0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
cbb0: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
cbc0: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
cbd0: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
cbe0: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
cbf0: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
cc00: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
cc10: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
cc20: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
cc30: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
cc40: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
cc50: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
cc60: 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65  ;    /* Disconne
cc70: 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74  ct these in next
cc80: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
cc90: 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48  () */.#endif.  H
cca0: 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20  ash aFunc;      
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ccc0: 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f  Hash table of co
ccd0: 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  nnection functio
cce0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f  ns */.  Hash aCo
ccf0: 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20  llSeq;          
cd00: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c        /* All col
cd10: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
cd20: 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65   */.  BusyHandle
cd30: 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20  r busyHandler;  
cd40: 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c      /* Busy call
cd50: 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62  back */.  Db aDb
cd60: 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20  Static[2];      
cd70: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69          /* Stati
cd80: 63 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20  c space for the 
cd90: 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e  2 default backen
cda0: 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  ds */.  Savepoin
cdb0: 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20  t *pSavepoint;  
cdc0: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
cdd0: 20 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e   active savepoin
cde0: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79  ts */.  int busy
cdf0: 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20  Timeout;        
ce00: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61        /* Busy ha
ce10: 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69  ndler timeout, i
ce20: 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20  n msec */.  int 
ce30: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  nSavepoint;     
ce40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ce50: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
ce60: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
ce70: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74  s */.  int nStat
ce80: 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20  ement;          
ce90: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
cea0: 66 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65  f nested stateme
ceb0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
cec0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
ced0: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
cee0: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
cef0: 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  red constraints 
cf00: 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
cf10: 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  . */.  i64 nDefe
cf20: 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
cf30: 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65       /* Net defe
cf40: 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63  rred immediate c
cf50: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
cf60: 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65  int *pnBytesFree
cf70: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
cf80: 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e   If not NULL, in
cf90: 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20  crement this in 
cfa0: 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64  DbFree() */.#ifd
cfb0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
cfc0: 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
cfd0: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
cfe0: 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  g variables are 
cff0: 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79  all protected by
d000: 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54   the STATIC_MAST
d010: 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  ER.  ** mutex, n
d020: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
d030: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
d040: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
d050: 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a  tify.c..  **.  *
d060: 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b  * When X.pUnlock
d070: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
d080: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58  hat means that X
d090: 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20   is waiting for 
d0a0: 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b  Y to.  ** unlock
d0b0: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
d0c0: 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20  proceed..  **.  
d0d0: 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b  ** When X.pBlock
d0e0: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ingConnection==Y
d0f0: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
d100: 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  t something that
d110: 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72   X tried.  ** tr
d120: 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74  ied to do recent
d130: 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  ly failed with a
d140: 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  n SQLITE_LOCKED 
d150: 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63  error due to loc
d160: 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20  ks.  ** held by 
d170: 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  Y..  */.  sqlite
d180: 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e  3 *pBlockingConn
d190: 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65  ection; /* Conne
d1a0: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65  ction that cause
d1b0: 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  d SQLITE_LOCKED 
d1c0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55  */.  sqlite3 *pU
d1d0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b  nlockConnection;
d1e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
d1f0: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63  nnection to watc
d200: 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a  h for unlock */.
d210: 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41    void *pUnlockA
d220: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
d230: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
d240: 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f  ent to xUnlockNo
d250: 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tify */.  void (
d260: 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28  *xUnlockNotify)(
d270: 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20  void **, int);  
d280: 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79  /* Unlock notify
d290: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73   callback */.  s
d2a0: 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f  qlite3 *pNextBlo
d2b0: 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cked;        /* 
d2c0: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
d2d0: 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e  all blocked conn
d2e0: 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  ections */.#endi
d2f0: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
d300: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
d310: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73  ION.  sqlite3_us
d320: 65 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20  erauth auth;    
d330: 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68      /* User auth
d340: 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72  entication infor
d350: 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  mation */.#endif
d360: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  .};../*.** A mac
d370: 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74  ro to discover t
d380: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  he encoding of a
d390: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64   database..*/.#d
d3a0: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43  efine SCHEMA_ENC
d3b0: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
d3c0: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
d3d0: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
d3e0: 20 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65          ((db)->e
d3f0: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
d400: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
d410: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
d420: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
d430: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
d440: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
d450: 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  ):.**      SQLIT
d460: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
d470: 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59  == PAGER_FULLFSY
d480: 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  NC.**      SQLIT
d490: 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20  E_CkptFullFSync 
d4a0: 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55  == PAGER_CKPT_FU
d4b0: 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20  LLFSYNC.**      
d4c0: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
d4d0: 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41  l    == PAGER_CA
d4e0: 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65  CHE_SPILL.*/.#de
d4f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
d500: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
d510: 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20  00001  /* OK to 
d520: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
d530: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
d540: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
d550: 65 46 6d 74 20 20 30 78 30 30 30 30 30 30 30 32  eFmt  0x00000002
d560: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
d570: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
d580: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
d590: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
d5a0: 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30  ames   0x0000000
d5b0: 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20  4  /* Show full 
d5c0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20  column names on 
d5d0: 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e  SELECT */.#defin
d5e0: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
d5f0: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30  nc      0x000000
d600: 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  08  /* Use full 
d610: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
d620: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
d630: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
d640: 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 31 30  Sync  0x00000010
d650: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
d660: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
d670: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
d680: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
d690: 20 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20      0x00000020  
d6a0: 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70  /* OK to spill p
d6b0: 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64  ager cache */.#d
d6c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
d6d0: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
d6e0: 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20  000040  /* Show 
d6f0: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
d700: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
d710: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
d720: 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20       0x00000080 
d730: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
d740: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
d750: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
d760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d780: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
d790: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
d7a0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
d7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d7d0: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
d7e0: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
d7f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d800: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
d810: 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49  0x00000100  /* I
d820: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
d830: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
d840: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d860: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
d870: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
d880: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
d890: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
d8a0: 63 6b 73 20 20 20 30 78 30 30 30 30 30 32 30 30  cks   0x00000200
d8b0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
d8c0: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
d8d0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
d8e0: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
d8f0: 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30 34 30  mmit   0x0000040
d900: 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d  0  /* READ UNCOM
d910: 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72 65 64  MITTED in shared
d920: 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e  -cache */.#defin
d930: 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f  e SQLITE_NoCkptO
d940: 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30 30 38  nClose  0x000008
d950: 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70  00  /* No checkp
d960: 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f  oint on close()/
d970: 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e  DETACH */.#defin
d980: 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  e SQLITE_Reverse
d990: 4f 72 64 65 72 20 20 20 30 78 30 30 30 30 31 30  Order   0x000010
d9a0: 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75  00  /* Reverse u
d9b0: 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73  nordered SELECTs
d9c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d9d0: 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20  TE_RecTriggers  
d9e0: 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a    0x00002000  /*
d9f0: 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76   Enable recursiv
da00: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
da10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72  efine SQLITE_For
da20: 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30  eignKeys    0x00
da30: 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72  004000  /* Enfor
da40: 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ce foreign key c
da50: 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23  onstraints  */.#
da60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75  define SQLITE_Au
da70: 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30  toIndex      0x0
da80: 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e 61 62  0008000  /* Enab
da90: 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  le automatic ind
daa0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
dab0: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
dac0: 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30 30 30  sion  0x00010000
dad0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
dae0: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
daf0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
db00: 64 45 78 74 46 75 6e 63 20 20 20 20 30 78 30 30  dExtFunc    0x00
db10: 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  020000  /* Enabl
db20: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
db30: 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23  () SQL func */.#
db40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
db50: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
db60: 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0040000  /* True
db70: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
db80: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
db90: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
dba0: 20 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20       0x00080000 
dbb0: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
dbc0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
dbd0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
dbe0: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
dbf0: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44 69 73  00100000  /* Dis
dc00: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
dc10: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
dc20: 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65   SQLITE_CellSize
dc30: 43 6b 20 20 20 20 20 30 78 30 30 32 30 30 30 30  Ck     0x0020000
dc40: 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65  0  /* Check btre
dc50: 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20  e cell sizes on 
dc60: 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  load */.#define 
dc70: 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e  SQLITE_Fts3Token
dc80: 69 7a 65 72 20 20 30 78 30 30 34 30 30 30 30 30  izer  0x00400000
dc90: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33    /* Enable fts3
dca0: 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f  _tokenizer(2) */
dcb0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dcc0: 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20 20 30  EnableQPSG     0
dcd0: 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20 51 75  x00800000  /* Qu
dce0: 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74 61 62  ery Planner Stab
dcf0: 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65 65 20  ility Guarantee 
dd00: 2a 2f 0a 2f 2a 20 46 6c 61 67 73 20 75 73 65 64  */./* Flags used
dd10: 20 6f 6e 6c 79 20 69 66 20 64 65 62 75 67 67 69   only if debuggi
dd20: 6e 67 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ng */.#ifdef SQL
dd30: 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69 6e  ITE_DEBUG.#defin
dd40: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
dd50: 65 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30  e       0x080000
dd60: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  00  /* Debug pri
dd70: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
dd80: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
dd90: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
dda0: 69 6e 67 20 20 20 20 30 78 31 30 30 30 30 30 30  ing    0x1000000
ddb0: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
ddc0: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
ddd0: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
dde0: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
ddf0: 65 20 20 20 20 20 20 30 78 32 30 30 30 30 30 30  e      0x2000000
de00: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72  0  /* True to tr
de10: 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69  ace VDBE executi
de20: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
de30: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
de40: 61 63 65 20 30 78 34 30 30 30 30 30 30 30 20 20  ace 0x40000000  
de50: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
de60: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
de70: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
de80: 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20 20  ITE_VdbeEQP     
de90: 20 20 20 30 78 38 30 30 30 30 30 30 30 20 20 2f     0x80000000  /
dea0: 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20  * Debug EXPLAIN 
deb0: 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 65  QUERY PLAN */.#e
dec0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
ded0: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
dee0: 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a  qlite3.mDbFlags.
def0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
df00: 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 20 20  G_SchemaChange  
df10: 20 30 78 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f   0x0001  /* Unco
df20: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
df30: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
df40: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 50 72 65  efine DBFLAG_Pre
df50: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
df60: 30 32 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  02  /* Preferenc
df70: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
df80: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ncs */.#define D
df90: 42 46 4c 41 47 5f 56 61 63 75 75 6d 20 20 20 20  BFLAG_Vacuum    
dfa0: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
dfb0: 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56  Currently in a V
dfc0: 41 43 55 55 4d 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ACUUM */../*.** 
dfd0: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
dfe0: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
dff0: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
e000: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
e010: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
e020: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
e030: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
e040: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
e050: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
e060: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
e070: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
e080: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e090: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
e0a0: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
e0b0: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
e0c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e0d0: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
e0e0: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
e0f0: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
e100: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
e110: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
e120: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
e130: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
e140: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e150: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
e160: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
e170: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
e180: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e190: 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30  DistinctOpt    0
e1a0: 78 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49  x0010   /* DISTI
e1b0: 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65  NCT using indexe
e1c0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e1d0: 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e  ITE_CoverIdxScan
e1e0: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43     0x0020   /* C
e1f0: 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63  overing index sc
e200: 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ans */.#define S
e210: 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78  QLITE_OrderByIdx
e220: 4a 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a  Join 0x0040   /*
e230: 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69   ORDER BY of joi
e240: 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a  ns via index */.
e250: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
e260: 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78  ransitive     0x
e270: 30 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69  0080   /* Transi
e280: 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  tive constraints
e290: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e2a0: 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20  TE_OmitNoopJoin 
e2b0: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d    0x0100   /* Om
e2c0: 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73  it unused tables
e2d0: 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65   in joins */.#de
e2e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
e2f0: 74 4f 66 56 69 65 77 20 20 20 20 30 78 30 32 30  tOfView    0x020
e300: 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74  0   /* The count
e310: 2d 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a  -of-view optimiz
e320: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
e330: 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69   SQLITE_CursorHi
e340: 6e 74 73 20 20 20 20 30 78 30 34 30 30 20 20 20  nts    0x0400   
e350: 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72  /* Add OP_Cursor
e360: 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  Hint opcodes */.
e370: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
e380: 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78  tat34         0x
e390: 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54  0800   /* Use ST
e3a0: 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74  AT3 or STAT4 dat
e3b0: 61 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65  a */.   /* TH3 e
e3c0: 78 70 65 63 74 73 20 74 68 65 20 53 74 61 74 33  xpects the Stat3
e3d0: 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20  4  ^^^^^^ value 
e3e0: 74 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20 44  to be 0x0800.  D
e3f0: 6f 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20 2a  on't change it *
e400: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e410: 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20  _AllOpts        
e420: 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20  0xffff   /* All 
e430: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
e440: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66  ../*.** Macros f
e450: 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68  or testing wheth
e460: 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69  er or not optimi
e470: 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62  zations are enab
e480: 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e  led or disabled.
e490: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  .*/.#define Opti
e4a0: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
e4b0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64  (db, mask)  (((d
e4c0: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
e4d0: 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69  mask))!=0).#defi
e4e0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
e4f0: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
e500: 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74     (((db)->dbOpt
e510: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30  Flags&(mask))==0
e520: 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  )../*.** Return 
e530: 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f  true if it OK to
e540: 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74   factor constant
e550: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74   expressions int
e560: 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  o the initializa
e570: 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68  tion.** code. Th
e580: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
e590: 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72  Parse object for
e5a0: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
e5b0: 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  tor..*/.#define 
e5c0: 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29  ConstFactorOk(P)
e5d0: 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61   ((P)->okConstFa
e5e0: 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  ctor)../*.** Pos
e5f0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
e600: 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69   the sqlite.magi
e610: 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20  c field..** The 
e620: 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61  numbers are obta
e630: 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  ined at random a
e640: 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69  nd have no speci
e650: 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65  al meaning, othe
e660: 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20  r.** than being 
e670: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e  distinct from on
e680: 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64  e another..*/.#d
e690: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e6a0: 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30  IC_OPEN     0xa0
e6b0: 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62  29a697  /* Datab
e6c0: 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23  ase is open */.#
e6d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
e6e0: 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39  GIC_CLOSED   0x9
e6f0: 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61  f3c2d33  /* Data
e700: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a  base is closed *
e710: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e720: 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20  _MAGIC_SICK     
e730: 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45  0x4b771290  /* E
e740: 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e  rror and awaitin
e750: 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69  g close */.#defi
e760: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
e770: 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37  BUSY     0xf03b7
e780: 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65  906  /* Database
e790: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
e7a0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
e7b0: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20  ITE_MAGIC_ERROR 
e7c0: 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f     0xb5357930  /
e7d0: 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  * An SQLITE_MISU
e7e0: 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  SE error occurre
e7f0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
e800: 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45  ITE_MAGIC_ZOMBIE
e810: 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f     0x64cffc7f  /
e820: 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73  * Close with las
e830: 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73  t statement clos
e840: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  e */../*.** Each
e850: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
e860: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
e870: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
e880: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
e890: 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62  cture.  For glob
e8a0: 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  al built-in func
e8b0: 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74  tions (ex: subst
e8c0: 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e  r(), max(), coun
e8d0: 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  t()).** a pointe
e8e0: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
e8f0: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
e900: 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69  he sqlite3Builti
e910: 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63  nFunctions objec
e920: 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f  t..** For per-co
e930: 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61  nnection applica
e940: 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e  tion-defined fun
e950: 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65  ctions, a pointe
e960: 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72  r to this.** str
e970: 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69  ucture is held i
e980: 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20  n the db->aHash 
e990: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  hash table..**.*
e9a0: 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20 66 69  * The u.pHash fi
e9b0: 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 74  eld is used by t
e9c0: 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  he global built-
e9d0: 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73  ins.  The u.pDes
e9e0: 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64  tructor.** field
e9f0: 20 69 73 20 75 73 65 64 20 62 79 20 70 65 72 2d   is used by per-
ea00: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64  connection app-d
ea10: 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f  ef functions..*/
ea20: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20  .struct FuncDef 
ea30: 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20  {.  i8 nArg;    
ea40: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
ea50: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  er of arguments.
ea60: 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d    -1 means unlim
ea70: 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75  ited */.  u16 fu
ea80: 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  ncFlags;       /
ea90: 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69  * Some combinati
eaa0: 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e  on of SQLITE_FUN
eab0: 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  C_* */.  void *p
eac0: 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a  UserData;     /*
ead0: 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d   User data param
eae0: 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65  eter */.  FuncDe
eaf0: 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  f *pNext;      /
eb00: 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20  * Next function 
eb10: 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a  with same name *
eb20: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e  /.  void (*xSFun
eb30: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
eb40: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
eb50: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e  value**); /* fun
eb60: 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f  c or agg-step */
eb70: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
eb80: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
eb90: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
eba0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20           /* Agg 
ebb0: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
ebc0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
ebd0: 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20  ;   /* SQL name 
ebe0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
ebf0: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
ec00: 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68    FuncDef *pHash
ec10: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  ;      /* Next w
ec20: 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20  ith a different 
ec30: 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d  name but the sam
ec40: 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75  e hash */.    Fu
ec50: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
ec60: 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20  estructor;   /* 
ec70: 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  Reference counte
ec80: 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  d destructor fun
ec90: 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ction */.  } u;.
eca0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73  };../*.** This s
ecb0: 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75  tructure encapsu
ecc0: 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e  lates a user-fun
ecd0: 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72  ction destructor
ece0: 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a   callback (as.**
ecf0: 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e   configured usin
ed00: 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  g create_functio
ed10: 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65  n_v2()) and a re
ed20: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e  ference counter.
ed30: 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f   When.** create_
ed40: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73  function_v2() is
ed50: 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74   called to creat
ed60: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  e a function wit
ed70: 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a  h a destructor,.
ed80: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65  ** a single obje
ed90: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
eda0: 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75  is allocated. Fu
edb0: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65  ncDestructor.nRe
edc0: 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74  f is set to.** t
edd0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
ede0: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
edf0: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
ee00: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
ee10: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
ee20: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
ee30: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
ee40: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
ee50: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
ee60: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
ee70: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
ee80: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
ee90: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
eea0: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
eeb0: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
eec0: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
eed0: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
eee0: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
eef0: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
ef00: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
ef10: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
ef20: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
ef30: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
ef40: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
ef50: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
ef60: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
ef70: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
ef80: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
ef90: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
efa0: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
efb0: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
efc0: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
efd0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
efe0: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
eff0: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
f000: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
f010: 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  s.  Note that th
f020: 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54  e _LENGTH and _T
f030: 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20  YPEOF.** values 
f040: 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  must correspond 
f050: 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  to OPFLAG_LENGTH
f060: 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
f070: 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a  YPEOFARG.  And.*
f080: 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  * SQLITE_FUNC_CO
f090: 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74  NSTANT must be t
f0a0: 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54  he same as SQLIT
f0b0: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e  E_DETERMINISTIC.
f0c0: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61    There.** are a
f0d0: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
f0e0: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74  ts in the code t
f0f0: 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a  o verify this..*
f100: 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
f110: 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
f120: 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
f130: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
f140: 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20  NC_MINMAX    == 
f150: 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   NC_MinMaxAgg   
f160: 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41     == SF_MinMaxA
f170: 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  gg.**     SQLITE
f180: 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20  _FUNC_LENGTH    
f190: 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ==  OPFLAG_LENGT
f1a0: 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49  HARG.**     SQLI
f1b0: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
f1c0: 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50    ==  OPFLAG_TYP
f1d0: 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51  EOFARG.**     SQ
f1e0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
f1f0: 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44  NT  ==  SQLITE_D
f200: 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f  ETERMINISTIC fro
f210: 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20  m the API.**    
f220: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
f230: 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f  MASK   depends o
f240: 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61  n SQLITE_UTF* ma
f250: 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a  cros in the API.
f260: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f270: 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20  E_FUNC_ENCMASK  
f280: 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45  0x0003 /* SQLITE
f290: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54  _UTF8, SQLITE_UT
f2a0: 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45  F16BE or UTF16LE
f2b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f2c0: 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20  TE_FUNC_LIKE    
f2d0: 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69   0x0004 /* Candi
f2e0: 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b  date for the LIK
f2f0: 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  E optimization *
f300: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f310: 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30  _FUNC_CASE     0
f320: 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65  x0008 /* Case-se
f330: 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70  nsitive LIKE-typ
f340: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  e function */.#d
f350: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f360: 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30 31  C_EPHEM    0x001
f370: 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20  0 /* Ephemeral. 
f380: 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42   Delete with VDB
f390: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
f3a0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
f3b0: 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69  L 0x0020 /* sqli
f3c0: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
f3d0: 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c  q() might be cal
f3e0: 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  led*/.#define SQ
f3f0: 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
f400: 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69     0x0040 /* Bui
f410: 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66  lt-in length() f
f420: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
f430: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  ne SQLITE_FUNC_T
f440: 59 50 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f  YPEOF   0x0080 /
f450: 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f  * Built-in typeo
f460: 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  f() function */.
f470: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f480: 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30  UNC_COUNT    0x0
f490: 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  100 /* Built-in 
f4a0: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
f4b0: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
f4c0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
f4d0: 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69  CE 0x0200 /* Bui
f4e0: 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29  lt-in coalesce()
f4f0: 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a   or ifnull() */.
f500: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f510: 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30  UNC_UNLIKELY 0x0
f520: 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  400 /* Built-in 
f530: 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74  unlikely() funct
f540: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
f550: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
f560: 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f  ANT 0x0800 /* Co
f570: 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69  nstant inputs gi
f580: 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75  ve a constant ou
f590: 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tput */.#define 
f5a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
f5b0: 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54  AX   0x1000 /* T
f5c0: 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e  rue for min() an
f5d0: 64 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  d max() aggregat
f5e0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
f5f0: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
f600: 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c  G  0x2000 /* "Sl
f610: 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75  ow Change". Valu
f620: 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e  e constant durin
f630: 67 20 61 0a 20 20 20 20 20 20 20 20 20 20 20 20  g a.            
f640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f650: 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c          ** singl
f660: 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20  e query - might 
f670: 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65  change over time
f680: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f690: 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59  TE_FUNC_AFFINITY
f6a0: 20 30 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74   0x4000 /* Built
f6b0: 2d 69 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66  -in affinity() f
f6c0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  unction */../*.*
f6d0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
f6e0: 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55  three macros, FU
f6f0: 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55  NCTION(), LIKEFU
f700: 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41  NC() and AGGREGA
f710: 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64  TE() are.** used
f720: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69   to create the i
f730: 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20  nitializers for 
f740: 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75  the FuncDef stru
f750: 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  ctures..**.**   
f760: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
f770: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
f780: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
f790: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
f7a0: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
f7b0: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
f7c0: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a  function zName.*
f7d0: 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65  *     implemente
f7e0: 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20  d by C function 
f7f0: 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70  xFunc that accep
f800: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
f810: 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61  s. The.**     va
f820: 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41  lue passed as iA
f830: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
f840: 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65  (void*) and made
f850: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20   available.**   
f860: 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61    as the user-da
f870: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
f880: 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65  _data()) for the
f890: 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a   function. If.**
f8a0: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e       argument bN
f8b0: 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  C is true, then 
f8c0: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
f8d0: 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73  NEEDCOLL flag is
f8e0: 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46   set..**.**   VF
f8f0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
f900: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
f910: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
f920: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
f930: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
f940: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
f950: 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  TANT flag..**.**
f960: 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     DFUNCTION(zNa
f970: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
f980: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
f990: 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e     Like FUNCTION
f9a0: 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73   except it omits
f9b0: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
f9c0: 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61  _CONSTANT flag a
f9d0: 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74  nd.**     adds t
f9e0: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  he SQLITE_FUNC_S
f9f0: 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73  LOCHNG flag.  Us
fa00: 65 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69  ed for date & ti
fa10: 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  me functions.** 
fa20: 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e      and function
fa30: 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65  s like sqlite_ve
fa40: 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e  rsion() that can
fa50: 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74   change, but not
fa60: 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61   during.**     a
fa70: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 20 20   single query.  
fa80: 54 68 65 20 69 41 72 67 20 69 73 20 69 67 6e 6f  The iArg is igno
fa90: 72 65 64 2e 20 20 54 68 65 20 75 73 65 72 2d 64  red.  The user-d
faa0: 61 74 61 20 69 73 20 61 6c 77 61 79 73 20 73 65  ata is always se
fab0: 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20 4e 55  t.**     to a NU
fac0: 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65  LL pointer.  The
fad0: 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69   bNC parameter i
fae0: 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
faf0: 2a 20 20 20 50 55 52 45 5f 44 41 54 45 28 7a 4e  *   PURE_DATE(zN
fb00: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
fb10: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
fb20: 20 20 20 20 55 73 65 64 20 66 6f 72 20 22 70 75      Used for "pu
fb30: 72 65 22 20 64 61 74 65 2f 74 69 6d 65 20 66 75  re" date/time fu
fb40: 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73 20 6d 61  nctions, this ma
fb50: 63 72 6f 20 69 73 20 6c 69 6b 65 20 44 46 55 4e  cro is like DFUN
fb60: 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65 78 63  CTION.**     exc
fb70: 65 70 74 20 74 68 61 74 20 69 74 20 64 6f 65 73  ept that it does
fb80: 20 73 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f   set the SQLITE_
fb90: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
fba0: 61 67 73 2e 20 20 69 41 72 67 20 69 73 0a 2a 2a  ags.  iArg is.**
fbb0: 20 20 20 20 20 69 67 6e 6f 72 65 64 20 61 6e 64       ignored and
fbc0: 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 66   the user-data f
fbd0: 6f 72 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f  or these functio
fbe0: 6e 73 20 69 73 20 73 65 74 20 74 6f 20 61 6e 20  ns is set to an 
fbf0: 0a 2a 2a 20 20 20 20 20 61 72 62 69 74 72 61 72  .**     arbitrar
fc00: 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74  y non-NULL point
fc10: 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72  er.  The bNC par
fc20: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
fc30: 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52  ed..**.**   AGGR
fc40: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
fc50: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53  g, iArg, bNC, xS
fc60: 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20  tep, xFinal).** 
fc70: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
fc80: 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
fc90: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
fca0: 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
fcb0: 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
fcc0: 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
fcd0: 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
fce0: 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
fcf0: 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
fd00: 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
fd10: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
fd20: 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
fd30: 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
fd40: 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
fd50: 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
fd60: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
fd70: 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
fd80: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
fd90: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
fda0: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
fdb0: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a  function zName.*
fdc0: 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70  *     that accep
fdd0: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
fde0: 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65  s and is impleme
fdf0: 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74  nted by a call t
fe00: 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74  o C.**     funct
fe10: 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72  ion likeFunc. Ar
fe20: 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63  gument pArg is c
fe30: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a  ast to a (void *
fe40: 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20  ) and made.**   
fe50: 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74    available as t
fe60: 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72  he function user
fe70: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
fe80: 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65  ser_data()). The
fe90: 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e  .**     FuncDef.
fea0: 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69  flags variable i
feb0: 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
fec0: 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65  ue passed as the
fed0: 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61   flags.**     pa
fee0: 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  rameter..*/.#def
fef0: 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ine FUNCTION(zNa
ff00: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
ff10: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
ff20: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
ff30: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
ff40: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
ff50: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
ff60: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
ff70: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
ff80: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
ff90: 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
ffa0: 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a  fine VFUNCTION(z
ffb0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
ffc0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
ffd0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
ffe0: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
fff0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
10000 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
10010 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10020 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
10030 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
10040 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e DFUNCTION(zNam
10050 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
10060 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
10070 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
10080 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
10090 5f 55 54 46 38 2c 20 5c 0a 20 20 20 30 2c 20 30  _UTF8, \.   0, 0
100a0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
100b0 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
100c0 65 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d  e PURE_DATE(zNam
100d0 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
100e0 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
100f0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
10100 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
10110 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e  _UTF8|SQLITE_FUN
10120 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20  C_CONSTANT, \.  
10130 20 28 76 6f 69 64 2a 29 26 73 71 6c 69 74 65 33   (void*)&sqlite3
10140 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75 6e 63  Config, 0, xFunc
10150 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10160 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54   }.#define FUNCT
10170 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
10180 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10190 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
101a0 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
101b0 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
101c0 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
101d0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
101e0 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
101f0 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
10200 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10210 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
10220 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
10230 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a  e STR_FUNCTION(z
10240 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
10250 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
10260 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10270 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
10280 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
10290 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
102a0 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20  LL), \.   pArg, 
102b0 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  0, xFunc, 0, #zN
102c0 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c  ame, }.#define L
102d0 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
102e0 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29  Arg, arg, flags)
102f0 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10300 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
10310 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61  |SQLITE_UTF8|fla
10320 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a  gs, \.   (void *
10330 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e  )arg, 0, likeFun
10340 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
10350 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52  } }.#define AGGR
10360 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
10370 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
10380 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b  p, xFinal) \.  {
10390 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
103a0 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
103b0 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
103c0 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
103d0 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
103e0 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
103f0 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41  , {0}}.#define A
10400 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c  GGREGATE2(zName,
10410 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
10420 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65  xStep, xFinal, e
10430 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
10440 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
10450 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
10460 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
10470 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c  aFlags, \.   SQL
10480 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
10490 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
104a0 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  inal,#zName, {0}
104b0 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72  }../*.** All cur
104c0 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20  rent savepoints 
104d0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
104e0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
104f0 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74  ting at.** sqlit
10500 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54  e3.pSavepoint. T
10510 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
10520 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20   in the list is 
10530 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c  the most recentl
10540 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65  y.** opened save
10550 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74  point. Savepoint
10560 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74  s are added to t
10570 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76  he list by the v
10580 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f  dbe.** OP_Savepo
10590 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
105a0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70  .*/.struct Savep
105b0 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a  oint {.  char *z
105c0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
105e0 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28  Savepoint name (
105f0 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20  nul-terminated) 
10600 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
10610 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
10620 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10630 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66  er of deferred f
10640 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a  k violations */.
10650 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
10660 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
10670 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10680 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20  of deferred imm 
10690 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  fk. */.  Savepoi
106a0 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  nt *pNext;      
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
106c0 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  Parent savepoint
106d0 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a   (if any) */.};.
106e0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
106f0 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73  wing are used as
10700 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
10710 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
10720 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20  Savepoint(),.** 
10730 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72  and as the P1 ar
10740 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50  gument to the OP
10750 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
10760 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  uction..*/.#defi
10770 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  ne SAVEPOINT_BEG
10780 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e  IN      0.#defin
10790 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  e SAVEPOINT_RELE
107a0 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65  ASE    1.#define
107b0 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42   SAVEPOINT_ROLLB
107c0 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20  ACK   2.../*.** 
107d0 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75  Each SQLite modu
107e0 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c  le (virtual tabl
107f0 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73  e definition) is
10800 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a   defined by an.*
10810 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
10820 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10830 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e  cture, stored in
10840 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f   the sqlite3.aMo
10850 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62  dule.** hash tab
10860 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f  le..*/.struct Mo
10870 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73  dule {.  const s
10880 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
10890 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a  Module;       /*
108a0 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65   Callback pointe
108b0 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  rs */.  const ch
108c0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
108d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
108e0 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63  Name passed to c
108f0 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
10900 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10920 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
10930 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
10940 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
10950 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
10960 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
10970 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
10980 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
10990 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  on */.  Table *p
109a0 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20  EpoTab;         
109b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
109c0 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20  Eponymous table 
109d0 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20  for this module 
109e0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
109f0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
10a00 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
10a10 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
10a20 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
10a30 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
10a40 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
10a50 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
10a60 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
10a70 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
10a80 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e  lumn, \000, then
10a90 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45   the type */.  E
10aa0 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20  xpr *pDflt;     
10ab0 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65  /* Default value
10ac0 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
10ad0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
10ae0 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
10af0 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
10b00 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
10b10 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
10b20 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
10b30 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20  An OE_ code for 
10b40 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e  handling a NOT N
10b50 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
10b60 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
10b70 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
10b80 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
10b90 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  . values */.  u8
10ba0 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f   szEst;        /
10bb0 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
10bc0 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69   of value in thi
10bd0 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66  s column. sizeof
10be0 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38  (INT)==1 */.  u8
10bf0 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f   colFlags;     /
10c00 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  * Boolean proper
10c10 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c  ties.  See COLFL
10c20 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f  AG_ defines belo
10c30 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  w */.};../* Allo
10c40 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43  wed values for C
10c50 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a  olumn.colFlags:.
10c60 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
10c70 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30  AG_PRIMKEY  0x00
10c80 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  01    /* Column 
10c90 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  is part of the p
10ca0 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
10cb0 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49  efine COLFLAG_HI
10cc0 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20  DDEN   0x0002   
10cd0 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c   /* A hidden col
10ce0 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c  umn in a virtual
10cf0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
10d00 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50  e COLFLAG_HASTYP
10d10 45 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20  E  0x0004    /* 
10d20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77  Type name follow
10d30 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f  s column name */
10d40 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
10d50 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
10d60 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
10d70 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
10d80 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
10d90 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
10da0 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
10db0 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
10dc0 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
10dd0 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
10de0 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
10df0 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
10e00 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
10e10 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c  e..**.** If Coll
10e20 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c  Seq.xCmp is NULL
10e30 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
10e40 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  the.** collating
10e50 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64   sequence is und
10e60 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73  efined.  Indices
10e70 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64   built on an und
10e80 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74  efined.** collat
10e90 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79  ing sequence may
10ea0 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20   not be read or 
10eb0 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75  written..*/.stru
10ec0 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63  ct CollSeq {.  c
10ed0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
10ee0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
10ef0 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
10f00 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e  quence, UTF-8 en
10f10 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e  coded */.  u8 en
10f20 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
10f30 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
10f40 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d  g handled by xCm
10f50 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  p() */.  void *p
10f60 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  User;          /
10f70 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
10f80 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   to xCmp() */.  
10f90 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64  int (*xCmp)(void
10fa0 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  *,int, const voi
10fb0 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  d*, int, const v
10fc0 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a  oid*);.  void (*
10fd0 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f  xDel)(void*);  /
10fe0 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
10ff0 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   pUser */.};../*
11000 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72  .** A sort order
11010 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41   can be either A
11020 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23  SC or DESC..*/.#
11030 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
11040 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a  _ASC       0  /*
11050 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
11060 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
11070 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45  ine SQLITE_SO_DE
11080 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f  SC      1  /* So
11090 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
110a0 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
110b0 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46   SQLITE_SO_UNDEF
110c0 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f  INED -1 /* No so
110d0 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66 69  rt order specifi
110e0 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  ed */../*.** Col
110f0 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
11100 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
11110 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
11120 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
11130 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
11140 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
11150 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
11160 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
11170 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
11180 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
11190 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
111a0 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
111b0 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
111c0 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
111d0 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61  ly..**.** But ra
111e0 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20  ther than start 
111f0 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20  with 0 or 1, we 
11200 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20  begin with 'A'. 
11210 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68   That way,.** wh
11220 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69  en multiple affi
11230 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63  nity types are c
11240 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f  oncatenated into
11250 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a   a string and.**
11260 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20   used as the P4 
11270 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69  operand, they wi
11280 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61  ll be more reada
11290 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ble..**.** Note 
112a0 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75  also that the nu
112b0 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20  meric types are 
112c0 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72  grouped together
112d0 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67   so that testing
112e0 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69  .** for a numeri
112f0 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67  c type is a sing
11300 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  le comparison.  
11310 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70  And the BLOB typ
11320 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23  e is first..*/.#
11330 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11340 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23  F_BLOB     'A'.#
11350 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11360 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a 23  F_TEXT     'B'.#
11370 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11380 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23  F_NUMERIC  'C'.#
11390 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
113a0 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23  F_INTEGER  'D'.#
113b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
113c0 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a  F_REAL     'E'..
113d0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
113e0 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
113f0 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
11400 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
11410 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
11420 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
11430 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
11440 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
11450 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
11460 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66  y value..*/.#def
11470 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
11480 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a  ASK     0x47../*
11490 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
114a0 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
114b0 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
114c0 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
114d0 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
114e0 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a  the affinity..**
114f0 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e  .** The SQLITE_N
11500 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61  OTNULL flag is a
11510 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
11520 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49  NULLEQ and JUMPI
11530 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75  FNULL..** It cau
11540 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20  ses an assert() 
11550 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65  to fire if eithe
11560 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63  r operand to a c
11570 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65  omparison.** ope
11580 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20  rator is NULL.  
11590 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63  It is added to c
115a0 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ertain compariso
115b0 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a  n operators to.*
115c0 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65  * prove that the
115d0 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c   operands are al
115e0 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a  ways NOT NULL..*
115f0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
11600 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78  _KEEPNULL     0x
11610 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76  08  /* Used by v
11620 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a  ector == or <> *
11630 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
11640 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
11650 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  10  /* jumps if 
11660 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
11670 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
11680 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
11690 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53        0x20  /* S
116a0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
116b0 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
116c0 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
116d0 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
116e0 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
116f0 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65  NULL=NULL */.#de
11700 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e  fine SQLITE_NOTN
11710 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f  ULL      0x90  /
11720 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70  * Assert that op
11730 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72  erands are never
11740 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
11750 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  An object of thi
11760 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65  s type is create
11770 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75  d for each virtu
11780 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74  al table present
11790 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62   in.** the datab
117a0 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
117b0 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
117c0 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
117d0 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
117e0 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
117f0 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
11800 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
11810 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
11820 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
11830 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
11840 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
11850 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
11860 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
11870 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
11880 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
11890 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
118a0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
118b0 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
118c0 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
118d0 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  table.** impleme
118e0 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33  ntation. sqlite3
118f0 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63  _vtab* handles c
11900 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64  an not be shared
11910 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61   between.** data
11920 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
11930 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
11940 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
11950 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a  emory database.*
11960 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  * schema is shar
11970 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65  ed, as the imple
11980 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20  mentation often 
11990 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62  stores the datab
119a0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
119b0 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20  n handle passed 
119c0 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43  to it via the xC
119d0 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65  onnect() or xCre
119e0 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20  ate() method.** 
119f0 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
11a00 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79  ation internally
11a10 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20  . This database 
11a20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
11a30 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65  e may.** then be
11a40 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
11a50 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
11a60 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
11a70 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a  ess real tables.
11a80 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
11a90 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
11aa0 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
11ab0 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
11ac0 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  rs.** transactio
11ad0 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
11ae0 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
11af0 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
11b00 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
11b10 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
11b20 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
11b30 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
11b40 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
11b50 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
11b60 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
11b70 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
11b80 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
11b90 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
11ba0 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
11bb0 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
11bc0 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
11bd0 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
11be0 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
11bf0 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
11c00 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
11c10 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
11c20 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
11c30 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
11c40 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
11c50 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
11c60 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
11c70 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
11c80 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
11c90 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
11ca0 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
11cb0 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
11cc0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
11cd0 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
11ce0 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
11cf0 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
11d00 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
11d10 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
11d20 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
11d30 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
11d40 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
11d50 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
11d60 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
11d70 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
11d80 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
11d90 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
11da0 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
11db0 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c  s are not.** del
11dc0 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
11dd0 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
11de0 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
11df0 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d  onnect()ed.** im
11e00 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
11e10 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
11e20 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
11e30 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
11e40 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
11e50 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
11e60 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
11e70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
11e80 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
11e90 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
11ea0 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
11eb0 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
11ec0 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
11ed0 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
11ee0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
11ef0 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
11f00 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
11f10 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
11f20 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
11f30 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
11f40 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
11f50 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
11f60 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
11f70 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
11f80 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
11f90 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
11fa0 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
11fb0 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
11fc0 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
11fd0 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
11fe0 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
11ff0 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
12000 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
12010 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
12020 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
12030 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
12040 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
12050 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
12060 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a  s allocated by.*
12070 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
12080 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
12090 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
120a0 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
120b0 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66  e.db as.** the f
120c0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
120d0 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
120e0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12100 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
12110 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
12120 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
12130 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
12140 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
12150 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
12160 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
12170 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
12180 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
12190 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
121a0 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
121b0 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
121c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
121d0 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
121e0 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
121f0 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
12200 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
12210 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
12220 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
12230 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
12240 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
12250 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
12260 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
12270 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
12280 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
12290 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
122a0 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
122b0 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
122c0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d  ./*.** The schem
122d0 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74  a for each SQL t
122e0 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73  able and view is
122f0 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
12300 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20  memory.** by an 
12310 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12320 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
12330 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ure..*/.struct T
12340 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
12350 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
12360 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
12370 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
12380 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
12390 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
123a0 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
123b0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
123c0 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20   *pIndex;       
123d0 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69  /* List of SQL i
123e0 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74  ndexes on this t
123f0 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63  able. */.  Selec
12400 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
12410 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
12420 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
12430 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
12440 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  iew. */.  FKey *
12450 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  pFKey;         /
12460 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
12470 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   all foreign key
12480 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
12490 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
124a0 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72  ff;       /* Str
124b0 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
124c0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
124d0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  h column */.  Ex
124e0 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20  prList *pCheck; 
124f0 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20     /* All CHECK 
12500 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
12510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12520 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61        /*   ... a
12530 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75  lso used as colu
12540 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20  mn name list in 
12550 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20  a VIEW */.  int 
12560 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
12570 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70   /* Root BTree p
12580 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  age for this tab
12590 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62  le */.  u32 nTab
125a0 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Ref;         /* 
125b0 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
125c0 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
125d0 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61   */.  u32 tabFla
125e0 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  gs;        /* Ma
125f0 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
12600 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  s */.  i16 iPKey
12610 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
12620 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
12630 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
12640 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  as the rowid */.
12650 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20    i16 nCol;     
12660 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12670 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
12680 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  his table */.  L
12690 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
126a0 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
126b0 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
126c0 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
126d0 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  t1 table */.  Lo
126e0 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
126f0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
12700 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
12710 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
12720 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
12730 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
12740 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
12750 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
12760 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
12770 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
12780 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b  */.#endif.  u8 k
12790 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  eyConf;         
127a0 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69   /* What to do i
127b0 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65  n case of unique
127c0 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e  ness conflict on
127d0 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65   iPKey */.#ifnde
127e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
127f0 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61  TERTABLE.  int a
12800 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20  ddColOffset;    
12810 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
12820 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74  ATE TABLE stmt t
12830 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
12840 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  mn */.#endif.#if
12850 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12860 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
12870 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20  int nModuleArg; 
12880 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12890 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
128a0 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63  he module */.  c
128b0 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72  har **azModuleAr
128c0 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65  g;  /* 0: module
128d0 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74   1: schema 2: vt
128e0 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72  ab name 3...: ar
128f0 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  gs */.  VTable *
12900 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20  pVTable;     /* 
12910 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f  List of VTable o
12920 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69  bjects. */.#endi
12930 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  f.  Trigger *pTr
12940 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74  igger;   /* List
12950 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f   of triggers sto
12960 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a  red in pSchema *
12970 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
12980 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
12990 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
129a0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
129b0 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d   Table *pNextZom
129c0 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e  bie;  /* Next on
129d0 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62   the Parse.pZomb
129e0 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b  ieTab list */.};
129f0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
12a00 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65  values for Table
12a10 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  .tabFlags..**.**
12a20 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70   TF_OOOHidden ap
12a30 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20  plies to tables 
12a40 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61 76  or view that hav
12a50 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
12a60 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c   that are.** fol
12a70 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64  lowed by non-hid
12a80 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78  den columns.  Ex
12a90 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20  ample:  "CREATE 
12aa0 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20  VIRTUAL TABLE x 
12ab0 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61  USING.** vtab1(a
12ac0 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20   HIDDEN, b);".  
12ad0 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e  Since "b" is a n
12ae0 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  on-hidden column
12af0 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64   but "a" is hidd
12b00 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f  en,.** the TF_OO
12b10 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74  OHidden attribut
12b20 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e  e would apply in
12b30 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63   this case.  Suc
12b40 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65  h tables require
12b50 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64  .** special hand
12b60 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45  ling during INSE
12b70 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a  RT processing..*
12b80 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61  /.#define TF_Rea
12b90 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30  donly        0x0
12ba0 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  001    /* Read-o
12bb0 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
12bc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
12bd0 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
12be0 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65  x0002    /* An e
12bf0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
12c00 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
12c10 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
12c20 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  004    /* Table 
12c30 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
12c40 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
12c50 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20  Autoincrement   
12c60 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74  0x0008    /* Int
12c70 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
12c80 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
12c90 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
12ca0 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20 20  HasStat1        
12cb0 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f  0x0010    /* nRo
12cc0 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d  wLogEst set from
12cd0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f   sqlite_stat1 */
12ce0 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
12cf0 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30 30  outRowid    0x00
12d00 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69  20    /* No rowi
12d10 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20  d.  PRIMARY KEY 
12d20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64  is the key */.#d
12d30 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62  efine TF_NoVisib
12d40 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30 20  leRowid  0x0040 
12d50 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69     /* No user-vi
12d60 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f  sible "rowid" co
12d70 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
12d80 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20  TF_OOOHidden    
12d90 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20     0x0080    /* 
12da0 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64  Out-of-Order hid
12db0 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23  den columns */.#
12dc0 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55  define TF_StatsU
12dd0 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30 30  sed       0x0100
12de0 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61      /* Query pla
12df0 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61  nner decisions a
12e00 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20 20  ffected by.     
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e30 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f  ** Index.aiRowLo
12e40 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f  gEst[] values */
12e50 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e  .#define TF_HasN
12e60 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32  otNull      0x02
12e70 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  00    /* Contain
12e80 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  s NOT NULL const
12e90 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  raints */../*.**
12ea0 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
12eb0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
12ec0 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
12ed0 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
12ee0 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
12ef0 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
12f00 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
12f10 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
12f20 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
12f30 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
12f40 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
12f50 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
12f60 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
12f70 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
12f80 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
12f90 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a  X)->nModuleArg).
12fa0 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
12fb0 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
12fc0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
12fd0 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
12fe0 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d  rmine if a colum
12ff0 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73  n is hidden.  Is
13000 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
13010 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77  lumn().** only w
13020 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72  orks for non-vir
13030 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64  tual tables (ord
13040 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  inary tables and
13050 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a   views) and is.*
13060 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75  * always false u
13070 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41  nless SQLITE_ENA
13080 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
13090 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20  NS is defined.  
130a0 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43  The.** IsHiddenC
130b0 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73  olumn() macro is
130c0 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65   general purpose
130d0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
130e0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48  (SQLITE_ENABLE_H
130f0 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23  IDDEN_COLUMNS).#
13100 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
13110 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
13120 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
13130 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
13140 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
13150 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
13160 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
13170 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
13180 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
13190 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  0).#elif !define
131a0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
131b0 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64  RTUALTABLE).#  d
131c0 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
131d0 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
131e0 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
131f0 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
13200 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
13210 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
13220 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73  Column(X) 0.#els
13230 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  e.#  define IsHi
13240 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
13250 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
13260 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
13270 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
13280 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74  ndif.../* Does t
13290 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20  he table have a 
132a0 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
132b0 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20   HasRowid(X)    
132c0 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
132d0 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77   & TF_WithoutRow
132e0 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20  id)==0).#define 
132f0 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20  VisibleRowid(X) 
13300 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
13310 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  & TF_NoVisibleRo
13320 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
13330 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
13340 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
13350 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
13360 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
13370 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
13380 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
13390 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
133a0 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
133b0 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
133c0 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
133d0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
133e0 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
133f0 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
13400 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
13410 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
13420 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
13430 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
13440 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
13450 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
13460 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
13470 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
13480 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
13490 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
134a0 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
134b0 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
134c0 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
134d0 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
134e0 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
134f0 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
13500 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
13510 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
13520 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
13530 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
13540 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
13550 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
13560 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
13570 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
13580 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
13590 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
135a0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
135b0 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
135c0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
135d0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
135e0 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
135f0 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
13600 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
13610 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
13620 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
13630 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
13640 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
13650 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
13660 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
13670 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
13680 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
13690 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
136a0 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
136b0 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
136c0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
136d0 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
136e0 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
136f0 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
13700 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
13710 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
13720 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
13730 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
13740 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
13750 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
13760 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
13770 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
13780 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
13790 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
137a0 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
137b0 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
137c0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
137d0 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
137e0 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
137f0 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
13800 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
13810 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
13820 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
13830 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
13840 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
13850 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
13860 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
13870 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
13880 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
13890 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
138a0 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
138b0 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
138c0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
138d0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
138e0 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
138f0 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
13900 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
13910 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
13920 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
13930 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
13940 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
13950 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
13960 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
13970 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
13980 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
13990 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
139a0 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
139b0 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
139c0 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
139d0 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
139e0 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
139f0 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
13a00 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
13a10 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
13a20 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
13a30 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
13a40 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
13a50 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
13a60 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
13a70 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
13a80 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
13a90 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
13aa0 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
13ab0 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
13ac0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
13ad0 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
13ae0 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
13af0 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
13b00 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
13b10 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
13b20 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
13b30 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
13b40 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
13b50 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
13b60 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
13b70 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
13b80 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
13b90 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
13ba0 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
13bb0 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
13bc0 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
13bd0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
13be0 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
13bf0 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
13c00 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
13c10 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
13c20 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
13c30 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
13c40 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
13c50 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
13c60 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
13c70 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
13c80 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
13c90 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
13ca0 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
13cb0 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
13cc0 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
13cd0 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
13ce0 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
13cf0 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
13d00 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
13d10 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
13d20 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
13d30 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
13d40 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
13d50 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
13d60 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
13d70 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
13d80 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
13d90 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
13da0 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
13db0 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
13dc0 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
13dd0 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
13de0 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
13df0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
13e00 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
13e10 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
13e20 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
13e30 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
13e40 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
13e50 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
13e60 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
13e70 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
13e80 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
13e90 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
13ea0 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
13eb0 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
13ec0 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
13ed0 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
13ee0 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
13ef0 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
13f00 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
13f10 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
13f20 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
13f30 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
13f40 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
13f50 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
13f60 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
13f70 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
13f80 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
13f90 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
13fa0 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
13fb0 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
13fc0 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
13fd0 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
13fe0 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
13ff0 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
14000 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  gn key..**.** Th
14010 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
14020 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
14030 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
14040 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
14050 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
14060 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
14070 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
14080 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
14090 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
140a0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
140b0 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
140c0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
140d0 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
140e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
140f0 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
14100 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
14110 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
14120 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
14130 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
14140 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
14150 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
14160 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
14170 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
14180 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
14190 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
141a0 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
141b0 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
141c0 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
141d0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
141e0 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
141f0 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
14200 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
14210 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
14220 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  DATE */..#define
14230 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20   OE_Restrict 6  
14240 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
14250 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
14260 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
14270 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
14280 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20  OE_SetNull  7   
14290 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
142a0 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
142b0 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
142c0 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20  OE_SetDflt  8   
142d0 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
142e0 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
142f0 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
14300 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
14310 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64  e  9   /* Cascad
14320 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
14330 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  ..#define OE_Def
14340 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20  ault  10  /* Do 
14350 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
14360 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
14370 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
14380 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
14390 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
143a0 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
143b0 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
143c0 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
143d0 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
143e0 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
143f0 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  rol the.** compa
14400 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
14410 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
14420 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
14430 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
14440 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
14450 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
14460 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
14470 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
14480 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
14490 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
144a0 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
144b0 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
144c0 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
144d0 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
144e0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
144f0 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
14500 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
14510 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
14520 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
14530 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
14540 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
14550 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
14560 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
14570 4b 65 79 46 69 65 6c 64 3b 20 20 20 20 20 20 2f  KeyField;      /
14580 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
14590 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
145a0 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41  ndex */.  u16 nA
145b0 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a  llField;      /*
145c0 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20   Total columns, 
145d0 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c  including key pl
145e0 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73  us others */.  s
145f0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
14600 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
14610 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
14620 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
14630 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
14640 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
14650 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
14660 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
14670 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
14680 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
14690 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
146a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
146b0 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72  object holds a r
146c0 65 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20  ecord which has 
146d0 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20  been parsed out 
146e0 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a  into individual.
146f0 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74  ** fields, for t
14700 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64  he purposes of d
14710 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f  oing a compariso
14720 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  n..**.** A recor
14730 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
14740 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
14750 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
14760 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
14770 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
14780 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
14790 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
147a0 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
147b0 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
147c0 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
147d0 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
147e0 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
147f0 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
14800 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
14810 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
14820 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
14830 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
14840 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41   opcode..**.** A
14850 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
14860 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73  is object serves
14870 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20   as a "key" for 
14880 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f  doing a search o
14890 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b  n.** an index b+
148a0 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f  tree. The goal o
148b0 66 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20  f the search is 
148c0 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72  to find the entr
148d0 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f  y that.** is clo
148e0 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64  sed to the key d
148f0 65 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73  escribed by this
14900 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f   object.  This o
14910 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64  bject might hold
14920 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69  .** just a prefi
14930 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54  x of the key.  T
14940 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
14950 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a  lds is given by.
14960 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  ** pKeyInfo->nFi
14970 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  eld..**.** The r
14980 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20  1 and r2 fields 
14990 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
149a0 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73  o return if this
149b0 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
149c0 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20  n.** or greater 
149d0 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68  than a key in th
149e0 65 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74  e btree, respect
149f0 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72  ively.  These ar
14a00 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31  e normally.** -1
14a10 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69   and +1 respecti
14a20 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20  vely, but might 
14a30 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b  be inverted to +
14a40 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20  1 and -1 if the 
14a50 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20  b-tree.** is in 
14a60 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  DESC order..**.*
14a70 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
14a80 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61  ison functions a
14a90 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64  ctually return d
14aa0 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74  efault_rc when t
14ab0 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65  hey find.** an e
14ac0 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e  quals comparison
14ad0 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61  .  default_rc ca
14ae0 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b  n be -1, 0, or +
14af0 31 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  1.  If there are
14b00 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74  .** multiple ent
14b10 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72  ries in the b-tr
14b20 65 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ee with the same
14b30 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20   key (when only 
14b40 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68  looking.** at th
14b50 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f  e first pKeyInfo
14b60 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e  ->nFields,) then
14b70 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20   default_rc can 
14b80 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a  be set to -1 to.
14b90 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61  ** cause the sea
14ba0 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20  rch to find the 
14bb0 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b  last match, or +
14bc0 31 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73  1 to cause the s
14bd0 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64  earch to.** find
14be0 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68   the first match
14bf0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20  ..**.** The key 
14c00 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74  comparison funct
14c10 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71  ions will set eq
14c20 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20  Seen to true if 
14c30 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74  they ever.** get
14c40 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c   and equal resul
14c50 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e  ts when comparin
14c60 67 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  g this structure
14c70 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63   to a b-tree rec
14c80 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66  ord..** When def
14c90 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20  ault_rc!=0, the 
14ca0 73 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64  search might end
14cb0 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72   up on the recor
14cc0 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a  d immediately.**
14cd0 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
14ce0 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64  t match or immed
14cf0 69 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65  iately after the
14d00 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68   last match.  Th
14d10 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c  e.** eqSeen fiel
14d20 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20  d will indicate 
14d30 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
14d40 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78  n exact match ex
14d50 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62  ists in the.** b
14d60 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  -tree..*/.struct
14d70 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
14d80 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
14d90 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
14da0 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
14db0 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
14dc0 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
14dd0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
14de0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
14df0 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
14e00 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
14e10 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20   in apMem[] */. 
14e20 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20   i8 default_rc; 
14e30 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
14e40 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79  on result if key
14e50 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
14e60 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20   u8 errCode;    
14e70 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65       /* Error de
14e80 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72  tected by xRecor
14e90 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50  dCompare (CORRUP
14ea0 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20  T or NOMEM) */. 
14eb0 20 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20   i8 r1;         
14ec0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
14ed0 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20   return if (lhs 
14ee0 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72  < rhs) */.  i8 r
14ef0 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
14f00 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
14f10 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73  rn if (lhs > rhs
14f20 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e  ) */.  u8 eqSeen
14f30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
14f40 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74  ue if an equalit
14f50 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73  y comparison has
14f60 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b   been seen */.};
14f70 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
14f80 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65  L index is repre
14f90 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
14fa0 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
14fb0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
14fc0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
14fd0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73  *.** The columns
14fe0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
14ff0 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64  at are to be ind
15000 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62  exed are describ
15010 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43  ed.** by the aiC
15020 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66  olumn[] field of
15030 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
15040 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73    For example, s
15050 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76  uppose.** we hav
15060 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
15070 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a  table and index:
15080 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
15090 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69  E TABLE Ex1(c1 i
150a0 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74  nt, c2 int, c3 t
150b0 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45  ext);.**     CRE
150c0 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e  ATE INDEX Ex2 ON
150d0 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a   Ex1(c3,c1);.**.
150e0 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20  ** In the Table 
150f0 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
15100 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d  bing Ex1, nCol==
15110 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20  3 because there 
15120 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c  are.** three col
15130 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
15140 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78  e.  In the Index
15150 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
15160 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43  ibing.** Ex2, nC
15170 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32  olumn==2 since 2
15180 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e   of the 3 column
15190 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64  s of Ex1 are ind
151a0 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c  exed..** The val
151b0 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69  ue of aiColumn i
151c0 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c  s {2, 0}.  aiCol
151d0 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73  umn[0]==2 becaus
151e0 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63  e the.** first c
151f0 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
15200 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
15210 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
15220 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
15230 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
15240 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
15250 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
15260 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
15270 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
15280 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
15290 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
152a0 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
152b0 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
152c0 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
152d0 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
152e0 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
152f0 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
15300 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
15310 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
15320 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
15330 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
15340 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
15350 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
15360 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
15370 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
15380 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
15390 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
153a0 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
153b0 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61   resolution.** a
153c0 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
153d0 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
153e0 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
153f0 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
15400 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
15410 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61  ..**.** While pa
15420 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54  rsing a CREATE T
15430 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49  ABLE or CREATE I
15440 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69  NDEX statement i
15450 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
15460 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65  nerate VDBE code
15470 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20   (as opposed to 
15480 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64  parsing one read
15490 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f   from an sqlite_
154a0 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20  master.** table 
154b0 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69  as part of parsi
154c0 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  ng an existing d
154d0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c  atabase schema),
154e0 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61   transient insta
154f0 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20  nces.** of this 
15500 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65  structure may be
15510 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69   created. In thi
15520 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78  s case the Index
15530 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69  .tnum variable i
15540 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  s.** used to sto
15550 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  re the address o
15560 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63  f a VDBE instruc
15570 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61  tion, not a data
15580 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  base page.** num
15590 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d  ber (it cannot -
155a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
155b0 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61  ge is not alloca
155c0 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44  ted until the VD
155d0 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73  BE.** program is
155e0 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20   executed). See 
155f0 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74  convertToWithout
15600 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72  RowidTable() for
15610 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72   details..*/.str
15620 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
15630 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
15640 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
15650 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
15660 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
15670 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
15680 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
15690 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
156a0 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
156b0 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77  .  LogEst *aiRow
156c0 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46  LogEst;     /* F
156d0 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
156e0 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
156f0 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
15700 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
15710 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
15720 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
15730 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
15740 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
15750 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
15760 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
15770 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
15780 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
15790 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
157a0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
157b0 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
157c0 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
157d0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
157e0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
157f0 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
15800 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
15810 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
15820 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
15830 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
15840 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
15850 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
15860 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
15870 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20  *azColl;     /* 
15880 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
15890 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
158a0 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
158b0 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
158c0 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
158d0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
158e0 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
158f0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f  .  ExprList *aCo
15900 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43  lExpr;      /* C
15910 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
15920 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
15930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15940 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
15950 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
15960 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
15970 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
15980 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
15990 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
159a0 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
159b0 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
159c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
159d0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
159e0 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
159f0 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
15a00 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
15a10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
15a20 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
15a30 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
15a40 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
15a50 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
15a60 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
15a70 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
15a80 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
15a90 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
15aa0 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
15ab0 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
15ac0 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
15ad0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
15ae0 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
15af0 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
15b00 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
15b10 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
15b20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
15b30 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
15b40 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
15b50 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
15b60 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
15b70 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
15b80 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
15b90 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
15ba0 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
15bb0 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
15bc0 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
15bd0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
15be0 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
15bf0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
15c00 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
15c10 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
15c20 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
15c30 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  can if true */. 
15c40 20 75 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61   unsigned hasSta
15c50 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52  t1:1;     /* aiR
15c60 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20  owLogEst values 
15c70 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65  come from sqlite
15c80 5f 73 74 61 74 31 20 2a 2f 0a 23 69 66 64 65 66  _stat1 */.#ifdef
15c90 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
15ca0 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20  TAT3_OR_STAT4.  
15cb0 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20  int nSample;    
15cc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15cd0 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
15ce0 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20  n aSample[] */. 
15cf0 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b   int nSampleCol;
15d00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
15d10 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65  e of IndexSample
15d20 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f  .anEq[] and so o
15d30 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  n */.  tRowcnt *
15d40 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20  aAvgEq;         
15d50 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76  /* Average nEq v
15d60 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e  alues for keys n
15d70 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f  ot in aSample */
15d80 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a  .  IndexSample *
15d90 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53  aSample;    /* S
15da0 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
15db0 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20  ft-most key */. 
15dc0 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45   tRowcnt *aiRowE
15dd0 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  st;       /* Non
15de0 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61  -logarithmic sta
15df0 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73  t1 data for this
15e00 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77   index */.  tRow
15e10 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20  cnt nRowEst0;   
15e20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
15e30 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f  rithmic number o
15e40 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
15e50 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  dex */.#endif.};
15e60 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
15e70 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78  values for Index
15e80 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66  .idxType.*/.#def
15e90 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
15ea0 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30  PE_APPDEF      0
15eb0 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73     /* Created us
15ec0 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58  ing CREATE INDEX
15ed0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
15ee0 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55  TE_IDXTYPE_UNIQU
15ef0 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d  E      1   /* Im
15f00 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55  plements a UNIQU
15f10 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  E constraint */.
15f20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
15f30 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
15f40 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65  Y  2   /* Is the
15f50 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72   PRIMARY KEY for
15f60 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f   the table */../
15f70 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
15f80 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52   index X is a PR
15f90 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20  IMARY KEY index 
15fa0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69  */.#define IsPri
15fb0 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20  maryKeyIndex(X) 
15fc0 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d   ((X)->idxType==
15fd0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
15fe0 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52  RIMARYKEY)../* R
15ff0 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
16000 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55  dex X is a UNIQU
16010 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  E index */.#defi
16020 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  ne IsUniqueIndex
16030 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f  (X)      ((X)->o
16040 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29  nError!=OE_None)
16050 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61  ../* The Index.a
16060 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73  iColumn[] values
16070 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f   are normally po
16080 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20  sitive integer. 
16090 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72   But.** there ar
160a0 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20  e some negative 
160b0 76 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65  values that have
160c0 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
160d0 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  :.*/.#define XN_
160e0 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20  ROWID     (-1)  
160f0 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
16100 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69  lumn is the rowi
16110 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  d */.#define XN_
16120 45 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20  EXPR      (-2)  
16130 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
16140 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
16150 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ssion */../*.** 
16160 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72  Each sample stor
16170 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
16180 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20  _stat3 table is 
16190 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
161a0 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61  emory.** using a
161b0 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
161c0 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f  is type.  See do
161d0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74  cumentation at t
161e0 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a  he top of the.**
161f0 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63   analyze.c sourc
16200 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74  e file for addit
16210 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
16220 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  n..*/.struct Ind
16230 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69  exSample {.  voi
16240 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f  d *p;          /
16250 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d  * Pointer to sam
16260 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20  pled record */. 
16270 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
16280 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65     /* Size of re
16290 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f  cord in bytes */
162a0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71  .  tRowcnt *anEq
162b0 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
162c0 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
162d0 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
162e0 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
162f0 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b    tRowcnt *anLt;
16300 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
16310 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
16320 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
16330 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
16340 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c  .  tRowcnt *anDL
16350 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  t;   /* Est. num
16360 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
16370 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
16380 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
16390 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
163a0 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
163b0 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
163c0 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
163d0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
163e0 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
163f0 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
16400 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
16410 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f  **.** Note if To
16420 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f  ken.z==0 then To
16430 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65  ken.dyn and Toke
16440 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65  n.n are undefine
16450 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e  d and.** may con
16460 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75  tain random valu
16470 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65  es.  Do not make
16480 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73   any assumptions
16490 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e   about Token.dyn
164a0 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  .** and Token.n 
164b0 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e  when Token.z==0.
164c0 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e  .*/.struct Token
164d0 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
164e0 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20  *z;     /* Text 
164f0 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e  of the token.  N
16500 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74  ot NULL-terminat
16510 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ed! */.  unsigne
16520 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e  d int n;    /* N
16530 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
16540 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65  ers in this toke
16550 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  n */.};../*.** A
16560 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
16570 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  is structure con
16580 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
16590 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
165a0 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
165b0 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63   a SELECT that c
165c0 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
165d0 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  e functions..**.
165e0 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54  ** If Expr.op==T
165f0 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20  K_AGG_COLUMN or 
16600 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
16610 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e  then Expr.pAggIn
16620 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  fo is a.** point
16630 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
16640 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e  ture.  The Expr.
16650 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73  iColumn field is
16660 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a   the index in.**
16670 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20   AggInfo.aCol[] 
16680 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  or AggInfo.aFunc
16690 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  [] of informatio
166a0 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
166b0 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
166c0 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a   that node..**.*
166d0 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70  * AggInfo.pGroup
166e0 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61  By and AggInfo.a
166f0 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74  Func.pExpr point
16700 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69   to fields withi
16710 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  n the.** origina
16720 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75  l Select structu
16730 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  re that describe
16740 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  s the SELECT sta
16750 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a  tement.  These.*
16760 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20  * fields do not 
16770 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64  need to be freed
16780 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69   when deallocati
16790 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73  ng the AggInfo s
167a0 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
167b0 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20  uct AggInfo {.  
167c0 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20  u8 directMode;  
167d0 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63          /* Direc
167e0 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65  t rendering mode
167f0 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61   means take data
16800 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20   directly.      
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16820 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72      ** from sour
16830 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72  ce tables rather
16840 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d   than from accum
16850 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20  ulators */.  u8 
16860 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20  useSortingIdx;  
16870 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63       /* In direc
16880 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63  t mode, referenc
16890 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  e the sorting in
168a0 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20  dex rather.     
168b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168c0 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65       ** than the
168d0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
168e0 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
168f0 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75  x;         /* Cu
16900 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
16910 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
16920 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
16930 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a  gIdxPTab;     /*
16940 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
16950 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a  f pseudo-table *
16960 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67  /.  int nSorting
16970 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
16980 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16990 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
169a0 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d  index */.  int m
169b0 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20  nReg, mxReg;    
169c0 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72     /* Range of r
169d0 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
169e0 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20  ed for aCol and 
169f0 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c  aFunc */.  ExprL
16a00 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
16a10 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20     /* The group 
16a20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73  by clause */.  s
16a30 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f  truct AggInfo_co
16a40 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61  l {    /* For ea
16a50 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69  ch column used i
16a60 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  n source tables 
16a70 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
16a80 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
16a90 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20  /* Source table 
16aa0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c  */.    int iTabl
16ab0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
16ac0 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
16ad0 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74   of the source t
16ae0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
16af0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
16b00 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
16b10 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65  umber within the
16b20 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
16b30 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72  .    int iSorter
16b40 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a  Column;       /*
16b50 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   Column number i
16b60 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
16b70 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  dex */.    int i
16b80 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
16b90 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
16ba0 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
16bb0 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
16bc0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
16bd0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
16be0 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  /* The original 
16bf0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
16c00 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e  } *aCol;.  int n
16c10 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
16c20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16c30 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20  used entries in 
16c40 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  aCol[] */.  int 
16c50 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20  nAccumulator;   
16c60 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16c70 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68   columns that sh
16c80 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ow through to th
16c90 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20  e output..      
16ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cb0 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61      ** Additiona
16cc0 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  l columns are us
16cd0 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d  ed only as param
16ce0 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20  eters to.       
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d00 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20     ** aggregate 
16d10 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  functions */.  s
16d20 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75  truct AggInfo_fu
16d30 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61  nc {   /* For ea
16d40 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ch aggregate fun
16d50 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70  ction */.    Exp
16d60 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
16d70 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
16d80 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65  ion encoding the
16d90 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
16da0 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
16db0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
16dc0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
16dd0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
16de0 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  on */.    int iM
16df0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
16e00 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
16e10 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
16e20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
16e30 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69  /.    int iDisti
16e40 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nct;           /
16e50 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  * Ephemeral tabl
16e60 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63  e used to enforc
16e70 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20  e DISTINCT */.  
16e80 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20  } *aFunc;.  int 
16e90 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  nFunc;          
16ea0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16eb0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e   entries in aFun
16ec0 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  c[] */.};../*.**
16ed0 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e   The datatype yn
16ee0 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20  Var is a signed 
16ef0 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20  integer, either 
16f00 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74  16-bit or 32-bit
16f10 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20  ..** Usually it 
16f20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74  is 16-bits.  But
16f30 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56   if SQLITE_MAX_V
16f40 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69  ARIABLE_NUMBER i
16f50 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61  s greater.** tha
16f60 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20  n 32767 we have 
16f70 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69  to make it 32-bi
16f80 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72  t.  16-bit is pr
16f90 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a  eferred because.
16fa0 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20  ** it uses less 
16fb0 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78  memory in the Ex
16fc0 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68  pr object, which
16fd0 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79   is a big memory
16fe0 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74   user.** in syst
16ff0 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66  ems with lots of
17000 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
17010 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61  ents.  And few a
17020 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e  pplications.** n
17030 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62  eed more than ab
17040 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72  out 10 or 20 var
17050 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d  iables.  But som
17060 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20  e extreme users 
17070 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20  want.** to have 
17080 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
17090 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32  nts with over 32
170a0 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61  767 variables, a
170b0 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74  nd for them.** t
170c0 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61  he option is ava
170d0 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69  ilable (at compi
170e0 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66  le-time)..*/.#if
170f0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
17100 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37  ABLE_NUMBER<=327
17110 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79  67.typedef i16 y
17120 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65  nVar;.#else.type
17130 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23  def int ynVar;.#
17140 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  endif../*.** Eac
17150 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70  h node of an exp
17160 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70  ression in the p
17170 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20  arse tree is an 
17180 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
17190 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
171a0 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20  *.** Expr.op is 
171b0 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  the opcode. The 
171c0 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74  integer parser t
171d0 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72  oken codes are r
171e0 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f  eused.** as opco
171f0 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78  des here. For ex
17200 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65  ample, the parse
17210 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20  r defines TK_GE 
17220 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
17230 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65  .** code represe
17240 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f  nting the ">=" o
17250 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61  perator. This sa
17260 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20  me integer code 
17270 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20  is reused.** to 
17280 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72  represent the gr
17290 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71  eater-than-or-eq
172a0 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20  ual-to operator 
172b0 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
172c0 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  n.** tree..**.**
172d0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
172e0 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74  on is an SQL lit
172f0 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52  eral (TK_INTEGER
17300 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42  , TK_FLOAT, TK_B
17310 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54  LOB,.** or TK_ST
17320 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72  RING), then Expr
17330 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
17340 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  the text of the 
17350 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a  SQL literal. If.
17360 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
17370 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20  n is a variable 
17380 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74  (TK_VARIABLE), t
17390 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
173a0 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76  ontains the.** v
173b0 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
173c0 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
173d0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
173e0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
173f0 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
17400 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
17410 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
17420 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
17430 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
17440 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
17450 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
17460 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
17470 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
17480 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
17490 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
174a0 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
174b0 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
174c0 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
174d0 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
174e0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
174f0 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
17500 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
17510 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
17520 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
17530 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
17540 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
17550 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
17560 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
17570 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
17580 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
17590 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
175a0 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
175b0 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
175c0 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
175d0 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
175e0 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
175f0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
17600 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
17610 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
17620 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
17630 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a   is.** valid..**
17640 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f  .** An expressio
17650 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44  n of the form ID
17660 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73   or ID.ID refers
17670 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20   to a column in 
17680 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  a table..** For 
17690 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73  such expressions
176a0 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74  , Expr.op is set
176b0 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e   to TK_COLUMN an
176c0 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73  d Expr.iTable is
176d0 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20  .** the integer 
176e0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
176f0 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70   a VDBE cursor p
17700 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20  ointing to that 
17710 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70  table and.** Exp
17720 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65  r.iColumn is the
17730 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66   column number f
17740 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20  or the specific 
17750 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a  column.  If the.
17760 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ** expression is
17770 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c   used as a resul
17780 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  t in an aggregat
17790 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74  e SELECT, then t
177a0 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61  he.** value is a
177b0 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68  lso stored in th
177c0 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75  e Expr.iAgg colu
177d0 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67  mn in the aggreg
177e0 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69  ate so that.** i
177f0 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65  t can be accesse
17800 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72  d after all aggr
17810 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75  egates are compu
17820 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ted..**.** If th
17830 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
17840 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61  an unbound varia
17850 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75  ble marker (a qu
17860 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63  estion mark.** c
17870 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20  haracter '?' in 
17880 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  the original SQL
17890 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e  ) then the Expr.
178a0 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65  iTable holds the
178b0 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72   index.** number
178c0 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62   for that variab
178d0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
178e0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
178f0 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45   subquery then E
17900 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64  xpr.iColumn hold
17910 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  s an integer.** 
17920 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
17930 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72  containing the r
17940 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62  esult of the sub
17950 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a  query.  If the.*
17960 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73  * subquery gives
17970 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75   a constant resu
17980 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20  lt, then iTable 
17990 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73  is -1.  If the s
179a0 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73  ubquery.** gives
179b0 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73   a different ans
179c0 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74  wer at different
179d0 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74   times during st
179e0 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69  atement processi
179f0 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c  ng.** then iTabl
17a00 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73  e is the address
17a10 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65   of a subroutine
17a20 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74   that computes t
17a30 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a  he subquery..**.
17a40 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69  ** If the Expr i
17a50 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c  s of type OP_Col
17a60 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62  umn, and the tab
17a70 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69  le it is selecti
17a80 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20  ng from.** is a 
17a90 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68  disk table or th
17aa0 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f  e "old.*" pseudo
17ab0 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61  -table, then pTa
17ac0 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  b points to the.
17ad0 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
17ae0 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
17af0 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54  n..**.** ALLOCAT
17b00 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a  ION NOTES:.**.**
17b10 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61   Expr objects ca
17b20 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d  n use a lot of m
17b30 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64  emory space in d
17b40 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
17b50 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75   To.** help redu
17b60 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ce memory requir
17b70 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65  ements, sometime
17b80 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  s an Expr object
17b90 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e   will be.** trun
17ba0 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72  cated.  And to r
17bb0 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72  educe the number
17bc0 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
17bd0 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65  ations, sometime
17be0 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s.** two or more
17bf0 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69   Expr objects wi
17c00 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ll be stored in 
17c10 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20  a single memory 
17c20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74  allocation,.** t
17c30 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70  ogether with Exp
17c40 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73  r.zToken strings
17c50 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
17c60 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50  P_Reduced and EP
17c70 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73  _TokenOnly flags
17c80 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a   are set when.**
17c90 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
17ca0 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57  is truncated.  W
17cb0 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69  hen EP_Reduced i
17cc0 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a  s set, then all.
17cd0 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70  ** the child Exp
17ce0 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65  r objects in the
17cf0 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20   Expr.pLeft and 
17d00 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74  Expr.pRight subt
17d10 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  rees.** are cont
17d20 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65  ained within the
17d30 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c   same memory all
17d40 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20  ocation.  Note, 
17d50 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a  however, that.**
17d60 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e   the subtrees in
17d70 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72   Expr.x.pList or
17d80 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
17d90 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72  are always separ
17da0 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  ately.** allocat
17db0 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ed, regardless o
17dc0 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
17dd0 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
17de0 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  et..*/.struct Ex
17df0 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  pr {.  u8 op;   
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17e10 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f   Operation perfo
17e20 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  rmed by this nod
17e30 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  e */.  char affi
17e40 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  nity;         /*
17e50 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   The affinity of
17e60 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30   the column or 0
17e70 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e   if not a column
17e80 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b   */.  u32 flags;
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17ea0 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20  Various flags.  
17eb0 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a  EP_* See below *
17ec0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
17ed0 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20  char *zToken;   
17ee0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
17ef0 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d  value. Zero term
17f00 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f  inated and dequo
17f10 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ted */.    int i
17f20 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  Value;          
17f30 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76    /* Non-negativ
17f40 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
17f50 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a  if EP_IntValue *
17f60 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49  /.  } u;..  /* I
17f70 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  f the EP_TokenOn
17f80 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ly flag is set i
17f90 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
17fa0 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
17fb0 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
17fc0 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
17fd0 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
17fe0 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
17ff0 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
18000 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
18010 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
18020 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
18030 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
18040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18070 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70  ********/..  Exp
18080 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20  r *pLeft;       
18090 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e      /* Left subn
180a0 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ode */.  Expr *p
180b0 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  Right;          
180c0 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65  /* Right subnode
180d0 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
180e0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73    ExprList *pLis
180f0 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49  t;     /* op = I
18100 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
18110 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f  T, CASE, FUNCTIO
18120 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20  N, BETWEEN */.  
18130 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
18140 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73  t;     /* EP_xIs
18150 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20  Select and op = 
18160 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
18170 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20  CT */.  } x;..  
18180 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
18190 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
181a0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
181b0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
181c0 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
181d0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
181e0 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
181f0 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
18200 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
18210 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
18220 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
18230 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
18240 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
18250 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66  **********/..#if
18290 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
182a0 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
182b0 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
182c0 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
182d0 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
182e0 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
182f0 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62  endif.  int iTab
18300 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
18310 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72  * TK_COLUMN: cur
18320 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61  sor number of ta
18330 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75  ble holding colu
18340 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
18350 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
18360 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69  K_REGISTER: regi
18370 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20  ster number.    
18380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18390 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47       ** TK_TRIGG
183a0 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20  ER: 1 -> new, 0 
183b0 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20  -> old.         
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183d0 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20  ** EP_Unlikely: 
183e0 20 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73   134217728 times
183f0 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20   likelihood.    
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18410 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
18420 54 3a 20 31 73 74 20 72 65 67 69 73 74 65 72 20  T: 1st register 
18430 6f 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72  of result vector
18440 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c   */.  ynVar iCol
18450 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  umn;         /* 
18460 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d  TK_COLUMN: colum
18470 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72  n index.  -1 for
18480 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20   rowid..        
18490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184a0 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a   ** TK_VARIABLE:
184b0 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72   variable number
184c0 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a   (always >= 1)..
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184e0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53           ** TK_S
184f0 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f  ELECT_COLUMN: co
18500 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75  lumn of the resu
18510 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69  lt vector */.  i
18520 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  16 iAgg;        
18530 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
18540 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f  ntry in pAggInfo
18550 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46  ->aCol[] or ->aF
18560 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69  unc[] */.  i16 i
18570 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20  RightJoinTable; 
18580 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a    /* If EP_FromJ
18590 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74  oin, the right t
185a0 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e  able of the join
185b0 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
185c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
185d0 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69  TK_REGISTER: ori
185e0 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45  ginal value of E
185f0 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20  xpr.op.         
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68  ** TK_COLUMN: th
18620 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f  e value of p5 fo
18630 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20  r OP_Column.    
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18650 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46       ** TK_AGG_F
18660 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67  UNCTION: nesting
18670 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49   depth */.  AggI
18680 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
18690 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b     /* Used by TK
186a0 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  _AGG_COLUMN and 
186b0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
186c0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
186d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
186e0 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55  able for TK_COLU
186f0 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  MN expressions. 
18700 20 43 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20   Can be NULL.   
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18720 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63        ** for a c
18730 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65  olumn of an inde
18740 78 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69  x on an expressi
18750 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
18760 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
18770 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  e the meanings o
18780 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78  f bits in the Ex
18790 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
187a0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72  */.#define EP_Fr
187b0 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31  omJoin  0x000001
187c0 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69   /* Originates i
187d0 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73  n ON/USING claus
187e0 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20  e of outer join 
187f0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67  */.#define EP_Ag
18800 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  g       0x000002
18810 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
18820 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
18830 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
18840 23 64 65 66 69 6e 65 20 45 50 5f 48 61 73 46 75  #define EP_HasFu
18850 6e 63 20 20 20 30 78 30 30 30 30 30 34 20 2f 2a  nc   0x000004 /*
18860 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
18870 20 6d 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20   more functions 
18880 6f 66 20 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a 20  of any kind */. 
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188a0 20 2f 2a 20 30 78 30 30 30 30 30 38 20 2f 2f 20   /* 0x000008 // 
188b0 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 75 73  available for us
188c0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
188d0 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30  Distinct  0x0000
188e0 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  10 /* Aggregate 
188f0 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
18900 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
18910 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72  /.#define EP_Var
18920 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20  Select 0x000020 
18930 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f  /* pSelect is co
18940 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f  rrelated, not co
18950 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  nstant */.#defin
18960 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30  e EP_DblQuoted 0
18970 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e  x000040 /* token
18980 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  .z was originall
18990 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64  y in "..." */.#d
189a0 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75  efine EP_InfixFu
189b0 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54  nc 0x000080 /* T
189c0 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78  rue for an infix
189d0 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c   function: LIKE,
189e0 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64   GLOB, etc */.#d
189f0 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65  efine EP_Collate
18a00 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54     0x000100 /* T
18a10 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
18a20 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  K_COLLATE operat
18a30 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  or */.#define EP
18a40 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30  _Generic   0x000
18a50 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f  200 /* Ignore CO
18a60 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74  LLATE or affinit
18a70 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a  y on this tree *
18a80 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74  /.#define EP_Int
18a90 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20  Value  0x000400 
18aa0 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
18ab0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e   contained in u.
18ac0 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e  iValue */.#defin
18ad0 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30  e EP_xIsSelect 0
18ae0 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65  x000800 /* x.pSe
18af0 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f  lect is valid (o
18b00 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74  therwise x.pList
18b10 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20   is) */.#define 
18b20 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30  EP_Skip      0x0
18b30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45  01000 /* COLLATE
18b40 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c  , AS, or UNLIKEL
18b50 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  Y */.#define EP_
18b60 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30  Reduced   0x0020
18b70 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
18b80 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  t EXPR_REDUCEDSI
18b90 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
18ba0 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65  .#define EP_Toke
18bb0 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f  nOnly 0x004000 /
18bc0 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
18bd0 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
18be0 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
18bf0 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
18c00 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20      0x008000 /* 
18c10 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
18c20 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
18c30 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65   malloc() */.#de
18c40 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e  fine EP_MemToken
18c50 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65    0x010000 /* Ne
18c60 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
18c70 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
18c80 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
18c90 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30  NoReduce  0x0200
18ca0 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50  00 /* Cannot EXP
18cb0 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73  RDUP_REDUCE this
18cc0 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65   Expr */.#define
18cd0 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78   EP_Unlikely  0x
18ce0 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65  040000 /* unlike
18cf0 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f  ly() or likeliho
18d00 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  od() function */
18d10 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73  .#define EP_Cons
18d20 74 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f  tFunc 0x080000 /
18d30 2a 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  * A SQLITE_FUNC_
18d40 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f  CONSTANT or _SLO
18d50 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  CHNG function */
18d60 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42  .#define EP_CanB
18d70 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f  eNull 0x100000 /
18d80 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65  * Can be null de
18d90 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63  spite NOT NULL c
18da0 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
18db0 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79  fine EP_Subquery
18dc0 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72    0x200000 /* Tr
18dd0 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
18de0 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72  _SELECT operator
18df0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
18e00 6c 69 61 73 20 20 20 20 20 30 78 34 30 30 30 30  lias     0x40000
18e10 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73  0 /* Is an alias
18e20 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65   for a result se
18e30 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  t column */.#def
18e40 69 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20  ine EP_Leaf     
18e50 20 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70   0x800000 /* Exp
18e60 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74  r.pLeft, .pRight
18e70 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c  , .u.pSelect all
18e80 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
18e90 54 68 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  The EP_Propagate
18ea0 20 6d 61 73 6b 20 69 73 20 61 20 73 65 74 20 6f   mask is a set o
18eb0 66 20 70 72 6f 70 65 72 74 69 65 73 20 74 68 61  f properties tha
18ec0 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  t automatically 
18ed0 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70 77  propagate.** upw
18ee0 61 72 64 73 20 69 6e 74 6f 20 70 61 72 65 6e 74  ards into parent
18ef0 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69   nodes..*/.#defi
18f00 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20  ne EP_Propagate 
18f10 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53  (EP_Collate|EP_S
18f20 75 62 71 75 65 72 79 7c 45 50 5f 48 61 73 46 75  ubquery|EP_HasFu
18f30 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  nc)../*.** These
18f40 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75   macros can be u
18f50 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74  sed to test, set
18f60 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20  , or clear bits 
18f70 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
18f80 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
18f90 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72  define ExprHasPr
18fa0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
18fb0 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
18fc0 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78  )!=0).#define Ex
18fd0 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79  prHasAllProperty
18fe0 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c  (E,P)  (((E)->fl
18ff0 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
19000 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72  define ExprSetPr
19010 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
19020 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
19030 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61  #define ExprClea
19040 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  rProperty(E,P)  
19050 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50   (E)->flags&=~(P
19060 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65  )../* The ExprSe
19070 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d  tVVAProperty() m
19080 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
19090 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56   Verification, V
190a0 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e  alidation,.** an
190b0 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20  d Accreditation 
190c0 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20  only.  It works 
190d0 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70  like ExprSetProp
190e0 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56  erty() during VV
190f0 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62  A.** processes b
19100 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f  ut is a no-op fo
19110 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23  r delivery..*/.#
19120 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
19130 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  UG.# define Expr
19140 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
19150 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c  ,P)  (E)->flags|
19160 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  =(P).#else.# def
19170 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
19180 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64  operty(E,P).#end
19190 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
191a0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
191b0 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
191c0 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20  s required by a 
191d0 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73  normal Expr.** s
191e0 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73  truct, an Expr s
191f0 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
19200 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73  P_Reduced flag s
19210 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73  et in Expr.flags
19220 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20  .** and an Expr 
19230 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
19240 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
19250 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  g set..*/.#defin
19260 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20  e EXPR_FULLSIZE 
19270 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
19280 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20  (Expr)          
19290 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f   /* Full size */
192a0 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45  .#define EXPR_RE
192b0 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20  DUCEDSIZE       
192c0 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69   offsetof(Expr,i
192d0 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f  Table)  /* Commo
192e0 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64  n features */.#d
192f0 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e  efine EXPR_TOKEN
19300 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66  ONLYSIZE      of
19310 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66  fsetof(Expr,pLef
19320 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65  t)   /* Fewer fe
19330 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  atures */../*.**
19340 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
19350 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72   the sqlite3Expr
19360 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  Dup() function. 
19370 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63  See the header c
19380 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20  omment.** above 
19390 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
193a0 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
193b0 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50  .#define EXPRDUP
193c0 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20  _REDUCE         
193d0 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20  0x0001  /* Used 
193e0 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70  reduced-size Exp
193f0 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  r nodes */../*.*
19400 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72  * A list of expr
19410 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65  essions.  Each e
19420 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70  xpression may op
19430 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a  tionally have a.
19440 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70  ** name.  An exp
19450 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69  r/name combinati
19460 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
19470 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
19480 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c  such.** as the l
19490 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20  ist of "expr AS 
194a0 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f  ID" fields follo
194b0 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20  wing a "SELECT" 
194c0 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73  or in the.** lis
194d0 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22  t of "ID = expr"
194e0 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44   items in an UPD
194f0 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20  ATE.  A list of 
19500 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a  expressions can.
19510 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ** also be used 
19520 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
19530 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69  to a function, i
19540 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
19550 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c   a.zName.** fiel
19560 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  d is not used..*
19570 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20  *.** By default 
19580 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66  the Expr.zSpan f
19590 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d  ield holds a hum
195a0 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63  an-readable desc
195b0 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ription of.** th
195c0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
195d0 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  t is used in the
195e0 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65   generation of e
195f0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e  rror messages an
19600 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65  d.** column labe
19610 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ls.  In this cas
19620 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73  e, Expr.zSpan is
19630 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74   typically the t
19640 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75  ext of a.** colu
19650 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  mn expression as
19660 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20   it exists in a 
19670 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
19680 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a  .  However, if.*
19690 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62  * the bSpanIsTab
196a0 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
196b0 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72  en zSpan is over
196c0 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74  loaded to mean t
196d0 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68  he name.** of th
196e0 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
196f0 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54  in the form: DAT
19700 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55  ABASE.TABLE.COLU
19710 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a  MN.  This later.
19720 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20  ** form is used 
19730 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  for name resolut
19740 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20  ion with nested 
19750 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f  FROM clauses..*/
19760 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
19770 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
19780 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
19790 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
197a0 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
197b0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
197c0 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
197d0 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
197e0 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
197f0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
19800 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  pr;            /
19810 2a 20 54 68 65 20 70 61 72 73 65 20 74 72 65 65  * The parse tree
19820 20 66 6f 72 20 74 68 69 73 20 65 78 70 72 65 73   for this expres
19830 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
19840 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
19850 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73      /* Token ass
19860 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
19870 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
19880 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b      char *zSpan;
19890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
198a0 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20  riginal text of 
198b0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  the expression *
198c0 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64  /.    u8 sortOrd
198d0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
198e0 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30   1 for DESC or 0
198f0 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20   for ASC */.    
19900 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31  unsigned done :1
19910 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61  ;       /* A fla
19920 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68  g to indicate wh
19930 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  en processing is
19940 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20   finished */.   
19950 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49   unsigned bSpanI
19960 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61  sTab :1; /* zSpa
19970 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45  n holds DB.TABLE
19980 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75  .COLUMN */.    u
19990 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65  nsigned reusable
199a0 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61   :1;   /* Consta
199b0 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  nt expression is
199c0 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20   reusable */.   
199d0 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73   union {.      s
199e0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20  truct {.        
199f0 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b  u16 iOrderByCol;
19a00 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44        /* For ORD
19a10 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75  ER BY, column nu
19a20 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73  mber in result s
19a30 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31  et */.        u1
19a40 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
19a50 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
19a60 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d  o Parse.aAlias[]
19a70 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20   for zName */.  
19a80 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69      } x;.      i
19a90 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67  nt iConstExprReg
19aa0 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  ;      /* Regist
19ab0 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72  er in which Expr
19ac0 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64   value is cached
19ad0 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d   */.    } u;.  }
19ae0 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
19af0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 73          /* One s
19b00 6c 6f 74 20 66 6f 72 20 65 61 63 68 20 65 78 70  lot for each exp
19b10 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
19b20 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
19b30 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
19b40 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
19b50 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61  s used by the pa
19b60 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62  rser to record b
19b70 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  oth.** the parse
19b80 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70   tree for an exp
19b90 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  ression and the 
19ba0 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65  span of input te
19bb0 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  xt for an.** exp
19bc0 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ression..*/.stru
19bd0 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20  ct ExprSpan {.  
19be0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
19bf0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70        /* The exp
19c00 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72  ression parse tr
19c10 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ee */.  const ch
19c20 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a  ar *zStart;   /*
19c30 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72   First character
19c40 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
19c50 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
19c60 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65  zEnd;     /* One
19c70 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20   character past 
19c80 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
19c90 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   text */.};../*.
19ca0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
19cb0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
19cc0 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
19cd0 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
19ce0 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
19cf0 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
19d00 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
19d10 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
19d20 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
19d30 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
19d40 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
19d50 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
19d60 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
19d70 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
19d80 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
19d90 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
19da0 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
19db0 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
19dc0 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
19dd0 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
19de0 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
19df0 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
19e00 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
19e10 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
19e20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
19e30 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
19e40 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
19e50 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
19e60 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
19e70 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
19e80 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
19e90 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
19ea0 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
19eb0 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
19ec0 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
19ed0 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
19ee0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
19ef0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
19f00 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
19f10 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
19f20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
19f30 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
19f40 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
19f50 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
19f60 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
19f70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19f80 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
19f90 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
19fa0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  };../*.** The bi
19fb0 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
19fc0 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
19fd0 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
19fe0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
19ff0 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
1a000 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
1a010 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
1a020 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
1a030 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
1a040 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
1a050 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
1a060 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
1a070 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
1a080 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
1a090 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
1a0a0 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66   ix86..*/.#ifdef
1a0b0 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
1a0c0 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20 53  TYPE.  typedef S
1a0d0 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59  QLITE_BITMASK_TY
1a0e0 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73  PE Bitmask;.#els
1a0f0 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20  e.  typedef u64 
1a100 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  Bitmask;.#endif.
1a110 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
1a120 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
1a130 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
1a140 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
1a150 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
1a160 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
1a170 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
1a180 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
1a190 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
1a1a0 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
1a1b0 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
1a1c0 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41  <(n)).#define MA
1a1d0 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e  SKBIT32(n) (((un
1a1e0 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28  signed int)1)<<(
1a1f0 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42  n)).#define ALLB
1a200 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d 61  ITS      ((Bitma
1a210 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  sk)-1)../*.** Th
1a220 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1a230 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20  cture describes 
1a240 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1a250 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
1a260 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74  ement..** Each t
1a270 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
1a280 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
1a290 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74  use is a separat
1a2a0 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20  e element of.** 
1a2b0 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20  the SrcList.a[] 
1a2c0 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74  array..**.** Wit
1a2d0 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  h the addition o
1a2e0 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  f multiple datab
1a2f0 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65  ase support, the
1a300 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1a310 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f  ture.** can also
1a320 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63   be used to desc
1a330 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61  ribe a particula
1a340 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20  r table such as 
1a350 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a  the table that.*
1a360 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79  * is modified by
1a370 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
1a380 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74  TE, or UPDATE st
1a390 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61  atement.  In sta
1a3a0 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75  ndard SQL,.** su
1a3b0 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20  ch a table must 
1a3c0 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65  be a simple name
1a3d0 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51  : ID.  But in SQ
1a3e0 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20  Lite, the table 
1a3f0 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64  can.** now be id
1a400 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61  entified by a da
1a410 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64  tabase name, a d
1a420 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ot, then the tab
1a430 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a  le name: ID.ID..
1a440 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79  **.** The jointy
1a450 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68  pe starts out sh
1a460 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74  owing the join t
1a470 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  ype between the 
1a480 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a  current table.**
1a490 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61   and the next ta
1a4a0 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e  ble on the list.
1a4b0 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69    The parser bui
1a4c0 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69  lds the list thi
1a4d0 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71  s way..** But sq
1a4e0 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
1a4f0 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65  tJoinType() late
1a500 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69  r shifts the joi
1a510 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65  ntypes so that e
1a520 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20  ach.** jointype 
1a530 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f  expresses the jo
1a540 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  in between the t
1a550 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
1a560 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a  vious table..**.
1a570 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65  ** In the colUse
1a580 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67  d field, the hig
1a590 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74  h-order bit (bit
1a5a0 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74   63) is set if t
1a5b0 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74  he table.** cont
1a5c0 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36  ains more than 6
1a5d0 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68  3 columns and th
1a5e0 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72  e 64-th or later
1a5f0 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e   column is used.
1a600 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69  .*/.struct SrcLi
1a610 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b  st {.  int nSrc;
1a620 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a630 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73  r of tables or s
1a640 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65  ubqueries in the
1a650 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1a660 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20    u32 nAlloc;   
1a670 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1a680 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65  entries allocate
1a690 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a  d in a[] below *
1a6a0 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69  /.  struct SrcLi
1a6b0 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63  st_item {.    Sc
1a6c0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1a6d0 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69  /* Schema to whi
1a6e0 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20  ch this item is 
1a6f0 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61  fixed */.    cha
1a700 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f  r *zDatabase;  /
1a710 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
1a720 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20  se holding this 
1a730 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
1a740 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
1a750 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
1a760 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
1a770 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20  *zAlias;     /* 
1a780 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20  The "B" part of 
1a790 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73  a "A AS B" phras
1a7a0 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65  e.  zName is the
1a7b0 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c   "A" */.    Tabl
1a7c0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a  e *pTab;      /*
1a7d0 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f   An SQL table co
1a7e0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a  rresponding to z
1a7f0 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65  Name */.    Sele
1a800 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a  ct *pSelect;  /*
1a810 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   A SELECT statem
1a820 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63  ent used in plac
1a830 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  e of a table nam
1a840 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  e */.    int add
1a850 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64  rFillSub;  /* Ad
1a860 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74  dress of subrout
1a870 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20  ine to manifest 
1a880 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20  a subquery */.  
1a890 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b    int regReturn;
1a8a0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1a8b0 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61  holding return a
1a8c0 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69  ddress of addrFi
1a8d0 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74  llSub */.    int
1a8e0 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f   regResult;    /
1a8f0 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64  * Registers hold
1a900 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61  ing results of a
1a910 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
1a920 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
1a930 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20    u8 jointype;  
1a940 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a      /* Type of j
1a950 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73  oin between this
1a960 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
1a970 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20  revious */.     
1a980 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64   unsigned notInd
1a990 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54  exed :1;    /* T
1a9a0 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1a9b0 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
1a9c0 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1a9d0 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64  signed isIndexed
1a9e0 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  By :1;   /* True
1a9f0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
1aa00 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
1aa10 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
1aa20 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31  ned isTabFunc :1
1aa30 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
1aa40 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
1aa50 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f  nction syntax */
1aa60 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1aa70 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
1aa80 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
1aa90 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
1aaa0 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ated */.      un
1aab0 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74  signed viaCorout
1aac0 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c  ine :1;  /* Impl
1aad0 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d  emented as a co-
1aae0 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20  routine */.     
1aaf0 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75   unsigned isRecu
1ab00 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54  rsive :1;   /* T
1ab10 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76  rue for recursiv
1ab20 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57  e reference in W
1ab30 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b  ITH */.    } fg;
1ab40 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1ab50 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20  OMIT_EXPLAIN.   
1ab60 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20   u8 iSelectId;  
1ab70 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74     /* If pSelect
1ab80 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74  !=0, the id of t
1ab90 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e  he sub-select in
1aba0 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20   EQP */.#endif. 
1abb0 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20     int iCursor; 
1abc0 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
1abd0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75   cursor number u
1abe0 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
1abf0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
1ac00 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20  Expr *pOn;      
1ac10 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75    /* The ON clau
1ac20 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
1ac30 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69      IdList *pUsi
1ac40 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49  ng;   /* The USI
1ac50 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
1ac60 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61  oin */.    Bitma
1ac70 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20  sk colUsed;  /* 
1ac80 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74  Bit N (1<<N) set
1ac90 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20   if column N of 
1aca0 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a  pTab is used */.
1acb0 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
1acc0 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64    char *zIndexed
1acd0 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69  By;    /* Identi
1ace0 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58  fier from "INDEX
1acf0 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20  ED BY <zIndex>" 
1ad00 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
1ad10 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41  ExprList *pFuncA
1ad20 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74  rg;  /* Argument
1ad30 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65  s to table-value
1ad40 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  d-function */.  
1ad50 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65    } u1;.    Inde
1ad60 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a  x *pIBIndex;  /*
1ad70 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
1ad80 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1ad90 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20  o u1.zIndexedBy 
1ada0 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  */.  } a[1];    
1adb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1adc0 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69  entry for each i
1add0 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65  dentifier on the
1ade0 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
1adf0 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c  ** Permitted val
1ae00 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69  ues of the SrcLi
1ae10 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69  st.a.jointype fi
1ae20 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  eld.*/.#define J
1ae30 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30  T_INNER     0x00
1ae40 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e  01    /* Any kin
1ae50 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72  d of inner or cr
1ae60 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  oss join */.#def
1ae70 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20  ine JT_CROSS    
1ae80 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78   0x0002    /* Ex
1ae90 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68  plicit use of th
1aea0 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20  e CROSS keyword 
1aeb0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41  */.#define JT_NA
1aec0 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20  TURAL   0x0004  
1aed0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20    /* True for a 
1aee0 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a  "natural" join *
1aef0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46  /.#define JT_LEF
1af00 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20  T      0x0008   
1af10 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a   /* Left outer j
1af20 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1af30 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30  T_RIGHT     0x00
1af40 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  10    /* Right o
1af50 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
1af60 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20  fine JT_OUTER   
1af70 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54    0x0020    /* T
1af80 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f  he "OUTER" keywo
1af90 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f  rd is present */
1afa0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f  .#define JT_ERRO
1afb0 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20  R     0x0040    
1afc0 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e  /* unknown or un
1afd0 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74  supported join t
1afe0 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46  ype */.../*.** F
1aff0 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65  lags appropriate
1b000 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c   for the wctrlFl
1b010 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66  ags parameter of
1b020 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67   sqlite3WhereBeg
1b030 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20  in().** and the 
1b040 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46  WhereInfo.wctrlF
1b050 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a  lags member..**.
1b060 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1b070 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
1b080 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
1b090 20 20 20 20 20 57 48 45 52 45 5f 55 53 45 5f 4c       WHERE_USE_L
1b0a0 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69 78 65  IMIT  == SF_Fixe
1b0b0 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e  dLimit.*/.#defin
1b0c0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1b0d0 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
1b0e0 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
1b0f0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1b100 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
1b110 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
1b120 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
1b130 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
1b140 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1b150 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
1b160 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
1b170 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
1b180 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
1b190 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
1b1a0 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
1b1b0 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
1b1c0 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
1b1d0 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
1b1e0 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55  WHERE_ONEPASS_MU
1b1f0 4c 54 49 52 4f 57 20 30 78 30 30 30 38 20 2f 2a  LTIROW 0x0008 /*
1b200 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77   ONEPASS is ok w
1b210 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ith multiple row
1b220 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
1b230 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b  RE_DUPLICATES_OK
1b240 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b      0x0010 /* Ok
1b250 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77   to return a row
1b260 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20   more than once 
1b270 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b280 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45 20 20 20  _OR_SUBCLAUSE   
1b290 20 20 30 78 30 30 32 30 20 2f 2a 20 50 72 6f 63    0x0020 /* Proc
1b2a0 65 73 73 69 6e 67 20 61 20 73 75 62 2d 57 48 45  essing a sub-WHE
1b2b0 52 45 20 61 73 20 70 61 72 74 20 6f 66 0a 20 20  RE as part of.  
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70      ** the OR op
1b2f0 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23  timization  */.#
1b300 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f  define WHERE_GRO
1b310 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78  UPBY          0x
1b320 30 30 34 30 20 2f 2a 20 70 4f 72 64 65 72 42 79  0040 /* pOrderBy
1b330 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f   is really a GRO
1b340 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  UP BY */.#define
1b350 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42   WHERE_DISTINCTB
1b360 59 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f  Y       0x0080 /
1b370 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65  * pOrderby is re
1b380 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20  ally a DISTINCT 
1b390 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1b3a0 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53  e WHERE_WANT_DIS
1b3b0 54 49 4e 43 54 20 20 20 20 30 78 30 31 30 30 20  TINCT    0x0100 
1b3c0 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65  /* All output ne
1b3d0 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e  eds to be distin
1b3e0 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ct */.#define WH
1b3f0 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20  ERE_SORTBYGROUP 
1b400 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 53       0x0200 /* S
1b410 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68  upport sqlite3Wh
1b420 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f  ereIsSorted() */
1b430 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1b440 45 45 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20  EEK_TABLE       
1b450 30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0400 /* Do not
1b460 20 64 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20   defer seeks on 
1b470 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64  main table */.#d
1b480 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1b490 52 42 59 5f 4c 49 4d 49 54 20 20 20 20 30 78 30  RBY_LIMIT    0x0
1b4a0 38 30 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c  800 /* ORDERBY+L
1b4b0 49 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65  IMIT on the inne
1b4c0 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e  r loop */.#defin
1b4d0 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49  e WHERE_SEEK_UNI
1b4e0 51 5f 54 41 42 4c 45 20 20 30 78 31 30 30 30 20  Q_TABLE  0x1000 
1b4f0 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20  /* Do not defer 
1b500 73 65 65 6b 73 20 69 66 20 75 6e 69 71 75 65 20  seeks if unique 
1b510 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
1b520 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
1b530 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20    0x2000    not 
1b540 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a  currently used *
1b550 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b560 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20  USE_LIMIT       
1b570 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74   0x4000 /* Use t
1b580 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74  he LIMIT in cost
1b590 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20   estimates */.  
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5b0 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38        /*     0x8
1b5c0 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65  000    not curre
1b5d0 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a  ntly used */../*
1b5e0 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
1b5f0 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
1b600 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e  te3WhereIsDistin
1b610 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ct().*/.#define 
1b620 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e  WHERE_DISTINCT_N
1b630 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44  OOP      0  /* D
1b640 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
1b650 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66  not used */.#def
1b660 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1b670 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20  CT_UNIQUE    1  
1b680 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73  /* No duplicates
1b690 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b6a0 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52  E_DISTINCT_ORDER
1b6b0 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64  ED   2  /* All d
1b6c0 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64  uplicates are ad
1b6d0 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  jacent */.#defin
1b6e0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1b6f0 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a  _UNORDERED 3  /*
1b700 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   Duplicates are 
1b710 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a  scattered */../*
1b720 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78  .** A NameContex
1b730 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74  t defines a cont
1b740 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20  ext in which to 
1b750 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e  resolve table an
1b760 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65  d column.** name
1b770 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20  s.  The context 
1b780 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69  consists of a li
1b790 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68  st of tables (th
1b7a0 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c  e pSrcList) fiel
1b7b0 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20  d and.** a list 
1b7c0 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
1b7d0 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54  ion (pEList).  T
1b7e0 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  he named express
1b7f0 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20  ion list may.** 
1b800 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53  be NULL.  The pS
1b810 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  rc corresponds t
1b820 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  o the FROM claus
1b830 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72  e of a SELECT or
1b840 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65  .** to the table
1b850 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
1b860 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50  on by INSERT, UP
1b870 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e  DATE, or DELETE.
1b880 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20    The.** pEList 
1b890 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
1b8a0 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66  he result set of
1b8b0 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73   a SELECT and is
1b8c0 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68   NULL for.** oth
1b8d0 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  er statements..*
1b8e0 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  *.** NameContext
1b8f0 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e  s can be nested.
1b900 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67    When resolving
1b910 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65   names, the inne
1b920 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78  r-most.** contex
1b930 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69  t is searched fi
1b940 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63  rst.  If no matc
1b950 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
1b960 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f  next outer.** co
1b970 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64  ntext is checked
1b980 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73  .  If there is s
1b990 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74  till no match, t
1b9a0 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a  he next context.
1b9b0 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  ** is checked.  
1b9c0 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e  This process con
1b9d0 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74  tinues until eit
1b9e0 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66  her a match is f
1b9f0 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63  ound.** or all c
1ba00 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63  ontexts are chec
1ba10 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68  k.  When a match
1ba20 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
1ba30 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a  Ref member of.**
1ba40 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   the context con
1ba50 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63  taining the matc
1ba60 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  h is incremented
1ba70 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62  ..**.** Each sub
1ba80 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77  query gets a new
1ba90 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54   NameContext.  T
1baa0 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70  he pNext field p
1bab0 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
1bac0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74  NameContext in t
1bad0 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e  he parent query.
1bae0 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65    Thus the proce
1baf0 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74  ss of scanning t
1bb00 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
1bb10 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  t list correspon
1bb20 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20  ds to searching 
1bb30 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69  through successi
1bb40 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75  vely outer.** su
1bb50 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67  bqueries looking
1bb60 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f   for a match..*/
1bb70 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74  .struct NameCont
1bb80 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  ext {.  Parse *p
1bb90 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20  Parse;       /* 
1bba0 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  The parser */.  
1bbb0 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
1bbc0 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  t;   /* One or m
1bbd0 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20  ore tables used 
1bbe0 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73  to resolve names
1bbf0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1bc00 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70  pEList;    /* Op
1bc10 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72  tional list of r
1bc20 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e  esult-set column
1bc30 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  s */.  AggInfo *
1bc40 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49  pAggInfo;   /* I
1bc50 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1bc60 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74   aggregates at t
1bc70 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e  his level */.  N
1bc80 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78  ameContext *pNex
1bc90 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65  t;  /* Next oute
1bca0 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20  r name context. 
1bcb0 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d   NULL for outerm
1bcc0 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  ost */.  int nRe
1bcd0 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
1bce0 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73   Number of names
1bcf0 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69   resolved by thi
1bd00 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69  s context */.  i
1bd10 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1bd20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1bd30 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65   errors encounte
1bd40 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76  red while resolv
1bd50 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75  ing names */.  u
1bd60 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20  16 ncFlags;     
1bd70 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d      /* Zero or m
1bd80 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64  ore NC_* flags d
1bd90 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a  efined below */.
1bda0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1bdb0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
1bdc0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63   NameContext, nc
1bdd0 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  Flags field..**.
1bde0 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1bdf0 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1be00 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
1be10 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67  .**    NC_HasAgg
1be20 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67      == SF_HasAgg
1be30 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78  .**    NC_MinMax
1be40 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78  Agg == SF_MinMax
1be50 41 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55  Agg == SQLITE_FU
1be60 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a  NC_MINMAX.**.*/.
1be70 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77  #define NC_Allow
1be80 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20  Agg  0x0001  /* 
1be90 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
1bea0 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ons are allowed 
1beb0 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1bec0 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30  NC_PartIdx   0x0
1bed0 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20  002  /* True if 
1bee0 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74  resolving a part
1bef0 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20  ial index WHERE 
1bf00 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
1bf10 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20  Check   0x0004  
1bf20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1bf30 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
1bf40 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
1bf50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1bf60 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20  nAggFunc 0x0008 
1bf70 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
1bf80 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
1bf90 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
1bfa0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73  /.#define NC_Has
1bfb0 41 67 67 20 20 20 20 30 78 30 30 31 30 20 20 2f  Agg    0x0010  /
1bfc0 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  * One or more ag
1bfd0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1bfe0 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
1bff0 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30  e NC_IdxExpr   0
1c000 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69  x0020  /* True i
1c010 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75  f resolving colu
1c020 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e  mns of CREATE IN
1c030 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  DEX */.#define N
1c040 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  C_VarSelect 0x00
1c050 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61  40  /* A correla
1c060 74 65 64 20 73 75 62 71 75 65 72 79 20 68 61 73  ted subquery has
1c070 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64   been seen */.#d
1c080 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41  efine NC_MinMaxA
1c090 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69  gg 0x1000  /* mi
1c0a0 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73  n/max aggregates
1c0b0 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65   seen.  See note
1c0c0 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
1c0d0 65 20 4e 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30  e NC_Complex   0
1c0e0 78 32 30 30 30 20 20 2f 2a 20 54 72 75 65 20 69  x2000  /* True i
1c0f0 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20  f a function or 
1c100 73 75 62 71 75 65 72 79 20 73 65 65 6e 20 2a 2f  subquery seen */
1c110 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1c120 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1c130 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1c140 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f  ontains all info
1c150 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65  rmation.** neede
1c160 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f  d to generate co
1c170 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  de for a single 
1c180 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1c190 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69  ..**.** nLimit i
1c1a0 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74  s set to -1 if t
1c1b0 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
1c1c0 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65   clause.  nOffse
1c1d0 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a  t is set to 0..*
1c1e0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20  * If there is a 
1c1f0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
1c200 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c  e parser sets nL
1c210 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75  imit to the valu
1c220 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69  e of the.** limi
1c230 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f  t and nOffset to
1c240 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
1c250 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69  e offset (or 0 i
1c260 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a  f there is not.*
1c270 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20  * offset).  But 
1c280 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74  later on, nLimit
1c290 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63   and nOffset bec
1c2a0 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  ome the memory l
1c2b0 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74  ocations.** in t
1c2c0 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63  he VDBE that rec
1c2d0 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e  ord the limit an
1c2e0 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72  d offset counter
1c2f0 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
1c300 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
1c310 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
1c320 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
1c330 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
1c340 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
1c350 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
1c360 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
1c370 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
1c380 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
1c390 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
1c3a0 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
1c3b0 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
1c3c0 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
1c3d0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1c3e0 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
1c3f0 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
1c400 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
1c410 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
1c420 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
1c430 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
1c440 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
1c450 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
1c460 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
1c470 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
1c480 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
1c490 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
1c4a0 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
1c4b0 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
1c4c0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
1c4d0 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
1c4e0 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
1c4f0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
1c500 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Ephm[2] contains
1c510 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
1c520 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
1c530 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1c540 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
1c550 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
1c560 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
1c570 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
1c580 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
1c590 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1c5a0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
1c5b0 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
1c5c0 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
1c5d0 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45  EXCEPT */.  LogE
1c5e0 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20  st nSelectRow;  
1c5f0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
1c600 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74  number of result
1c610 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73   rows */.  u32 s
1c620 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  elFlags;        
1c630 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f    /* Various SF_
1c640 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * values */.  in
1c650 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65  t iLimit, iOffse
1c660 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72  t;   /* Memory r
1c670 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
1c680 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20   LIMIT & OFFSET 
1c690 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20  counters */.#if 
1c6a0 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
1c6b0 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e  LED.  char zSelN
1c6c0 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20  ame[12];     /* 
1c6d0 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66  Symbolic name of
1c6e0 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65   this SELECT use
1c6f0 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a   for debugging *
1c700 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61  /.#endif.  int a
1c710 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20  ddrOpenEphm[2]; 
1c720 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
1c730 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
1c740 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1c750 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1c760 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
1c770 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
1c780 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
1c790 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
1c7a0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1c7b0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1c7c0 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
1c7d0 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
1c7e0 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
1c7f0 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
1c800 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
1c810 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
1c820 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
1c830 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1c840 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
1c850 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
1c860 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
1c870 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
1c880 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
1c890 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
1c8a0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
1c8b0 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
1c8c0 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
1c8d0 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72  mpound */.  Expr
1c8e0 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
1c8f0 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
1c900 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
1c910 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
1c920 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
1c930 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48           /* WITH
1c940 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64   clause attached
1c950 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e   to this select.
1c960 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a   Or NULL. */.};.
1c970 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
1c980 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74  alues for Select
1c990 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20  .selFlags.  The 
1c9a0 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e  "SF" prefix stan
1c9b0 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63  ds for.** "Selec
1c9c0 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56  t Flag"..**.** V
1c9d0 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1c9e0 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69   (all checked vi
1c9f0 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20  a assert()).**  
1ca00 20 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20     SF_HasAgg    
1ca10 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a   == NC_HasAgg.**
1ca20 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67       SF_MinMaxAg
1ca30 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41  g  == NC_MinMaxA
1ca40 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  gg     == SQLITE
1ca50 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20  _FUNC_MINMAX.** 
1ca60 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69      SF_FixedLimi
1ca70 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c  t == WHERE_USE_L
1ca80 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT.*/.#define 
1ca90 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20  SF_Distinct     
1caa0 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75    0x00001  /* Ou
1cab0 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44  tput should be D
1cac0 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69  ISTINCT */.#defi
1cad0 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20  ne SF_All       
1cae0 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a       0x00002  /*
1caf0 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c   Includes the AL
1cb00 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  L keyword */.#de
1cb10 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64  fine SF_Resolved
1cb20 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20         0x00004  
1cb30 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68  /* Identifiers h
1cb40 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
1cb50 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
1cb60 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30  Aggregate      0
1cb70 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61  x00008  /* Conta
1cb80 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e  ins agg function
1cb90 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20  s or a GROUP BY 
1cba0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
1cbb0 73 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30  sAgg         0x0
1cbc0 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0010  /* Contain
1cbd0 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
1cbe0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
1cbf0 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61   SF_UsesEphemera
1cc00 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55  l  0x00020  /* U
1cc10 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65  ses the OpenEphe
1cc20 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a  meral opcode */.
1cc30 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e  #define SF_Expan
1cc40 64 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34  ded       0x0004
1cc50 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c  0  /* sqlite3Sel
1cc60 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c  ectExpand() call
1cc70 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64  ed on this */.#d
1cc80 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65  efine SF_HasType
1cc90 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20  Info    0x00080 
1cca0 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72   /* FROM subquer
1ccb0 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d  ies have Table m
1ccc0 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  etadata */.#defi
1ccd0 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20  ne SF_Compound  
1cce0 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a       0x00100  /*
1ccf0 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f   Part of a compo
1cd00 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65  und query */.#de
1cd10 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20  fine SF_Values  
1cd20 20 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20         0x00200  
1cd30 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66  /* Synthesized f
1cd40 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73  rom VALUES claus
1cd50 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1cd60 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30  MultiValue     0
1cd70 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c  x00400  /* Singl
1cd80 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69  e VALUES term wi
1cd90 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  th multiple rows
1cda0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
1cdb0 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78  estedFrom     0x
1cdc0 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00800  /* Part o
1cdd0 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
1cde0 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
1cdf0 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d  .#define SF_MinM
1ce00 61 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30  axAgg      0x010
1ce10 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  00  /* Aggregate
1ce20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28   containing min(
1ce30 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64  ) or max() */.#d
1ce40 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69  efine SF_Recursi
1ce50 76 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20  ve      0x02000 
1ce60 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76   /* The recursiv
1ce70 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75  e part of a recu
1ce80 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65  rsive CTE */.#de
1ce90 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d  fine SF_FixedLim
1cea0 69 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20  it     0x04000  
1ceb0 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65  /* nSelectRow se
1cec0 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20  t by a constant 
1ced0 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65  LIMIT */.#define
1cee0 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
1cef0 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e     0x08000  /* N
1cf00 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
1cf10 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1cf20 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
1cf30 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20   SF_Converted   
1cf40 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42     0x10000  /* B
1cf50 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  y convertCompoun
1cf60 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1cf70 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1cf80 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20  F_IncludeHidden 
1cf90 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63   0x20000  /* Inc
1cfa0 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75  lude hidden colu
1cfb0 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f  mns in output */
1cfc0 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70  .#define SF_Comp
1cfd0 6c 65 78 52 65 73 75 6c 74 20 20 30 78 34 30 30  lexResult  0x400
1cfe0 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 73 65  00  /* Result se
1cff0 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71 75  t contains subqu
1d000 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ery or function 
1d010 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72  */.../*.** The r
1d020 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45  esults of a SELE
1d030 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69  CT can be distri
1d040 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c  buted in several
1d050 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65   ways, as define
1d060 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74  d.** by one of t
1d070 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1d080 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20  ros.  The "SRT" 
1d090 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45  prefix means "SE
1d0a0 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54  LECT Result.** T
1d0b0 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ype"..**.**     
1d0c0 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
1d0d0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1d0e0 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70   a key in a temp
1d0f0 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20  orary index.**  
1d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d110 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79     identified by
1d120 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1d130 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1d140 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76  xcept      Remov
1d150 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  e results from t
1d160 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64  he temporary ind
1d170 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ex pDest->iSDPar
1d180 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1d190 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f  _Exists      Sto
1d1a0 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79  re a 1 in memory
1d1b0 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44   cell pDest->iSD
1d1c0 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75  Parm if the resu
1d1d0 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  lt.**           
1d1e0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73            set is
1d1f0 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a   not empty..**.*
1d200 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72  *     SRT_Discar
1d210 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20  d     Throw the 
1d220 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54  results away.  T
1d230 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53  his is used by S
1d240 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20  ELECT.**        
1d250 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1d260 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
1d270 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e  riggers whose on
1d280 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a  ly purpose is.**
1d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2a0 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66       the side-ef
1d2b0 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f  fects of functio
1d2c0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  ns..**.** All of
1d2d0 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66   the above are f
1d2e0 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68  ree to ignore th
1d2f0 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61  eir ORDER BY cla
1d300 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a  use. Those that.
1d310 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68  ** follow must h
1d320 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42  onor the ORDER B
1d330 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1d340 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20      SRT_Output  
1d350 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72      Generate a r
1d360 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73  ow of output (us
1d370 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c  ing the OP_Resul
1d380 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20  tRow.**         
1d390 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f              opco
1d3a0 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77  de) for each row
1d3b0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
1d3c0 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  et..**.**     SR
1d3d0 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e  T_Mem         On
1d3e0 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20  ly valid if the 
1d3f0 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67  result is a sing
1d400 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20  le column..**   
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d420 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73    Store the firs
1d430 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
1d440 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77  first result row
1d450 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d460 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73          in regis
1d470 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
1d480 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20  rm then abandon 
1d490 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20  the rest.**     
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4b0 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54  of the query.  T
1d4c0 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1d4d0 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31  implies "LIMIT 1
1d4e0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1d4f0 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65  _Set         The
1d500 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20   result must be 
1d510 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1d520 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20    Store each.** 
1d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d540 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c      row of resul
1d550 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20  t as the key in 
1d560 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1d570 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1d580 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70               App
1d590 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ly the affinity 
1d5a0 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62  pDest->affSdst b
1d5b0 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a  efore storing.**
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5d0 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55       results.  U
1d5e0 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
1d5f0 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e   "IN (SELECT ...
1d600 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  )"..**.**     SR
1d610 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72  T_EphemTab    Cr
1d620 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72  eate an temporar
1d630 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1d640 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65  SDParm and store
1d650 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d660 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75          the resu
1d670 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75  lt there. The cu
1d680 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65  rsor is left ope
1d690 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20  n after.**      
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1d6b0 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20  eturning.  This 
1d6c0 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  is like SRT_Tabl
1d6d0 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  e except that.**
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6f0 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e       this destin
1d700 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70  ation uses OP_Op
1d710 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63  enEphemeral to c
1d720 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  reate.**        
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1d740 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a   table first..**
1d750 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f  .**     SRT_Coro
1d760 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65  utine   Generate
1d770 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68   a co-routine th
1d780 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77  at returns a new
1d790 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20   row of.**      
1d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1d7b0 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65  esults each time
1d7c0 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
1d7d0 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   The entry point
1d7e0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d7f0 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
1d800 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f  o-routine is sto
1d810 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1d820 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a  pDest->iSDParm.*
1d830 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d840 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65        and the re
1d850 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72  sult row is stor
1d860 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65  ed in pDest->nDe
1d870 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  st registers.** 
1d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d890 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74      starting wit
1d8a0 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a  h pDest->iSdst..
1d8b0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61  **.**     SRT_Ta
1d8c0 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  ble       Store 
1d8d0 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f  results in tempo
1d8e0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1d8f0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1d900 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20    SRT_Fifo      
1d910 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1d920 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65  RT_EphemTab exce
1d930 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  pt that the tabl
1d940 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1d950 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75           is assu
1d960 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62  med to already b
1d970 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66  e open.  SRT_Fif
1d980 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  o has.**        
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1d9a0 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70   additional prop
1d9b0 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62  erty of being ab
1d9c0 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20  le to ignore.** 
1d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9e0 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59      the ORDER BY
1d9f0 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1da00 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20     SRT_DistFifo 
1da10 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1da20 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1da30 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1da40 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1da50 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74               But
1da60 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72   also use tempor
1da70 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1da80 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a  >iSDParm+1 as.**
1da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daa0 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66       a record of
1dab0 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c   all prior resul
1dac0 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e  ts and ignore an
1dad0 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20  y duplicate.**  
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d     rows.  Name m
1db00 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74  eans:  "Distinct
1db10 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Fifo"..**.**   
1db20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20    SRT_Queue     
1db30 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1db40 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1db50 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1db60 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20   (really.**     
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db80 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65  an index).  Appe
1db90 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75  nd a sequence nu
1dba0 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  mber so that all
1dbb0 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20   entries.**     
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbd0 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a  are distinct..**
1dbe0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1dbf0 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65  Queue   Store re
1dc00 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1dc10 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1dc20 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a  SDParm only if.*
1dc30 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1dc40 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72        the same r
1dc50 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20  ecord has never 
1dc60 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f  been stored befo
1dc70 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20  re.  The.**     
1dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc90 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e  index at pDest->
1dca0 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61  iSDParm+1 hold a
1dcb0 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e  ll prior stores.
1dcc0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  .*/.#define SRT_
1dcd0 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20  Union        1  
1dce0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1dcf0 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1dd00 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1dd10 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20  RT_Except       
1dd20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73  2  /* Remove res
1dd30 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e  ult from a UNION
1dd40 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1dd50 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20  e SRT_Exists    
1dd60 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31     3  /* Store 1
1dd70 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
1dd80 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23  s not empty */.#
1dd90 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61  define SRT_Disca
1dda0 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f  rd      4  /* Do
1ddb0 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65   not save the re
1ddc0 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a  sults anywhere *
1ddd0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69  /.#define SRT_Fi
1dde0 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a  fo         5  /*
1ddf0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1de00 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1de10 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1de20 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1de30 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20  tFifo     6  /* 
1de40 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62  Like SRT_Fifo, b
1de50 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1de60 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
1de70 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20  e SRT_Queue     
1de80 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72     7  /* Store r
1de90 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75  esult in an queu
1dea0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1deb0 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20  _DistQueue    8 
1dec0 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65   /* Like SRT_Que
1ded0 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  ue, but unique r
1dee0 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a  esults only */..
1def0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1df00 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
1df10 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
1df20 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
1df30 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
1df40 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
1df50 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65  )<=SRT_DistQueue
1df60 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f  )..#define SRT_O
1df70 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f  utput       9  /
1df80 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f  * Output each ro
1df90 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
1dfa0 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20  define SRT_Mem  
1dfb0 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74         10  /* St
1dfc0 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ore result in a 
1dfd0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23  memory cell */.#
1dfe0 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20  define SRT_Set  
1dff0 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74         11  /* St
1e000 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b  ore results as k
1e010 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1e020 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1e030 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f  phemTab    12  /
1e040 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65  * Create transie
1e050 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65  nt tab and store
1e060 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
1e070 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43  */.#define SRT_C
1e080 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f  oroutine   13  /
1e090 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e  * Generate a sin
1e0a0 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
1e0b0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1e0c0 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20  _Table       14 
1e0d0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1e0e0 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
1e0f0 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
1e100 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1e110 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
1e120 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
1e130 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20  where to put of 
1e140 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a  the results of.*
1e150 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  * a SELECT state
1e160 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
1e170 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75  SelectDest {.  u
1e180 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20  8 eDest;        
1e190 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
1e1a0 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
1e1b0 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
1e1c0 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69  _* above. */.  i
1e1d0 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
1e1e0 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
1e1f0 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
1e200 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
1e210 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
1e220 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1e230 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
1e240 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
1e250 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
1e260 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20  nt nSdst;       
1e270 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1e280 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
1e290 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ated */.  char *
1e2a0 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f  zAffSdst;      /
1e2b0 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
1e2c0 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
1e2d0 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  Set */.  ExprLis
1e2e0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a  t *pOrderBy;  /*
1e2f0 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72   Key columns for
1e300 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53   SRT_Queue and S
1e310 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a  RT_DistQueue */.
1e320 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
1e330 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
1e340 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
1e350 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
1e360 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
1e370 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65  T.** tables, the
1e380 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
1e390 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
1e3a0 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
1e3b0 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
1e3c0 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
1e3d0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
1e3e0 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
1e3f0 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
1e400 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
1e410 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
1e420 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
1e430 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
1e440 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
1e450 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
1e460 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
1e470 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69   done within tri
1e480 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
1e490 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
1e4a0 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
1e4b0 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
1e4c0 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
1e4d0 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
1e4e0 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
1e4f0 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
1e500 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
1e510 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
1e520 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
1e530 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
1e540 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
1e550 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
1e560 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
1e570 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
1e580 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1e590 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
1e5a0 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
1e5b0 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1e5c0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1e5d0 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
1e5e0 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
1e5f0 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
1e600 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
1e610 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
1e620 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
1e630 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
1e640 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
1e650 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  Size of the colu
1e660 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e  mn cache.*/.#ifn
1e670 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  def SQLITE_N_COL
1e680 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53  CACHE.# define S
1e690 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1e6a0 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   10.#endif../*.*
1e6b0 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69  * At least one i
1e6c0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1e6d0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1e6e0 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  re is created fo
1e6f0 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65  r each.** trigge
1e700 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69  r that may be fi
1e710 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e  red while parsin
1e720 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44  g an INSERT, UPD
1e730 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a  ATE or DELETE.**
1e740 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20   statement. All 
1e750 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65  such objects are
1e760 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c   stored in the l
1e770 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
1e780 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54  d at.** Parse.pT
1e790 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65  riggerPrg and de
1e7a0 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65  leted once state
1e7b0 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  ment compilation
1e7c0 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d   has been.** com
1e7d0 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  pleted..**.** A 
1e7e0 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d  Vdbe sub-program
1e7f0 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
1e800 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48   the body and WH
1e810 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69  EN clause of tri
1e820 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50  gger.** TriggerP
1e830 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73  rg.pTrigger, ass
1e840 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20  uming a default 
1e850 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1e860 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72  se of.** Trigger
1e870 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73  Prg.orconf, is s
1e880 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69  tored in the Tri
1e890 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d  ggerPrg.pProgram
1e8a0 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68   variable..** Th
1e8b0 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  e Parse.pTrigger
1e8c0 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63  Prg list never c
1e8d0 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72  ontains two entr
1e8e0 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ies with the sam
1e8f0 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20  e.** values for 
1e900 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e  both pTrigger an
1e910 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20  d orconf..**.** 
1e920 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  The TriggerPrg.a
1e930 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61  Colmask[0] varia
1e940 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20  ble is set to a 
1e950 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  mask of old.* co
1e960 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65  lumns.** accesse
1e970 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66  d (or set to 0 f
1e980 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65  or triggers fire
1e990 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
1e9a0 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65   INSERT.** state
1e9b0 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c  ments). Similarl
1e9c0 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72  y, the TriggerPr
1e9d0 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61  g.aColmask[1] va
1e9e0 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
1e9f0 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65  .** a mask of ne
1ea00 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64  w.* columns used
1ea10 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
1ea20 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67  .*/.struct Trigg
1ea30 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65  erPrg {.  Trigge
1ea40 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20  r *pTrigger;    
1ea50 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69    /* Trigger thi
1ea60 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f  s program was co
1ea70 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72  ded from */.  Tr
1ea80 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b  iggerPrg *pNext;
1ea90 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
1eaa0 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72  try in Parse.pTr
1eab0 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f  iggerPrg list */
1eac0 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
1ead0 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72  Program;   /* Pr
1eae0 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69  ogram implementi
1eaf0 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f  ng pTrigger/orco
1eb00 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f  nf */.  int orco
1eb10 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nf;             
1eb20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1eb30 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f  NFLICT policy */
1eb40 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
1eb50 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
1eb60 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
1eb70 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
1eb80 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ssed */.};../*.*
1eb90 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61  * The yDbMask da
1eba0 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62  tatype for the b
1ebb0 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74  itmask of all at
1ebc0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1ebd0 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
1ebe0 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
1ebf0 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1ec00 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b  ed char yDbMask[
1ec10 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  (SQLITE_MAX_ATTA
1ec20 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65  CHED+9)/8];.# de
1ec30 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
1ec40 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49  M,I)    (((M)[(I
1ec50 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29  )/8]&(1<<((I)&7)
1ec60 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
1ec70 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
1ec80 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c     memset((M),0,
1ec90 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66  sizeof(M)).# def
1eca0 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
1ecb0 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38  I)     (M)[(I)/8
1ecc0 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a  ]|=(1<<((I)&7)).
1ecd0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
1ece0 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69  llZero(M)   sqli
1ecf0 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
1ed00 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  (M).# define DbM
1ed10 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1ed20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c  (sqlite3DbMaskAl
1ed30 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c  lZero(M)==0).#el
1ed40 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  se.  typedef uns
1ed50 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73  igned int yDbMas
1ed60 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  k;.# define DbMa
1ed70 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1ed80 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29  ((M)&(((yDbMask)
1ed90 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20  1)<<(I)))!=0).# 
1eda0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1edb0 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a  o(M)      (M)=0.
1edc0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
1edd0 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c  et(M,I)     (M)|
1ede0 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  =(((yDbMask)1)<<
1edf0 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (I)).# define Db
1ee00 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
1ee10 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65   (M)==0.# define
1ee20 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
1ee30 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69  )   (M)!=0.#endi
1ee40 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
1ee50 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
1ee60 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
1ee70 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
1ee80 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
1ee90 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
1eea0 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
1eeb0 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
1eec0 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
1eed0 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
1eee0 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
1eef0 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
1ef00 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
1ef10 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
1ef20 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
1ef30 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
1ef40 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
1ef50 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
1ef60 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
1ef70 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
1ef80 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
1ef90 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
1efa0 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
1efb0 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
1efc0 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
1efd0 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
1efe0 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
1eff0 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
1f000 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
1f010 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
1f020 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
1f030 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
1f040 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a  e shared-cache.*
1f050 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  * feature is ena
1f060 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33  bled (if sqlite3
1f070 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64  Tsd()->useShared
1f080 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54  Data is true). T
1f090 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  hey are.** used 
1f0a0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74  to store the set
1f0b0 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20   of table-locks 
1f0c0 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
1f0d0 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a  statement being.
1f0e0 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e  ** compiled. Fun
1f0f0 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62  ction sqlite3Tab
1f100 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64  leLock() is used
1f110 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20   to add entries 
1f120 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a  to the.** list..
1f130 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20  */.struct Parse 
1f140 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
1f150 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1f160 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74  main database st
1f170 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61  ructure */.  cha
1f180 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20  r *zErrMsg;     
1f190 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65    /* An error me
1f1a0 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20  ssage */.  Vdbe 
1f1b0 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
1f1c0 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72  /* An engine for
1f1d0 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62   executing datab
1f1e0 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a  ase bytecode */.
1f1f0 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
1f200 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e         /* Return
1f210 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75   code from execu
1f220 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  tion */.  u8 col
1f230 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f  NamesSet;      /
1f240 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f  * TRUE after OP_
1f250 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62  ColumnName has b
1f260 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56  een issued to pV
1f270 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63  dbe */.  u8 chec
1f280 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a  kSchema;      /*
1f290 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63   Causes schema c
1f2a0 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65  ookie check afte
1f2b0 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20  r an error */.  
1f2c0 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20  u8 nested;      
1f2d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f2e0 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
1f2f0 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64  o the parser/cod
1f300 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
1f310 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20   u8 nTempReg;   
1f320 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f330 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  of temporary reg
1f340 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52  isters in aTempR
1f350 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d  eg[] */.  u8 isM
1f360 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f  ultiWrite;     /
1f370 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
1f380 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69  ent may modify/i
1f390 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72  nsert multiple r
1f3a0 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41  ows */.  u8 mayA
1f3b0 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  bort;         /*
1f3c0 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
1f3d0 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20  nt may throw an 
1f3e0 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20  ABORT exception 
1f3f0 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f  */.  u8 hasCompo
1f400 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65  und;      /* Nee
1f410 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76  d to invoke conv
1f420 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
1f430 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
1f440 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63  .  u8 okConstFac
1f450 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f  tor;    /* OK to
1f460 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   factor out cons
1f470 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69  tants */.  u8 di
1f480 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20  sableLookaside; 
1f490 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d  /* Number of tim
1f4a0 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73  es lookaside has
1f4b0 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a   been disabled *
1f4c0 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65  /.  u8 nColCache
1f4d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1f4e0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
1f4f0 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a   aColCache[] */.
1f500 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b    int nRangeReg;
1f510 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1f520 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  f the temporary 
1f530 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
1f540 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65  /.  int iRangeRe
1f550 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73  g;       /* Firs
1f560 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65  t register in te
1f570 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1f580 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
1f590 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
1f5a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
1f5b0 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  rors seen */.  i
1f5c0 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20  nt nTab;        
1f5d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f5e0 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f   previously allo
1f5f0 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f  cated VDBE curso
1f600 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  rs */.  int nMem
1f610 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1f620 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
1f630 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66   cells used so f
1f640 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41  ar */.  int nOpA
1f650 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
1f660 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20  Number of slots 
1f670 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64  allocated for Vd
1f680 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e  be.aOp[] */.  in
1f690 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  t szOpAlloc;    
1f6a0 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d     /* Bytes of m
1f6b0 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f  emory space allo
1f6c0 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61  cated for Vdbe.a
1f6d0 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53  Op[] */.  int iS
1f6e0 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f  elfTab;        /
1f6f0 2a 20 54 61 62 6c 65 20 66 6f 72 20 61 73 73 6f  * Table for asso
1f700 63 69 61 74 65 64 20 77 69 74 68 20 61 6e 20 69  ciated with an i
1f710 6e 64 65 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72  ndex on expr, or
1f720 20 6e 65 67 61 74 69 76 65 0a 20 20 20 20 20 20   negative.      
1f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f740 20 2a 2a 20 6f 66 20 74 68 65 20 62 61 73 65 20   ** of the base 
1f750 72 65 67 69 73 74 65 72 20 64 75 72 69 6e 67 20  register during 
1f760 63 68 65 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74  check-constraint
1f770 20 65 76 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 69   eval */.  int i
1f780 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20  CacheLevel;     
1f790 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69  /* ColCache vali
1f7a0 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65  d when aColCache
1f7b0 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68  [].iLevel<=iCach
1f7c0 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20  eLevel */.  int 
1f7d0 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20  iCacheCnt;      
1f7e0 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64   /* Counter used
1f7f0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f   to generate aCo
1f800 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c  lCache[].lru val
1f810 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61  ues */.  int nLa
1f820 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  bel;          /*
1f830 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c   Number of label
1f840 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20  s used */.  int 
1f850 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20  *aLabel;        
1f860 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c   /* Space to hol
1f870 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a  d the labels */.
1f880 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e    ExprList *pCon
1f890 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61  stExpr;/* Consta
1f8a0 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  nt expressions *
1f8b0 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72  /.  Token constr
1f8c0 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65  aintName;/* Name
1f8d0 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69   of the constrai
1f8e0 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  nt currently bei
1f8f0 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79  ng parsed */.  y
1f900 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b  DbMask writeMask
1f910 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77  ;   /* Start a w
1f920 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
1f930 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61   on these databa
1f940 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  ses */.  yDbMask
1f950 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a   cookieMask;  /*
1f960 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65   Bitmask of sche
1f970 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61  ma verified data
1f980 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72  bases */.  int r
1f990 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20  egRowid;        
1f9a0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
1f9b0 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45  ing rowid of CRE
1f9c0 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20  ATE TABLE entry 
1f9d0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74  */.  int regRoot
1f9e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  ;         /* Reg
1f9f0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1fa00 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  ot page number f
1fa10 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a  or new objects *
1fa20 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b  /.  int nMaxArg;
1fa30 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20           /* Max 
1fa40 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75  args passed to u
1fa50 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20  ser function by 
1fa60 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23  sub-program */.#
1fa70 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  if SELECTTRACE_E
1fa80 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65  NABLED.  int nSe
1fa90 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  lect;         /*
1faa0 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43   Number of SELEC
1fab0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65  T statements see
1fac0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65  n */.  int nSele
1fad0 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48  ctIndent;   /* H
1fae0 6f 77 20 66 61 72 20 74 6f 20 69 6e 64 65 6e 74  ow far to indent
1faf0 20 53 45 4c 45 43 54 54 52 41 43 45 28 29 20 6f   SELECTTRACE() o
1fb00 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
1fb10 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1fb20 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
1fb30 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
1fb40 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
1fb50 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
1fb60 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
1fb70 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
1fb80 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
1fb90 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
1fba0 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
1fbb0 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
1fbc0 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41   AutoincInfo *pA
1fbd0 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  inc;  /* Informa
1fbe0 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49  tion about AUTOI
1fbf0 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72  NCREMENT counter
1fc00 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54  s */.  Parse *pT
1fc10 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50  oplevel;    /* P
1fc20 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66  arse structure f
1fc30 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20  or main program 
1fc40 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54  (or NULL) */.  T
1fc50 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61  able *pTriggerTa
1fc60 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69  b;  /* Table tri
1fc70 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20  ggers are being 
1fc80 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69  coded for */.  i
1fc90 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20  nt addrCrTab;   
1fca0 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
1fcb0 66 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65  f OP_CreateBtree
1fcc0 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54   opcode on CREAT
1fcd0 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32  E TABLE */.  u32
1fce0 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20   nQueryLoop;    
1fcf0 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20    /* Est number 
1fd00 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
1fd10 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67   a query (10*log
1fd20 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f  2(N)) */.  u32 o
1fd30 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ldmask;         
1fd40 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a  /* Mask of old.*
1fd50 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1fd60 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77  ced */.  u32 new
1fd70 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
1fd80 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   Mask of new.* c
1fd90 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
1fda0 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67  d */.  u8 eTrigg
1fdb0 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54  erOp;       /* T
1fdc0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1fdd0 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45  ERT or TK_DELETE
1fde0 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66   */.  u8 eOrconf
1fdf0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65  ;          /* De
1fe00 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1fe10 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69  T policy for tri
1fe20 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20  gger steps */.  
1fe30 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65  u8 disableTrigge
1fe40 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  rs;  /* True to 
1fe50 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73  disable triggers
1fe60 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a   */..  /********
1fe70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1feb0 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73 20 61  **.  ** Fields a
1fec0 62 6f 76 65 20 6d 75 73 74 20 62 65 20 69 6e 69  bove must be ini
1fed0 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f  tialized to zero
1fee0 2e 20 20 54 68 65 20 66 69 65 6c 64 73 20 74 68  .  The fields th
1fef0 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20  at follow,.  ** 
1ff00 64 6f 77 6e 20 74 6f 20 74 68 65 20 62 65 67 69  down to the begi
1ff10 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65 63  nning of the rec
1ff20 75 72 73 69 76 65 20 73 65 63 74 69 6f 6e 2c 20  ursive section, 
1ff30 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
1ff40 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a  e.  ** initializ
1ff50 65 64 20 61 73 20 74 68 65 79 20 77 69 6c 6c 20  ed as they will 
1ff60 62 65 20 73 65 74 20 62 65 66 6f 72 65 20 62 65  be set before be
1ff70 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 20 62  ing used.  The b
1ff80 6f 75 6e 64 61 72 79 20 69 73 0a 20 20 2a 2a 20  oundary is.  ** 
1ff90 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6f 66  determined by of
1ffa0 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43 6f  fsetof(Parse,aCo
1ffb0 6c 43 61 63 68 65 29 2e 0a 20 20 2a 2a 2a 2a 2a  lCache)..  *****
1ffc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ffd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ffe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20000 2a 2a 2a 2a 2a 2f 0a 0a 20 20 73 74 72 75 63 74  *****/..  struct
20010 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20   yColCache {.   
20020 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
20030 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
20040 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
20050 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e  .    i16 iColumn
20060 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
20070 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  ble column numbe
20080 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70  r */.    u8 temp
20090 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Reg;           /
200a0 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70  * iReg is a temp
200b0 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e   register that n
200c0 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64  eeds to be freed
200d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76   */.    int iLev
200e0 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  el;           /*
200f0 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a   Nesting level *
20100 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20  /.    int iReg; 
20110 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
20120 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66  eg with value of
20130 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20   this column. 0 
20140 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20  means none. */. 
20150 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20     int lru;     
20160 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73           /* Leas
20170 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20  t recently used 
20180 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d  entry has the sm
20190 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a  allest value */.
201a0 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51    } aColCache[SQ
201b0 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d  LITE_N_COLCACHE]
201c0 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61  ;  /* One for ea
201d0 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20  ch column cache 
201e0 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 61  entry */.  int a
201f0 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20  TempReg[8];     
20200 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
20210 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
20220 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
20230 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e  Token sNameToken
20240 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e  ;       /* Token
20250 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
20260 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
20270 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  name */..  /****
20280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
202a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
202b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
202c0 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20  ****.  ** Above 
202d0 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77  is constant betw
202e0 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20  een recursions. 
202f0 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20   Below is reset 
20300 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
20310 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72  .  ** each recur
20320 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64  sion.  The bound
20330 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73  ary between thes
20340 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73  e two regions is
20350 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a   determined.  **
20360 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28   using offsetof(
20370 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e  Parse,sLastToken
20380 29 20 73 6f 20 74 68 65 20 73 4c 61 73 74 54 6f  ) so the sLastTo
20390 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73 74 20 62  ken field must b
203a0 65 20 74 68 65 0a 20 20 2a 2a 20 66 69 72 73 74  e the.  ** first
203b0 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20 72 65   field in the re
203c0 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a  cursive region..
203d0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
203e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
203f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20410 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54  **********/..  T
20420 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
20430 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
20440 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
20450 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b  */.  ynVar nVar;
20460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20470 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
20480 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
20490 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
204a0 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
204b0 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
204c0 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
204d0 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
204e0 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65  RY KEY */.  u8 e
204f0 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
20500 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
20510 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61   the EXPLAIN fla
20520 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  g is found on th
20530 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64  e query */.#ifnd
20540 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
20550 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38  IRTUALTABLE.  u8
20560 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20   declareVtab;   
20570 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
20580 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65  if inside sqlite
20590 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
205a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c   */.  int nVtabL
205b0 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
205c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
205d0 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c  tual tables to l
205e0 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ock */.#endif.  
205f0 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
20600 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
20610 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69  ression tree hei
20620 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73  ght of current s
20630 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66  ub-select */.#if
20640 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
20650 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69  _EXPLAIN.  int i
20660 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20  SelectId;       
20670 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75       /* ID of cu
20680 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72  rrent select for
20690 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20   EXPLAIN output 
206a0 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65  */.  int iNextSe
206b0 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f  lectId;        /
206c0 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65  * Next available
206d0 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45   select ID for E
206e0 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f  XPLAIN output */
206f0 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74 20  .#endif.  VList 
20700 2a 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20 20  *pVList;        
20710 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62      /* Mapping b
20720 65 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65 20  etween variable 
20730 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65 72  names and number
20740 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65  s */.  Vdbe *pRe
20750 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20  prepare;        
20760 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70   /* VM being rep
20770 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33  repared (sqlite3
20780 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a  Reprepare()) */.
20790 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
207a0 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ail;        /* A
207b0 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74  ll SQL text past
207c0 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f   the last semico
207d0 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  lon parsed */.  
207e0 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65  Table *pNewTable
207f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74  ;         /* A t
20800 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74  able being const
20810 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45  ructed by CREATE
20820 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67   TABLE */.  Trig
20830 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72  ger *pNewTrigger
20840 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72  ;     /* Trigger
20850 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
20860 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49   by a CREATE TRI
20870 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  GGER */.  const 
20880 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
20890 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70  xt; /* The 6th p
208a0 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e  arameter to db->
208b0 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20  xAuth callbacks 
208c0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
208d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
208e0 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67  BLE.  Token sArg
208f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20900 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74  /* Complete text
20910 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67   of a module arg
20920 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65  ument */.  Table
20930 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20   **apVtabLock;  
20940 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
20950 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  to virtual table
20960 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e  s needing lockin
20970 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61  g */.#endif.  Ta
20980 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b  ble *pZombieTab;
20990 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
209a0 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  of Table objects
209b0 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72   to delete after
209c0 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54   code gen */.  T
209d0 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67  riggerPrg *pTrig
209e0 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b  gerPrg;  /* Link
209f0 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64  ed list of coded
20a00 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57   triggers */.  W
20a10 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
20a20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
20a30 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ent WITH clause,
20a40 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69   or NULL */.  Wi
20a50 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65 3b  th *pWithToFree;
20a60 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20          /* Free 
20a70 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63 74  this WITH object
20a80 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
20a90 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a  he parse */.};..
20aa0 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20  /*.** Sizes and 
20ab0 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61 72 69  pointers of vari
20ac0 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74 68 65  ous parts of the
20ad0 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a   Parse object..*
20ae0 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
20af0 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28  HDR_SZ offsetof(
20b00 50 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29  Parse,aColCache)
20b10 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61   /* Recursive pa
20b20 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65  rt w/o aColCache
20b30 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  */.#define PARSE
20b40 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66 73  _RECURSE_SZ offs
20b50 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74  etof(Parse,sLast
20b60 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65 63  Token)    /* Rec
20b70 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23  ursive part */.#
20b80 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49  define PARSE_TAI
20b90 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61 72  L_SZ (sizeof(Par
20ba0 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52 53  se)-PARSE_RECURS
20bb0 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63  E_SZ) /* Non-rec
20bc0 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23  ursive part */.#
20bd0 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49  define PARSE_TAI
20be0 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29 28 58  L(X) (((char*)(X
20bf0 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53 45  ))+PARSE_RECURSE
20c00 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72  _SZ)  /* Pointer
20c10 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a   to tail */../*.
20c20 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
20c30 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69  f currently insi
20c40 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65  de an sqlite3_de
20c50 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c  clare_vtab() cal
20c60 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  l..*/.#ifdef SQL
20c70 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
20c80 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20  TABLE.  #define 
20c90 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
20ca0 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
20cb0 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
20cc0 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61  B (pParse->decla
20cd0 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a  reVtab).#endif..
20ce0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
20cf0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
20d00 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
20d10 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
20d20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
20d30 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
20d40 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
20d50 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
20d60 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
20d70 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
20d80 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
20d90 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
20da0 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
20db0 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
20dc0 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
20dd0 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
20de0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
20df0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
20e00 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
20e10 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
20e20 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
20e30 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
20e40 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a  s opcodes..**.**
20e50 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
20e60 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
20e70 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
20e80 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41    OPFLAG_LENGTHA
20e90 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  RG    == SQLITE_
20ea0 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20  FUNC_LENGTH.**  
20eb0 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41    OPFLAG_TYPEOFA
20ec0 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  RG    == SQLITE_
20ed0 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20  FUNC_TYPEOF.**  
20ee0 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52    OPFLAG_BULKCSR
20ef0 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 42        == BTREE_B
20f00 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50  ULKLOAD.**    OP
20f10 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20  FLAG_SEEKEQ     
20f20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f    == BTREE_SEEK_
20f30 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  EQ.**    OPFLAG_
20f40 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d 20  FORDELETE    == 
20f50 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a  BTREE_FORDELETE.
20f60 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41 56  **    OPFLAG_SAV
20f70 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52  EPOSITION == BTR
20f80 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a  EE_SAVEPOSITION.
20f90 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55 58  **    OPFLAG_AUX
20fa0 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52  DELETE    == BTR
20fb0 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a  EE_AUXDELETE.*/.
20fc0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
20fd0 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30  CHANGE       0x0
20fe0 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72  1    /* OP_Inser
20ff0 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  t: Set to update
21000 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a   db->nChange */.
21010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21030 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65       /* Also use
21040 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29  d in P2 (not P5)
21050 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f   of OP_Delete */
21060 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21070 45 50 48 45 4d 20 20 20 20 20 20 20 20 20 30 78  EPHEM         0x
21080 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  01    /* OP_Colu
21090 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f 75  mn: Ephemeral ou
210a0 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64  tput is ok */.#d
210b0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53  efine OPFLAG_LAS
210c0 54 52 4f 57 49 44 20 20 20 20 20 30 78 32 30 20  TROWID     0x20 
210d0 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64     /* Set to upd
210e0 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  ate db->lastRowi
210f0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
21100 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20 20  LAG_ISUPDATE    
21110 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69    0x04    /* Thi
21120 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61  s OP_Insert is a
21130 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a  n sql UPDATE */.
21140 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41  #define OPFLAG_A
21150 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78 30  PPEND        0x0
21160 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  8    /* This is 
21170 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20  likely to be an 
21180 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  append */.#defin
21190 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
211a0 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f  RESULT 0x10    /
211b0 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61  * Try to avoid a
211c0 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e   seek in BtreeIn
211d0 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e  sert() */.#defin
211e0 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20  e OPFLAG_ISNOOP 
211f0 20 20 20 20 20 20 20 30 78 34 30 20 20 20 20 2f         0x40    /
21200 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65 73  * OP_Delete does
21210 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b   pre-update-hook
21220 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
21230 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
21240 47 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a  G     0x40    /*
21250 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
21260 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  used for length(
21270 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
21280 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20  LAG_TYPEOFARG   
21290 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f    0x80    /* OP_
212a0 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
212b0 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f   for typeof() */
212c0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
212d0 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78  BULKCSR       0x
212e0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  01    /* OP_Open
212f0 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20  ** used to open 
21300 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23  bulk cursor */.#
21310 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45  define OPFLAG_SE
21320 45 4b 45 51 20 20 20 20 20 20 20 20 30 78 30 32  EKEQ        0x02
21330 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a      /* OP_Open**
21340 20 63 75 72 73 6f 72 20 75 73 65 73 20 45 51 20   cursor uses EQ 
21350 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  seek only */.#de
21360 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44  fine OPFLAG_FORD
21370 45 4c 45 54 45 20 20 20 20 20 30 78 30 38 20 20  ELETE     0x08  
21380 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f    /* OP_Open sho
21390 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46 4f  uld use BTREE_FO
213a0 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  RDELETE */.#defi
213b0 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  ne OPFLAG_P2ISRE
213c0 47 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20  G       0x10    
213d0 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e  /* P2 to OP_Open
213e0 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72  ** is a register
213f0 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69   number */.#defi
21400 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  ne OPFLAG_PERMUT
21410 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  E       0x01    
21420 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75  /* OP_Compare: u
21430 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  se the permutati
21440 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  on */.#define OP
21450 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
21460 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50  N  0x02    /* OP
21470 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20  _Delete/Insert: 
21480 73 61 76 65 20 63 75 72 73 6f 72 20 70 6f 73 20  save cursor pos 
21490 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
214a0 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 20  G_AUXDELETE     
214b0 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x04    /* OP_De
214c0 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20 61  lete: index in a
214d0 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f   DELETE op */../
214e0 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
214f0 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
21500 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
21510 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
21520 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
21530 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a  struct Trigger..
21540 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
21550 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
21560 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
21570 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
21580 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
21590 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
215a0 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
215b0 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
215c0 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
215d0 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  he. *    databas
215e0 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
215f0 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
21600 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
21610 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
21620 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
21630 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
21640 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
21650 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
21660 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
21670 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
21680 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
21690 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
216a0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
216b0 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
216c0 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
216d0 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
216e0 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
216f0 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
21700 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
21710 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
21720 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
21730 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
21740 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
21750 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
21760 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
21770 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
21780 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
21790 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
217a0 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
217b0 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
217c0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
217d0 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
217e0 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21800 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
21810 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
21820 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
21830 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
21840 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
21850 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
21860 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21870 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
21880 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
21890 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
218a0 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
218b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
218c0 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
218d0 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
218e0 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
218f0 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
21900 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
21910 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
21920 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
21930 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
21940 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
21950 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
21960 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
21970 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
21980 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
21990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219a0 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
219b0 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
219c0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
219d0 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
219e0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
219f0 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
21a00 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
21a10 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
21a20 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
21a30 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
21a40 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
21a50 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
21a60 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
21a70 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
21a80 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
21a90 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
21aa0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
21ab0 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
21ac0 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
21ad0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
21ae0 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
21af0 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
21b00 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
21b10 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
21b20 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
21b30 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a  rmine which..**.
21b40 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  ** If there are 
21b50 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72  multiple trigger
21b60 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20  s, you might of 
21b70 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20  some BEFORE and 
21b80 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49  some AFTER..** I
21b90 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68  n that cases, th
21ba0 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  e constants belo
21bb0 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f  w can be ORed to
21bc0 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  gether..*/.#defi
21bd0 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  ne TRIGGER_BEFOR
21be0 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49  E  1.#define TRI
21bf0 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a  GGER_AFTER   2..
21c00 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*. * An instanc
21c10 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  e of struct Trig
21c20 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20  gerStep is used 
21c30 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c  to store a singl
21c40 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  e SQL statement.
21c50 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72   * that is a par
21c60 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70  t of a trigger-p
21c70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e  rogram.. *. * In
21c80 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
21c90 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72  t TriggerStep ar
21ca0 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
21cb0 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ngly linked list
21cc0 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e   (linked. * usin
21cd0 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65  g the "pNext" me
21ce0 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64  mber) referenced
21cf0 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69   by the "step_li
21d00 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  st" member of th
21d10 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20  e. * associated 
21d20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69  struct Trigger i
21d30 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72  nstance. The fir
21d40 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
21d50 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73  e linked list is
21d60 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74  . * the first st
21d70 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  ep of the trigge
21d80 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a  r-program.. *. *
21d90 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
21da0 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
21db0 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
21dc0 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
21dd0 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
21de0 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
21df0 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
21e00 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
21e10 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
21e20 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61  ned by the. * va
21e30 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
21e40 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
21e50 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
21e60 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
21e70 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
21e80 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
21e90 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
21ea0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
21eb0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
21ec0 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
21ed0 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
21ee0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
21ef0 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
21f00 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
21f10 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
21f20 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72  se NULL.. * zTar
21f30 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
21f40 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
21f50 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
21f60 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
21f70 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
21f80 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
21f90 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
21fa0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
21fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
21fc0 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
21fd0 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
21fe0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
21ff0 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
22000 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
22010 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
22020 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
22030 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20  ALUES .... *    
22040 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
22050 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
22060 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
22070 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
22080 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
22090 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
220a0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
220b0 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
220c0 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
220d0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
220e0 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20  o delete from.. 
220f0 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
22100 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
22110 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
22120 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
22130 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
22140 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
22150 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a  erwise NULL.. *.
22160 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
22170 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ATE). * zTarget 
22180 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
22190 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
221a0 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57  to update.. * pW
221b0 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
221c0 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
221d0 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
221e0 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
221f0 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
22200 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
22210 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
22220 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
22230 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
22240 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
22250 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
22260 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
22270 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
22280 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
22290 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
222a0 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
222b0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
222c0 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f  argument.. *. */
222d0 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
222e0 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
222f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22300 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
22310 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
22320 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
22330 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
22340 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
22350 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
22360 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
22370 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
22380 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
22390 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
223a0 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
223b0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
223c0 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  * SELECT stateme
223d0 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
223e0 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20  ERT INTO SELECT 
223f0 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ... */.  char *z
22400 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a  Target;       /*
22410 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
22420 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
22430 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
22440 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
22450 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
22460 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
22470 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
22480 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
22490 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
224a0 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
224b0 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73  DATE. */.  IdLis
224c0 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
224d0 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
224e0 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
224f0 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
22500 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
22510 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
22520 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
22530 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
22540 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
22550 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
22560 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
22570 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
22580 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
22590 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
225a0 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
225b0 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
225c0 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
225d0 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
225e0 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
225f0 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
22600 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
22610 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
22620 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
22630 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
22640 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
22650 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
22660 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
22670 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
22680 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
22690 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
226a0 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78  chema;    /* Fix
226b0 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73   items to this s
226c0 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62  chema */.  int b
226d0 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f  VarOnly;       /
226e0 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69  * Check for vari
226f0 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references 
22700 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  only */.  const 
22710 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
22720 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
22730 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
22740 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
22750 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
22760 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
22770 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
22780 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
22790 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
227a0 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
227b0 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
227c0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
227d0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
227e0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
227f0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
22800 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
22810 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
22820 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
22830 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
22840 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
22850 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
22860 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
22870 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
22880 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20  uct StrAccum {. 
22890 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
228a0 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
228b0 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
228c0 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
228d0 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
228e0 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
228f0 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
22900 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
22910 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63  */.  u32  nAlloc
22920 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f  ;         /* Amo
22930 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c  unt of space all
22940 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20  ocated in zText 
22950 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f  */.  u32  mxAllo
22960 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  c;        /* Max
22970 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c  imum allowed all
22980 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20  ocation.  0 for 
22990 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20  no malloc usage 
229a0 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b  */.  u32  nChar;
229b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
229c0 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
229d0 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38  g so far */.  u8
229e0 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20     accError;    
229f0 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e     /* STRACCUM_N
22a00 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d  OMEM or STRACCUM
22a10 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20  _TOOBIG */.  u8 
22a20 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20    printfFlags;  
22a30 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e    /* SQLITE_PRIN
22a40 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a  TF flags below *
22a50 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52  /.};.#define STR
22a60 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a  ACCUM_NOMEM   1.
22a70 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
22a80 5f 54 4f 4f 42 49 47 20 20 32 0a 23 64 65 66 69  _TOOBIG  2.#defi
22a90 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
22aa0 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20  _INTERNAL 0x01  
22ab0 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d  /* Internal-use-
22ac0 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20  only converters 
22ad0 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
22ae0 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
22af0 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20  _SQLFUNC  0x02  
22b00 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  /* SQL function 
22b10 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50  arguments to VXP
22b20 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65  rintf */.#define
22b30 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
22b40 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a  ALLOCED 0x04  /*
22b50 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69   True if xText i
22b60 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  s allocated spac
22b70 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73  e */..#define is
22b80 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28  Malloced(X)  (((
22b90 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20  X)->printfFlags 
22ba0 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  & SQLITE_PRINTF_
22bb0 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a  MALLOCED)!=0)...
22bc0 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20  /*.** A pointer 
22bd0 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
22be0 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  e is used to com
22bf0 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61  municate informa
22c00 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  tion.** from sql
22c10 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f  ite3Init and OP_
22c20 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f  ParseSchema into
22c30 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74   the sqlite3Init
22c40 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70  Callback..*/.typ
22c50 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20  edef struct {.  
22c60 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
22c70 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
22c80 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ase being initia
22c90 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  lized */.  char 
22ca0 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
22cb0 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
22cc0 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
22cd0 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
22ce0 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61       /* 0 for ma
22cf0 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20  in database.  1 
22d00 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f  for TEMP, 2.. fo
22d10 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20  r ATTACHed */.  
22d20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
22d30 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f      /* Result co
22d40 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  de stored here *
22d50 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f  /.} InitData;../
22d60 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63  *.** Structure c
22d70 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c  ontaining global
22d80 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64   configuration d
22d90 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ata for the SQLi
22da0 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
22db0 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
22dc0 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73   also contains s
22dd0 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  ome state inform
22de0 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
22df0 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b   Sqlite3Config {
22e00 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b  .  int bMemstat;
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
22e30 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74  enable memory st
22e40 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43  atus */.  int bC
22e50 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20  oreMutex;       
22e60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22e70 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f  rue to enable co
22e80 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  re mutexing */. 
22e90 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b   int bFullMutex;
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22eb0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
22ec0 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69  able full mutexi
22ed0 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65  ng */.  int bOpe
22ee0 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20  nUri;           
22ef0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
22f00 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66  e to interpret f
22f10 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73  ilenames as URIs
22f20 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69   */.  int bUseCi
22f30 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
22f40 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63          /* Use c
22f50 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20  overing indices 
22f60 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a  for full-scans *
22f70 2f 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61  /.  int bSmallMa
22f80 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  lloc;           
22f90 20 20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c        /* Avoid l
22fa0 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  arge memory allo
22fb0 63 61 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20  cations if true 
22fc0 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
22fd0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
22fe0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
22ff0 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
23000 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f  */.  int neverCo
23010 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20  rrupt;          
23020 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
23030 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c  se is always wel
23040 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e  l-formed */.  in
23050 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
23060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23070 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
23080 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
23090 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
230a0 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
230b0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
230c0 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
230d0 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69  fer count */.  i
230e0 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20  nt nStmtSpill;  
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23100 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c   /* Stmt-journal
23110 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74   spill-to-disk t
23120 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71  hreshold */.  sq
23130 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
23140 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  s m;            
23150 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  /* Low-level mem
23160 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
23170 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
23180 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
23190 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20  ods mutex;      
231a0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74  /* Low-level mut
231b0 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  ex interface */.
231c0 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65    sqlite3_pcache
231d0 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65  _methods2 pcache
231e0 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c  2;  /* Low-level
231f0 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65   page-cache inte
23200 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  rface */.  void 
23210 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20  *pHeap;         
23220 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23230 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61  Heap storage spa
23240 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61  ce */.  int nHea
23250 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
23260 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
23270 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a  e of pHeap[] */.
23280 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52    int mnReq, mxR
23290 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
232a0 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d      /* Min and m
232b0 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73  ax heap requests
232c0 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69   sizes */.  sqli
232d0 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70  te3_int64 szMmap
232e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
232f0 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65   mmap() space pe
23300 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20  r open file */. 
23310 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
23320 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  xMmap;          
23330 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61     /* Maximum va
23340 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a  lue for szMmap *
23350 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23370 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
23380 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
23390 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
233a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233b0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
233c0 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
233d0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
233e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
233f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
23400 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
23410 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
23420 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
23430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23440 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
23450 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
23460 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
23470 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
23480 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
23490 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
234a0 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
234b0 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20  /.  u32 szPma;  
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234d0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
234e0 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65   Sorter PMA size
234f0 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
23500 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
23510 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
23520 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
23530 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
23540 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
23550 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
23560 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
23570 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
23580 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
23590 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
235a0 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
235b0 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
235c0 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
235d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
235e0 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
235f0 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
23600 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
23610 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
23620 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23630 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
23640 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
23650 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
23660 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
23670 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23680 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
23690 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
236a0 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
236b0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
236c0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
236d0 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
236e0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
236f0 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
23700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23710 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
23720 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
23730 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
23740 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
23750 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
23760 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
23770 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
23780 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
23790 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
237a0 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
237b0 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
237c0 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
237d0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
237e0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
237f0 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
23800 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  og() */.#ifdef S
23810 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
23820 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
23830 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
23840 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
23850 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
23860 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
23870 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
23880 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
23890 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
238a0 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
238b0 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
238c0 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
238d0 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
238e0 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
238f0 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
23900 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
23910 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
23920 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
23930 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
23940 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  int iSrcLine,u8 
23950 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
23960 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
23970 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
23980 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
23990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
239b0 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
239c0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
239d0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
239e0 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c   int (*xTestCall
239f0 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20  back)(int);     
23a00 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79     /* Invoked by
23a10 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
23a20 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  () */.#endif.  i
23a30 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
23a40 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
23a50 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
23a60 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
23a70 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63  ls */.  int iOnc
23a80 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b  eResetThreshold;
23a90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
23aa0 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e  n to reset OP_On
23ab0 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 7d  ce counters */.}
23ac0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  ;../*.** This ma
23ad0 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
23ae0 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  de of assert() s
23af0 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64  tatements to ind
23b00 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68  icate that.** th
23b10 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79  e assert is only
23b20 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c   valid on a well
23b30 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
23b40 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a  .  Instead of:.*
23b50 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
23b60 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20   X );.**.** One 
23b70 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  writes:.**.**   
23b80 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43    assert( X || C
23b90 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a  ORRUPT_DB );.**.
23ba0 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  ** CORRUPT_DB is
23bb0 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72   true during nor
23bc0 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  mal operation.  
23bd0 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20  CORRUPT_DB does 
23be0 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20  not indicate.** 
23bf0 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
23c00 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  e is definitely 
23c10 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68  corrupt, only th
23c20 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63  at it might be c
23c30 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d  orrupt..** For m
23c40 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20  ost test cases, 
23c50 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65  CORRUPT_DB is se
23c60 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67  t to false using
23c70 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71   a special.** sq
23c80 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
23c90 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62  ol().  This enab
23ca0 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61  les assert() sta
23cb0 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65  tements to prove
23cc0 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20  .** things that 
23cd0 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20  are always true 
23ce0 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  for well-formed 
23cf0 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64  databases..*/.#d
23d00 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42  efine CORRUPT_DB
23d10 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67    (sqlite3Config
23d20 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30  .neverCorrupt==0
23d30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  )../*.** Context
23d40 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
23d50 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
23d60 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
23d70 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
23d80 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23da0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
23db0 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
23dc0 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  /.  int (*xExprC
23dd0 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
23de0 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
23df0 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
23e00 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
23e10 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
23e20 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
23e30 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
23e40 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
23e50 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65   */.  void (*xSe
23e60 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57  lectCallback2)(W
23e70 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
23e80 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61  /* Second callba
23e90 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
23ea0 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
23eb0 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
23ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23ed0 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
23ee0 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43  eries */.  u8 eC
23ef0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
23f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f10 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20       /* A small 
23f20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20  processing code 
23f30 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
23f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23f60 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
23f70 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
23f80 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
23f90 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
23fa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
23fb0 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
23fc0 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20      int n;      
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23ff0 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20   A counter */.  
24000 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20    int iCur;     
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
24030 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
24040 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70  /.    SrcList *p
24050 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20  SrcList;        
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24070 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  /* FROM clause *
24080 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63  /.    struct Src
24090 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74  Count *pSrcCount
240a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
240b0 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
240c0 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
240d0 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72  .    struct CCur
240e0 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b  Hint *pCCurHint;
240f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24100 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75  * Used by codeCu
24110 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20  rsorHint() */.  
24120 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20    int *aiCol;   
24130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24140 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61              /* a
24150 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  rray of column i
24160 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74  ndexes */.    st
24170 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70  ruct IdxCover *p
24180 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20  IdxCover;       
24190 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b          /* Check
241a0 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72   for index cover
241b0 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  age */.    struc
241c0 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a  t IdxExprTrans *
241d0 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20  pIdxTrans;      
241e0 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20       /* Convert 
241f0 69 6e 64 65 78 65 64 20 65 78 70 72 20 74 6f 20  indexed expr to 
24200 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78  column */.    Ex
24210 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
24220 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24230 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50          /* GROUP
24240 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
24250 20 20 73 74 72 75 63 74 20 48 61 76 69 6e 67 54    struct HavingT
24260 6f 57 68 65 72 65 43 74 78 20 2a 70 48 61 76 69  oWhereCtx *pHavi
24270 6e 67 43 74 78 3b 20 20 20 20 20 20 2f 2a 20 48  ngCtx;      /* H
24280 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63  AVING to WHERE c
24290 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 7d  lause ctx */.  }
242a0 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61   u;.};../* Forwa
242b0 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
242c0 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  */.int sqlite3Wa
242d0 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  lkExpr(Walker*, 
242e0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
242f0 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28  te3WalkExprList(
24300 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73  Walker*, ExprLis
24310 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24320 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65  WalkSelect(Walke
24330 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
24340 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
24350 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  ectExpr(Walker*,
24360 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
24370 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
24380 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65  From(Walker*, Se
24390 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
243a0 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28  te3ExprWalkNoop(
243b0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
243c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
243d0 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65  ctWalkNoop(Walke
243e0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
243f0 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  t sqlite3SelectW
24400 61 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c  alkFail(Walker*,
24410 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65   Select*);.#ifde
24420 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76  f SQLITE_DEBUG.v
24430 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
24440 74 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c  tWalkAssert2(Wal
24450 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
24460 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
24470 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
24480 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
24490 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
244a0 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
244b0 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
244c0 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
244d0 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
244e0 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
244f0 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
24500 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
24510 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
24520 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
24530 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
24540 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
24550 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
24560 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
24570 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
24580 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
24590 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
245a0 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
245b0 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
245c0 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
245d0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
245e0 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
245f0 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
24600 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
24610 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
24620 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
24630 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24640 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
24650 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
24660 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
24670 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
24680 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
24690 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
246a0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
246b0 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
246c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
246d0 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
246e0 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
246f0 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
24700 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
24710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24720 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
24730 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
24740 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
24750 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
24760 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
24770 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
24780 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
24790 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
247a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
247b0 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
247c0 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
247d0 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72  st char *zCteErr
247e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
247f0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
24800 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
24810 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
24820 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  ];.};..#ifdef SQ
24830 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
24840 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
24850 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a  the TreeView obj
24860 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20  ect is used for 
24870 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e  printing the con
24880 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20  tent of.** data 
24890 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71  structures on sq
248a0 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
248b0 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d  () using a tree-
248c0 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74  like view..*/.st
248d0 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a  ruct TreeView {.
248e0 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
248f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
24900 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20  ch level of the 
24910 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a  tree we are on *
24920 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30  /.  u8  bLine[10
24930 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  0];         /* D
24940 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20  raw vertical in 
24950 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e  column i if bLin
24960 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a  e[i] is true */.
24970 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
24980 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  ITE_DEBUG */../*
24990 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e  .** Assuming zIn
249a0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
249b0 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55  irst byte of a U
249c0 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a  TF-8 character,.
249d0 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74  ** advance zIn t
249e0 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66  o point to the f
249f0 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65  irst byte of the
24a00 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72   next UTF-8 char
24a10 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  acter..*/.#defin
24a20 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54  e SQLITE_SKIP_UT
24a30 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20  F8(zIn) {       
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a50 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b   \.  if( (*(zIn+
24a60 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20  +))>=0xc0 ){    
24a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a80 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
24a90 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30  while( (*zIn & 0
24aa0 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49  xc0)==0x80 ){ zI
24ab0 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20  n++; }          
24ac0 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20     \.  }        
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24af0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a              \.}.
24b00 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
24b10 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20  E_*_BKPT macros 
24b20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20  are substitutes 
24b30 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f  for the error co
24b40 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  des with.** the 
24b50 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69  same name but wi
24b60 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20  thout the _BKPT 
24b70 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d  suffix.  These m
24b80 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20  acros invoke.** 
24b90 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65  routines that re
24ba0 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75  port the line-nu
24bb0 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68  mber on which th
24bc0 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74  e error originat
24bd0 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69  ed.** using sqli
24be0 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20  te3_log().  The 
24bf0 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72  routines also pr
24c00 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65  ovide a convenie
24c10 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73  nt place.** to s
24c20 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72  et a debugger br
24c30 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74  eakpoint..*/.int
24c40 20 73 71 6c 69 74 65 33 52 65 70 6f 72 74 45 72   sqlite3ReportEr
24c50 72 6f 72 28 69 6e 74 20 69 45 72 72 2c 20 69 6e  ror(int iErr, in
24c60 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20  t lineno, const 
24c70 63 68 61 72 20 2a 7a 54 79 70 65 29 3b 0a 69 6e  char *zType);.in
24c80 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  t sqlite3Corrupt
24c90 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
24ca0 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
24cb0 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
24cc0 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
24cd0 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20  r(int);.#define 
24ce0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
24cf0 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75  KPT sqlite3Corru
24d00 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  ptError(__LINE__
24d10 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
24d20 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c  _MISUSE_BKPT sql
24d30 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
24d40 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
24d50 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  e SQLITE_CANTOPE
24d60 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61  N_BKPT sqlite3Ca
24d70 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49  ntopenError(__LI
24d80 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c  NE__).#ifdef SQL
24d90 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20  ITE_DEBUG.  int 
24da0 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f  sqlite3NomemErro
24db0 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  r(int);.  int sq
24dc0 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45  lite3IoerrnomemE
24dd0 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74  rror(int);.  int
24de0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50   sqlite3CorruptP
24df0 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e  gnoError(int,Pgn
24e00 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  o);.# define SQL
24e10 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73  ITE_NOMEM_BKPT s
24e20 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72  qlite3NomemError
24e30 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66  (__LINE__).# def
24e40 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ine SQLITE_IOERR
24e50 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69  _NOMEM_BKPT sqli
24e60 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
24e70 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64  or(__LINE__).# d
24e80 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
24e90 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c  RUPT_PGNO(P) sql
24ea0 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45  ite3CorruptPgnoE
24eb0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50  rror(__LINE__,(P
24ec0 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  )).#else.# defin
24ed0 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
24ee0 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  KPT SQLITE_NOMEM
24ef0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
24f00 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50  _IOERR_NOMEM_BKP
24f10 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  T SQLITE_IOERR_N
24f20 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51  OMEM.# define SQ
24f30 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e  LITE_CORRUPT_PGN
24f40 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72  O(P) sqlite3Corr
24f50 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
24f60 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  _).#endif../*.**
24f70 20 46 54 53 33 20 61 6e 64 20 46 54 53 34 20 62   FTS3 and FTS4 b
24f80 6f 74 68 20 72 65 71 75 69 72 65 20 76 69 72 74  oth require virt
24f90 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72  ual table suppor
24fa0 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  t.*/.#if defined
24fb0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
24fc0 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64  TUALTABLE).# und
24fd0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
24fe0 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51  _FTS3.# undef SQ
24ff0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
25000 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
25010 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e  TS4 is really an
25020 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46   extension for F
25030 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62  TS3.  It is enab
25040 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  led using the.**
25050 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
25060 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20  TS3 macro.  But 
25070 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
25080 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a  on we also call.
25090 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  ** the SQLITE_EN
250a0 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20  ABLE_FTS4 macro 
250b0 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61  to serve as an a
250c0 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f  lias for SQLITE_
250d0 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a  ENABLE_FTS3..*/.
250e0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
250f0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20  TE_ENABLE_FTS4) 
25100 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
25110 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a  TE_ENABLE_FTS3).
25120 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
25130 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65  ENABLE_FTS3 1.#e
25140 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
25150 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69  ctype.h header i
25160 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e  s needed for non
25170 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20  -ASCII systems. 
25180 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e   It is also.** n
25190 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68  eeded by FTS3 wh
251a0 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75  en FTS3 is inclu
251b0 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ded in the amalg
251c0 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  amation..*/.#if 
251d0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
251e0 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20  ASCII) || \.    
251f0 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
25200 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
25210 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
25220 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20  MALGAMATION)).# 
25230 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
25240 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
25250 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
25260 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73  cros mimic the s
25270 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
25280 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65  functions touppe
25290 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28  r(),.** isspace(
252a0 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73  ), isalnum(), is
252b0 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64  digit() and isxd
252c0 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69  igit(), respecti
252d0 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c  vely. The.** sql
252e0 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c  ite versions onl
252f0 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49  y work for ASCII
25300 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67   characters, reg
25310 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
25320 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
25330 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69  ITE_ASCII.# defi
25340 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
25350 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c  r(x)  ((x)&~(sql
25360 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
25370 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
25380 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65  &0x20)).# define
25390 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
253a0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
253b0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
253c0 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a  char)(x)]&0x01).
253d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
253e0 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71  Isalnum(x)   (sq
253f0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
25400 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
25410 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65  ]&0x06).# define
25420 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
25430 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
25440 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
25450 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a  char)(x)]&0x02).
25460 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25470 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71  Isdigit(x)   (sq
25480 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
25490 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
254a0 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65  ]&0x04).# define
254b0 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
254c0 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79  (x)  (sqlite3Cty
254d0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
254e0 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a  char)(x)]&0x08).
254f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25500 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71  Tolower(x)   (sq
25510 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
25520 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
25530 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20  )(x)]).# define 
25540 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
25550 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
25560 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
25570 68 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23  har)(x)]&0x80).#
25580 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
25590 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
255a0 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67    toupper((unsig
255b0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
255c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
255d0 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61  space(x)   isspa
255e0 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ce((unsigned cha
255f0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
25600 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
25610 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73  )   isalnum((uns
25620 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
25630 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25640 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61  Isalpha(x)   isa
25650 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63  lpha((unsigned c
25660 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
25670 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
25680 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75  (x)   isdigit((u
25690 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
256a0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
256b0 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69  e3Isxdigit(x)  i
256c0 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  sxdigit((unsigne
256d0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
256e0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
256f0 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72  wer(x)   tolower
25700 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
25710 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
25720 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20  lite3Isquote(x) 
25730 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29    ((x)=='"'||(x)
25740 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27  =='\''||(x)=='['
25750 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64  ||(x)=='`').#end
25760 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
25770 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
25780 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73  TION_DIAGS.int s
25790 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75  qlite3IsIdChar(u
257a0 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  8);.#endif../*.*
257b0 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
257c0 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
257d0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  /.int sqlite3Str
257e0 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a  ICmp(const char*
257f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
25800 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
25810 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  30(const char*);
25820 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f  .char *sqlite3Co
25830 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a  lumnType(Column*
25840 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65  ,char*);.#define
25850 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
25860 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
25870 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
25880 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
25890 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
258a0 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
258b0 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
258c0 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
258d0 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75  ite3MallocZero(u
258e0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
258f0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
25900 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
25910 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
25920 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
25930 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
25940 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
25950 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  NN(sqlite3*, u64
25960 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
25970 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33  DbStrDup(sqlite3
25980 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
25990 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
259a0 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  trNDup(sqlite3*,
259b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34  const char*, u64
259c0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
259d0 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75  Realloc(void*, u
259e0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
259f0 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65  e3DbReallocOrFre
25a00 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  e(sqlite3 *, voi
25a10 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
25a20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
25a30 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  c(sqlite3 *, voi
25a40 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
25a50 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71  sqlite3DbFree(sq
25a60 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
25a70 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
25a80 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76  eeNN(sqlite3*, v
25a90 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
25aa0 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
25ab0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
25ac0 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
25ad0 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
25ae0 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
25af0 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
25b00 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
25b10 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
25b20 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
25b30 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64  ult(void);.#ifnd
25b40 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
25b50 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  ABLE.void sqlite
25b60 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f  3BenignMallocHoo
25b70 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ks(void (*)(void
25b80 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ), void (*)(void
25b90 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  ));.#endif.int s
25ba0 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
25bb0 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
25bc0 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
25bd0 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
25be0 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
25bf0 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
25c00 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
25c10 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
25c20 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
25c30 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
25c40 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
25c50 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
25c60 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
25c70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
25c80 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
25c90 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
25ca0 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
25cb0 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
25cc0 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
25cd0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
25ce0 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
25cf0 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
25d00 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
25d10 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
25d20 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
25d30 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
25d40 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
25d50 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
25d60 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
25d70 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
25d80 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
25d90 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
25da0 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  D,P).#else.# def
25db0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
25dc0 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
25dd0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
25de0 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  aw(D,N).# define
25df0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
25e00 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c  ocZero(D,N)  sql
25e10 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
25e20 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
25e30 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
25e40 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74  D,P)       sqlit
25e50 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65  e3DbFree(D,P).#e
25e60 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20  ndif../* Do not 
25e70 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59  allow both MEMSY
25e80 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74  S5 and MEMSYS3 t
25e90 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67  o be defined tog
25ea0 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a  ether.  If they.
25eb0 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20  ** are, disable 
25ec0 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65  MEMSYS3.*/.#ifde
25ed0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
25ee0 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71  MEMSYS5.const sq
25ef0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
25f00 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
25f10 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23  Memsys5(void);.#
25f20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
25f30 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64  BLE_MEMSYS3.#end
25f40 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
25f50 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
25f60 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
25f70 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
25f80 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28  e3MemGetMemsys3(
25f90 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  void);.#endif...
25fa0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
25fb0 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69  UTEX_OMIT.  sqli
25fc0 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
25fd0 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
25fe0 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69  DefaultMutex(voi
25ff0 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
26000 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
26010 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75  t *sqlite3NoopMu
26020 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
26030 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
26040 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e  te3MutexAlloc(in
26050 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
26060 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29  3MutexInit(void)
26070 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
26080 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23  utexEnd(void);.#
26090 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
260a0 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
260b0 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  OMIT) && !define
260c0 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e  d(SQLITE_MUTEX_N
260d0 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  OOP).  void sqli
260e0 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72  te3MemoryBarrier
260f0 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20  (void);.#else.# 
26100 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
26110 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23 65  moryBarrier().#e
26120 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e  ndif..sqlite3_in
26130 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75  t64 sqlite3Statu
26140 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69  sValue(int);.voi
26150 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55  d sqlite3StatusU
26160 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  p(int, int);.voi
26170 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44  d sqlite3StatusD
26180 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  own(int, int);.v
26190 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
261a0 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20  sHighwater(int, 
261b0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
261c0 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28 73  3LookasideUsed(s
261d0 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a  qlite3*,int*);..
261e0 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74  /* Access to mut
261f0 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71 6c  exes used by sql
26200 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f  ite3_status() */
26210 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
26220 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75  sqlite3Pcache1Mu
26230 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74  tex(void);.sqlit
26240 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
26250 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69  3MallocMutex(voi
26260 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  d);..#if defined
26270 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
26280 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43 48 45  ULTITHREADED_CHE
26290 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e 65 64  CKS) && !defined
262a0 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d  (SQLITE_MUTEX_OM
262b0 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  IT).void sqlite3
262c0 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65  MutexWarnOnConte
262d0 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d 75  ntion(sqlite3_mu
262e0 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  tex*);.#else.# d
262f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 75 74  efine sqlite3Mut
26300 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69  exWarnOnContenti
26310 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69  on(x).#endif..#i
26320 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26330 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
26340 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73  .  int sqlite3Is
26350 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c  NaN(double);.#el
26360 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
26370 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23  te3IsNaN(X)  0.#
26380 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
26390 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
263a0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
263b0 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
263c0 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a  ation about SQL.
263d0 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67  ** functions arg
263e0 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20  uments that are 
263f0 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74  the parameters t
26400 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66  o the printf() f
26410 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  unction..*/.stru
26420 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ct PrintfArgumen
26430 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ts {.  int nArg;
26440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26450 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20  /* Total number 
26460 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
26470 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20    int nUsed;    
26480 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
26490 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
264a0 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
264b0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
264c0 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54   **apArg;   /* T
264d0 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75  he argument valu
264e0 65 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73  es */.};..void s
264f0 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 53  qlite3VXPrintf(S
26500 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20  trAccum*, const 
26510 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
26520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72  .void sqlite3XPr
26530 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
26540 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
26550 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
26560 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
26570 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  ,const char*, ..
26580 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
26590 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  3VMPrintf(sqlite
265a0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
265b0 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65  va_list);.#if de
265c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
265d0 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
265e0 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
265f0 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACE).  void sqli
26600 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63  te3DebugPrintf(c
26610 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
26620 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
26630 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
26640 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ).  void *sqlite
26650 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63  3TestTextToPtr(c
26660 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
26670 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
26680 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20  (SQLITE_DEBUG). 
26690 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
266a0 65 56 69 65 77 45 78 70 72 28 54 72 65 65 56 69  eViewExpr(TreeVi
266b0 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a  ew*, const Expr*
266c0 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
266d0 6c 69 74 65 33 54 72 65 65 56 69 65 77 42 61 72  lite3TreeViewBar
266e0 65 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  eExprList(TreeVi
266f0 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
26700 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
26710 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
26720 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69  e3TreeViewExprLi
26730 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
26740 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75  nst ExprList*, u
26750 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  8, const char*);
26760 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
26770 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72  reeViewSelect(Tr
26780 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53  eeView*, const S
26790 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76  elect*, u8);.  v
267a0 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
267b0 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77  iewWith(TreeView
267c0 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20  *, const With*, 
267d0 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f  u8);.#endif...vo
267e0 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
267f0 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
26800 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
26810 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
26820 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
26830 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
26840 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
26850 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b  3Dequote(char*);
26860 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b  .void sqlite3Tok
26870 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68  enInit(Token*,ch
26880 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
26890 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
268a0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
268b0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
268c0 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
268d0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
268e0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
268f0 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
26900 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
26910 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
26920 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
26930 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
26940 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
26950 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
26960 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
26970 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
26980 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
26990 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
269a0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
269b0 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
269c0 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
269d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
269e0 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e  BUG.int sqlite3N
269f0 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61  oTempsInRange(Pa
26a00 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23  rse*,int,int);.#
26a10 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69  endif.Expr *sqli
26a20 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c  te3ExprAlloc(sql
26a30 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
26a40 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70  Token*,int);.Exp
26a50 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73  r *sqlite3Expr(s
26a60 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
26a70 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
26a80 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68  qlite3ExprAttach
26a90 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33  Subtrees(sqlite3
26aa0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78  *,Expr*,Expr*,Ex
26ab0 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
26ac0 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c  te3PExpr(Parse*,
26ad0 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70   int, Expr*, Exp
26ae0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
26af0 33 50 45 78 70 72 41 64 64 53 65 6c 65 63 74 28  3PExprAddSelect(
26b00 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53  Parse*, Expr*, S
26b10 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73  elect*);.Expr *s
26b20 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71  qlite3ExprAnd(sq
26b30 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78  lite3*,Expr*, Ex
26b40 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
26b50 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
26b60 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
26b70 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
26b80 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67  sqlite3ExprAssig
26b90 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65  nVarNumber(Parse
26ba0 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a  *, Expr*, u32);.
26bb0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26bc0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
26bd0 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73   Expr*);.ExprLis
26be0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
26bf0 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
26c00 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
26c10 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
26c20 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e  te3ExprListAppen
26c30 64 56 65 63 74 6f 72 28 50 61 72 73 65 2a 2c 45  dVector(Parse*,E
26c40 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a  xprList*,IdList*
26c50 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
26c60 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
26c70 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69  SortOrder(ExprLi
26c80 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  st*,int);.void s
26c90 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
26ca0 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70  tName(Parse*,Exp
26cb0 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  rList*,Token*,in
26cc0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26cd0 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28  ExprListSetSpan(
26ce0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
26cf0 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
26d00 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
26d10 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
26d20 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33  , ExprList*);.u3
26d30 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  2 sqlite3ExprLis
26d40 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70  tFlags(const Exp
26d50 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
26d60 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33  ite3Init(sqlite3
26d70 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
26d80 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
26d90 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ack(void*, int, 
26da0 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b  char**, char**);
26db0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
26dc0 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  gma(Parse*,Token
26dd0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
26de0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
26df0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
26e00 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73  LTABLE.Module *s
26e10 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74 61 62  qlite3PragmaVtab
26e20 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
26e30 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  *,const char *zN
26e40 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ame);.#endif.voi
26e50 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c  d sqlite3ResetAl
26e60 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
26e70 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a  tion(sqlite3*);.
26e80 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
26e90 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74  tOneSchema(sqlit
26ea0 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
26eb0 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61  qlite3CollapseDa
26ec0 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69  tabaseArray(sqli
26ed0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
26ee0 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
26ef0 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
26f00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26f10 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65  DeleteColumnName
26f20 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65  s(sqlite3*,Table
26f30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
26f40 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69  olumnsFromExprLi
26f50 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  st(Parse*,ExprLi
26f60 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a  st*,i16*,Column*
26f70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26f80 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54  SelectAddColumnT
26f90 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28  ypeAndCollation(
26fa0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65  Parse*,Table*,Se
26fb0 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
26fc0 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f  qlite3ResultSetO
26fd0 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53  fSelect(Parse*,S
26fe0 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71  elect*);.void sq
26ff0 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54  lite3OpenMasterT
27000 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e  able(Parse *, in
27010 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  t);.Index *sqlit
27020 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
27030 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73  x(Table*);.i16 s
27040 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e  qlite3ColumnOfIn
27050 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29  dex(Index*, i16)
27060 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
27070 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  artTable(Parse*,
27080 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
27090 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  t,int,int,int);.
270a0 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  #if SQLITE_ENABL
270b0 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
270c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
270d0 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46  olumnPropertiesF
270e0 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20  romName(Table*, 
270f0 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a  Column*);.#else.
27100 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27110 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73  ColumnProperties
27120 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a  FromName(T,C) /*
27130 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66   no-op */.#endif
27140 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
27150 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f  Column(Parse*,To
27160 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  ken*,Token*);.vo
27170 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
27180 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
27190 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
271a0 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
271b0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
271c0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
271d0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
271e0 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
271f0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
27200 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65  oid sqlite3AddDe
27210 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65  faultValue(Parse
27220 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
27230 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
27240 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c  lateType(Parse*,
27250 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
27260 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50  qlite3EndTable(P
27270 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
27280 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b  en*,u8,Select*);
27290 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
272a0 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  eUri(const char*
272b0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73  ,const char*,uns
272c0 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20  igned int*,.    
272d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272e0 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68  sqlite3_vfs**,ch
272f0 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42  ar**,char **);.B
27300 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e  tree *sqlite3DbN
27310 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74  ameToBtree(sqlit
27320 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
27330 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
27340 5f 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65  _UNTESTABLE.# de
27350 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c  fine sqlite3Faul
27360 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f  tSim(X) SQLITE_O
27370 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71  K.#else.  int sq
27380 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e  lite3FaultSim(in
27390 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76  t);.#endif..Bitv
273a0 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
273b0 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
273c0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
273d0 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
273e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
273f0 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28  tvecTestNotNull(
27400 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
27410 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
27420 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
27430 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
27440 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
27450 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
27460 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
27470 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
27480 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
27490 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
274a0 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  c*);.#ifndef SQL
274b0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69  ITE_UNTESTABLE.i
274c0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
274d0 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c  BuiltinTest(int,
274e0 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52  int*);.#endif..R
274f0 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
27500 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
27510 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e  *, void*, unsign
27520 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ed int);.void sq
27530 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
27540 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20  (RowSet*);.void 
27550 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
27560 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
27570 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
27580 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
27590 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36  , int iBatch, i6
275a0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
275b0 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
275c0 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
275d0 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
275e0 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
275f0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  Token*,Token*,Ex
27600 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c  prList*,Select*,
27610 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21  int,int);..#if !
27620 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
27630 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65  MIT_VIEW) || !de
27640 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
27650 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
27660 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65    int sqlite3Vie
27670 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
27680 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
27690 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
276a0 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
276b0 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a  umnNames(A,B) 0.
276c0 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
276d0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
276e0 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  30.  int sqlite3
276f0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44  DbMaskAllZero(yD
27700 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76  bMask);.#endif.v
27710 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
27720 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
27730 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
27740 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
27750 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
27760 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
27770 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27780 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
27790 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
277a0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
277b0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
277c0 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
277d0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
277e0 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
277f0 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
27800 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
27810 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
27820 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
27830 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
27840 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
27850 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27860 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
27870 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  (X).#endif.void 
27880 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
27890 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
278a0 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
278b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
278c0 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61  lite3ArrayAlloca
278d0 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64  te(sqlite3*,void
278e0 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  *,int,int*,int*)
278f0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
27900 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71  3IdListAppend(sq
27910 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c  lite3*, IdList*,
27920 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
27930 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78  lite3IdListIndex
27940 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  (IdList*,const c
27950 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  har*);.SrcList *
27960 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e  sqlite3SrcListEn
27970 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20  large(sqlite3*, 
27980 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
27990 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
279a0 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
279b0 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  nd(sqlite3*, Src
279c0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
279d0 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20  oken*);.SrcList 
279e0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
279f0 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61  ppendFromTerm(Pa
27a00 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
27a10 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a  Token*, Token*,.
27a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a40 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65        Token*, Se
27a50 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64  lect*, Expr*, Id
27a60 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
27a70 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78  ite3SrcListIndex
27a80 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72  edBy(Parse *, Sr
27a90 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a  cList *, Token *
27aa0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
27ab0 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50  rcListFuncArgs(P
27ac0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
27ad0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
27ae0 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
27af0 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
27b00 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
27b10 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
27b20 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
27b30 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
27b40 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
27b50 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
27b60 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
27b70 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
27b80 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
27b90 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
27ba0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
27bb0 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
27bc0 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
27bd0 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
27be0 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78  te3AllocateIndex
27bf0 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c  Object(sqlite3*,
27c00 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b  i16,int,char**);
27c10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
27c20 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
27c30 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
27c40 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
27c50 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
27c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c70 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e         Expr*, in
27c80 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
27c90 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64  d sqlite3DropInd
27ca0 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ex(Parse*, SrcLi
27cb0 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
27cc0 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
27cd0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
27ce0 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65  lectDest*);.Sele
27cf0 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
27d00 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72  tNew(Parse*,Expr
27d10 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  List*,SrcList*,E
27d20 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a  xpr*,ExprList*,.
27d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d40 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45           Expr*,E
27d50 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70  xprList*,u32,Exp
27d60 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27d70 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
27d80 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
27d90 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
27da0 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
27db0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
27dc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
27dd0 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
27de0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
27df0 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
27e00 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
27e10 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
27e20 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
27e30 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
27e40 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
27e50 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
27e60 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
27e70 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
27e80 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
27e90 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c  here(Parse*,SrcL
27ea0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
27eb0 69 73 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a  ist*,Expr*,char*
27ec0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
27ed0 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d  qlite3DeleteFrom
27ee0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
27ef0 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69  *, Expr*, ExprLi
27f00 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  st*, Expr*);.voi
27f10 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  d sqlite3Update(
27f20 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
27f30 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  , ExprList*,Expr
27f40 2a 2c 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a 2c  *,int,ExprList*,
27f50 45 78 70 72 2a 29 3b 0a 57 68 65 72 65 49 6e 66  Expr*);.WhereInf
27f60 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42  o *sqlite3WhereB
27f70 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c  egin(Parse*,SrcL
27f80 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
27f90 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  ist*,ExprList*,u
27fa0 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  16,int);.void sq
27fb0 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68  lite3WhereEnd(Wh
27fc0 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73  ereInfo*);.LogEs
27fd0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  t sqlite3WhereOu
27fe0 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
27ff0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
28000 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
28010 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
28020 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
28030 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
28040 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
28050 69 74 65 33 57 68 65 72 65 4f 72 64 65 72 65 64  ite3WhereOrdered
28060 49 6e 6e 65 72 4c 6f 6f 70 28 57 68 65 72 65 49  InnerLoop(WhereI
28070 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
28080 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
28090 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
280a0 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e   sqlite3WhereCon
280b0 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65  tinueLabel(Where
280c0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
280d0 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62  te3WhereBreakLab
280e0 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
280f0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
28100 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49  OkOnePass(WhereI
28110 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65  nfo*, int*);.#de
28120 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46  fine ONEPASS_OFF
28130 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 2f        0        /
28140 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53  * Use of ONEPASS
28150 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a   not allowed */.
28160 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
28170 53 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20  SINGLE   1      
28180 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c    /* ONEPASS val
28190 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  id for a single 
281a0 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64  row update */.#d
281b0 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55  efine ONEPASS_MU
281c0 4c 54 49 20 20 20 20 32 20 20 20 20 20 20 20 20  LTI    2        
281d0 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61  /* ONEPASS is va
281e0 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65  lid for multiple
281f0 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71   rows */.void sq
28200 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61  lite3ExprCodeLoa
28210 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72  dIndexColumn(Par
28220 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
28230 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
28240 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
28250 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  GetColumn(Parse*
28260 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
28270 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
28280 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
28290 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f 52 65 67  deGetColumnToReg
282a0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
282b0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
282c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
282d0 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
282e0 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62  Table(Vdbe*, Tab
282f0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
28300 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28310 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61  3ExprCodeMove(Pa
28320 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
28330 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28340 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65  e3ExprCacheStore
28350 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
28360 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
28370 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75  lite3ExprCachePu
28380 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  sh(Parse*);.void
28390 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
283a0 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f  ePop(Parse*);.vo
283b0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
283c0 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a  cheRemove(Parse*
283d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
283e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
283f0 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b  heClear(Parse*);
28400 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28410 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68  rCacheAffinityCh
28420 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  ange(Parse*, int
28430 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28440 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
28450 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
28460 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28470 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65  prCodeCopy(Parse
28480 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
28490 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
284a0 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50  CodeFactorable(P
284b0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
284c0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
284d0 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61  xprCodeAtInit(Pa
284e0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
284f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28500 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
28510 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
28520 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28530 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
28540 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
28550 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28560 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
28570 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
28580 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28590 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
285a0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
285b0 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
285c0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
285d0 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30  CEL_DUP      0x0
285e0 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20  1  /* Deep, not 
285f0 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a  shallow copies *
28600 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
28610 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30  _ECEL_FACTOR   0
28620 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f  x02  /* Factor o
28630 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d  ut constant term
28640 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
28650 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20  ITE_ECEL_REF    
28660 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45    0x04  /* Use E
28670 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64  xprList.u.x.iOrd
28680 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69  erByCol */.#defi
28690 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f  ne SQLITE_ECEL_O
286a0 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a  MITREF  0x08  /*
286b0 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73   Omit if ExprLis
286c0 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
286d0 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  l */.void sqlite
286e0 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
286f0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
28700 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28710 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
28720 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
28730 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28740 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44  ite3ExprIfFalseD
28750 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  up(Parse*, Expr*
28760 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
28770 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
28780 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
28790 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
287a0 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
287b0 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20   LOCATE_VIEW    
287c0 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43  0x01.#define LOC
287d0 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32  ATE_NOERR   0x02
287e0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
287f0 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65  ocateTable(Parse
28800 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73  *,u32 flags,cons
28810 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
28820 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
28830 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
28840 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20  Item(Parse*,u32 
28850 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63  flags,struct Src
28860 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
28870 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
28880 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
28890 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
288a0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
288b0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
288c0 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
288d0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
288e0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
288f0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
28900 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
28910 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
28920 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
28930 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65  cuum(Parse*,Toke
28940 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
28950 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a  RunVacuum(char**
28960 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  , sqlite3*, int)
28970 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e  ;.char *sqlite3N
28980 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c  ameFromToken(sql
28990 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
289a0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
289b0 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45 78  ompare(Parse*,Ex
289c0 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
289d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
289e0 72 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78 70  rCompareSkip(Exp
289f0 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
28a00 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28a10 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72  ListCompare(Expr
28a20 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
28a30 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
28a40 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78  te3ExprImpliesEx
28a50 70 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  pr(Parse*,Expr*,
28a60 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
28a70 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
28a80 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28  alyzeAggregates(
28a90 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
28aa0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
28ab0 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
28ac0 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74  List(NameContext
28ad0 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
28ae0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 76  t sqlite3ExprCov
28af0 65 72 65 64 42 79 49 6e 64 65 78 28 45 78 70 72  eredByIndex(Expr
28b00 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 49 6e 64  *, int iCur, Ind
28b10 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73  ex *pIdx);.int s
28b20 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73  qlite3FunctionUs
28b30 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c  esThisSrc(Expr*,
28b40 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65   SrcList*);.Vdbe
28b50 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65   *sqlite3GetVdbe
28b60 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65  (Parse*);.#ifnde
28b70 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
28b80 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  BLE.void sqlite3
28b90 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
28ba0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
28bb0 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
28bc0 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  e(void);.#endif.
28bd0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
28be0 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a  backAll(sqlite3*
28bf0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
28c00 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
28c10 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ema(Parse*, int)
28c20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
28c30 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68  deVerifyNamedSch
28c40 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ema(Parse*, cons
28c50 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f  t char *zDb);.vo
28c60 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
28c70 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
28c80 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
28c90 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61 63 74  lite3EndTransact
28ca0 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  ion(Parse*,int);
28cb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76  .void sqlite3Sav
28cc0 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  epoint(Parse*, i
28cd0 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  nt, Token*);.voi
28ce0 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61  d sqlite3CloseSa
28cf0 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33  vepoints(sqlite3
28d00 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
28d10 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c  3LeaveMutexAndCl
28d20 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65  oseZombie(sqlite
28d30 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
28d40 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45  ExprIsConstant(E
28d50 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
28d60 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
28d70 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a  NotJoin(Expr*);.
28d80 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
28d90 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74  sConstantOrFunct
28da0 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a  ion(Expr*, u8);.
28db0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
28dc0 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70  sConstantOrGroup
28dd0 42 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  By(Parse*, Expr*
28de0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
28df0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54  t sqlite3ExprIsT
28e00 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70  ableConstant(Exp
28e10 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  r*,int);.#ifdef 
28e20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
28e30 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73  RSOR_HINTS.int s
28e40 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69  qlite3ExprContai
28e50 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a  nsSubquery(Expr*
28e60 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
28e70 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
28e80 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
28e90 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28ea0 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
28eb0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
28ec0 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
28ed0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
28ee0 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
28ef0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
28f00 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
28f10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
28f20 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
28f30 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c  .    Parse*,Tabl
28f40 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c  e*,Trigger*,int,
28f50 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75  int,int,i16,u8,u
28f60 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  8,u8,int);.void 
28f70 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
28f80 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
28f90 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
28fa0 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
28fb0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
28fc0 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
28fd0 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
28fe0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
28ff0 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
29000 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
29010 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
29020 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
29030 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
29040 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
29050 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
29060 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
29070 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20  t,int,.         
29080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29090 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75              u8,u
290a0 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  8,int,int*,int*)
290b0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
290c0 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d  ENABLE_NULL_TRIM
290d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53  .  void sqlite3S
290e0 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56  etMakeRecordP5(V
290f0 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  dbe*,Table*);.#e
29100 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
29110 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72  ite3SetMakeRecor
29120 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a  dP5(A,B).#endif.
29130 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
29140 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
29150 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
29160 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  int,int,int*,int
29170 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ,int,int);.int s
29180 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
29190 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a  ndIndices(Parse*
291a0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75  , Table*, int, u
291b0 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74  8, int, u8*, int
291c0 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  *, int*);.void s
291d0 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
291e0 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a  Operation(Parse*
291f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
29200 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72  d sqlite3MultiWr
29210 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ite(Parse*);.voi
29220 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72  d sqlite3MayAbor
29230 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
29240 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74  sqlite3HaltConst
29250 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
29260 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69  t, int, char*, i
29270 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  8, u8);.void sql
29280 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72  ite3UniqueConstr
29290 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
292a0 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
292b0 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73  sqlite3RowidCons
292c0 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
292d0 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70  nt, Table*);.Exp
292e0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75  r *sqlite3ExprDu
292f0 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  p(sqlite3*,Expr*
29300 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20  ,int);.ExprList 
29310 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
29320 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
29330 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63  rList*,int);.Src
29340 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
29350 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
29360 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ,SrcList*,int);.
29370 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
29380 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  dListDup(sqlite3
29390 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65  *,IdList*);.Sele
293a0 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
293b0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  tDup(sqlite3*,Se
293c0 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20  lect*,int);.#if 
293d0 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
293e0 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  LED.void sqlite3
293f0 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 53 65  SelectSetName(Se
29400 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  lect*,const char
29410 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
29420 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
29430 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e  SetName(A,B).#en
29440 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
29450 49 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75 6e  InsertBuiltinFun
29460 63 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29  cs(FuncDef*,int)
29470 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
29480 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73  e3FindFunction(s
29490 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
294a0 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a  ar*,int,u8,u8);.
294b0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
294c0 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74  sterBuiltinFunct
294d0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
294e0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
294f0 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e  DateTimeFunction
29500 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
29510 6c 69 74 65 33 52 65 67 69 73 74 65 72 50 65 72  lite3RegisterPer
29520 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69  ConnectionBuilti
29530 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  nFunctions(sqlit
29540 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
29550 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73  3SafetyCheckOk(s
29560 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
29570 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
29580 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33  SickOrOk(sqlite3
29590 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
295a0 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72  ChangeCookie(Par
295b0 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20  se*, int);..#if 
295c0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
295d0 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64  OMIT_VIEW) && !d
295e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
295f0 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64  IT_TRIGGER).void
29600 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c   sqlite3Material
29610 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20  izeView(Parse*, 
29620 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Table*, Expr*, E
29630 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69  xprList*,Expr*,i
29640 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
29650 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
29660 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20  _TRIGGER.  void 
29670 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67  sqlite3BeginTrig
29680 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ger(Parse*, Toke
29690 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
296a0 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73  t,IdList*,SrcLis
296b0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
296c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
296d0 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a  xpr*,int, int);.
296e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69    void sqlite3Fi
296f0 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73  nishTrigger(Pars
29700 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  e*, TriggerStep*
29710 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69  , Token*);.  voi
29720 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
29730 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63  gger(Parse*, Src
29740 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  List*, int);.  v
29750 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
29760 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a  riggerPtr(Parse*
29770 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54  , Trigger*);.  T
29780 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
29790 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72  riggersExist(Par
297a0 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  se *, Table*, in
297b0 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
297c0 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69  t *pMask);.  Tri
297d0 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
297e0 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a  ggerList(Parse *
297f0 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f  , Table *);.  vo
29800 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
29810 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  wTrigger(Parse*,
29820 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c   Trigger *, int,
29830 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
29840 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20   Table *,.      
29850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29860 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20        int, int, 
29870 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
29880 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
29890 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a  erDirect(Parse *
298a0 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62  , Trigger *, Tab
298b0 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  le *, int, int, 
298c0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
298d0 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28  iteViewTriggers(
298e0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
298f0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72  Expr*, int, Expr
29900 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  List*);.  void s
29910 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
29920 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a  gerStep(sqlite3*
29930 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
29940 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
29950 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65  sqlite3TriggerSe
29960 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33  lectStep(sqlite3
29970 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72  *,Select*);.  Tr
29980 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
29990 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53  e3TriggerInsertS
299a0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
299b0 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20  en*, IdList*,.  
299c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299e0 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38        Select*,u8
299f0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
29a00 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
29a10 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74  UpdateStep(sqlit
29a20 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  e3*,Token*,ExprL
29a30 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29  ist*, Expr*, u8)
29a40 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
29a50 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44  *sqlite3TriggerD
29a60 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65  eleteStep(sqlite
29a70 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a  3*,Token*, Expr*
29a80 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29a90 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
29aa0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
29ab0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
29ac0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
29ad0 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
29ae0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
29af0 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
29b00 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
29b10 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
29b20 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
29b30 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
29b40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
29b50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
29b60 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
29b70 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
29b80 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65   : (p)).# define
29b90 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
29ba0 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
29bb0 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a  level==0).#else.
29bc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29bd0 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c  TriggersExist(B,
29be0 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66  C,D,E,F) 0.# def
29bf0 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74  ine sqlite3Delet
29c00 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20  eTrigger(A,B).# 
29c10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72  define sqlite3Dr
29c20 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42  opTriggerPtr(A,B
29c30 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29c40 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
29c50 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a  eTrigger(A,B,C).
29c60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29c70 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41  CodeRowTrigger(A
29c80 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49  ,B,C,D,E,F,G,H,I
29c90 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29ca0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
29cb0 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45  Direct(A,B,C,D,E
29cc0 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,F).# define sql
29cd0 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
29ce0 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65  X, Y) 0.# define
29cf0 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
29d00 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66  level(p) p.# def
29d10 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70  ine sqlite3IsTop
29d20 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66  level(p) 1.# def
29d30 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
29d40 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c  erColmask(A,B,C,
29d50 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69  D,E,F,G) 0.#endi
29d60 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
29d70 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  inType(Parse*, T
29d80 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
29d90 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
29da0 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67  ite3CreateForeig
29db0 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  nKey(Parse*, Exp
29dc0 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  rList*, Token*, 
29dd0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
29de0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
29df0 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  erForeignKey(Par
29e00 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64  se*, int);.#ifnd
29e10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
29e20 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76  UTHORIZATION.  v
29e30 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52  oid sqlite3AuthR
29e40 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ead(Parse*,Expr*
29e50 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74  ,Schema*,SrcList
29e60 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
29e70 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65  3AuthCheck(Parse
29e80 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
29e90 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
29ea0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
29eb0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
29ec0 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72  hContextPush(Par
29ed0 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74  se*, AuthContext
29ee0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
29ef0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
29f00 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75  uthContextPop(Au
29f10 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69  thContext*);.  i
29f20 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  nt sqlite3AuthRe
29f30 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f  adCol(Parse*, co
29f40 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
29f50 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
29f60 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
29f70 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61  qlite3AuthRead(a
29f80 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65  ,b,c,d).# define
29f90 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
29fa0 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20  k(a,b,c,d,e)    
29fb0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69  SQLITE_OK.# defi
29fc0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
29fd0 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29  ntextPush(a,b,c)
29fe0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29ff0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
2a000 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a  a)  ((void)(a)).
2a010 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2a020 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a  te3Attach(Parse*
2a030 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
2a040 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2a050 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65  ite3Detach(Parse
2a060 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2a070 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44  sqlite3FixInit(D
2a080 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c  bFixer*, Parse*,
2a090 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2a0a0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
2a0b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2a0c0 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a  SrcList(DbFixer*
2a0d0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
2a0e0 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63   sqlite3FixSelec
2a0f0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65  t(DbFixer*, Sele
2a100 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
2a110 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72  3FixExpr(DbFixer
2a120 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
2a130 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73  qlite3FixExprLis
2a140 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  t(DbFixer*, Expr
2a150 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2a160 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65  te3FixTriggerSte
2a170 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67  p(DbFixer*, Trig
2a180 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73  gerStep*);.int s
2a190 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
2a1a0 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65   char *z, double
2a1b0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
2a1c0 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
2a1d0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
2a1e0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2a1f0 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72  3Atoi(const char
2a200 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2a210 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e  TE_OMIT_UTF16.in
2a220 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
2a230 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
2a240 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
2a250 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ar);.#endif.int 
2a260 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
2a270 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  en(const char *p
2a280 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29  Data, int nByte)
2a290 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66  ;.u32 sqlite3Utf
2a2a0 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a  8Read(const u8**
2a2b0 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
2a2c0 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f  3LogEst(u64);.Lo
2a2d0 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2a2e0 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67  stAdd(LogEst,Log
2a2f0 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Est);.#ifndef SQ
2a300 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2a310 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71  LTABLE.LogEst sq
2a320 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44  lite3LogEstFromD
2a330 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23  ouble(double);.#
2a340 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2a350 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2a360 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29  STMT_SCANSTATUS)
2a370 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
2a380 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2a390 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20  STAT3_OR_STAT4) 
2a3a0 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  || \.    defined
2a3b0 28 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f  (SQLITE_EXPLAIN_
2a3c0 45 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a  ESTIMATED_ROWS).
2a3d0 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  u64 sqlite3LogEs
2a3e0 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a  tToInt(LogEst);.
2a3f0 23 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73 71  #endif.VList *sq
2a400 6c 69 74 65 33 56 4c 69 73 74 41 64 64 28 73 71  lite3VListAdd(sq
2a410 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f  lite3*,VList*,co
2a420 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e  nst char*,int,in
2a430 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t);.const char *
2a440 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54  sqlite3VListNumT
2a450 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74  oName(VList*,int
2a460 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 4c  );.int sqlite3VL
2a470 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69  istNameToNum(VLi
2a480 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  st*,const char*,
2a490 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  int);../*.** Rou
2a4a0 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e  tines to read an
2a4b0 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65  d write variable
2a4c0 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
2a4d0 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  .  These used to
2a4e0 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c  .** be defined l
2a4f0 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20  ocally, but now 
2a500 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e  we use the varin
2a510 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68  t routines in th
2a520 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65  e util.c.** file
2a530 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2a540 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
2a550 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  ed char*, u64);.
2a560 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
2a570 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
2a580 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a  ed char *, u64 *
2a590 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
2a5a0 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
2a5b0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
2a5c0 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  u32 *);.int sqli
2a5d0 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34  te3VarintLen(u64
2a5e0 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   v);../*.** The 
2a5f0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66  common case is f
2a600 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62  or a varint to b
2a610 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  e a single byte.
2a620 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67    They following
2a630 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c  .** macros handl
2a640 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  e the common cas
2a650 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63  e without a proc
2a660 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20  edure call, but 
2a670 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  then call.** the
2a680 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c   procedure for l
2a690 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a  arger varints..*
2a6a0 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  /.#define getVar
2a6b0 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
2a6c0 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
2a6d0 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a  x80)?((B)=(u32)*
2a6e0 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65  (A)),1:sqlite3Ge
2a6f0 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75  tVarint32((A),(u
2a700 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66  32 *)&(B))).#def
2a710 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28  ine putVarint32(
2a720 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
2a730 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
2a740 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67  80)?(*(A)=(unsig
2a750 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a  ned char)(B)),1:
2a760 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61  \.  sqlite3PutVa
2a770 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23  rint((A),(B))).#
2a780 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
2a790 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61      sqlite3GetVa
2a7a0 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74  rint.#define put
2a7b0 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
2a7c0 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e  3PutVarint...con
2a7d0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2a7e0 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
2a7f0 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
2a800 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a810 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64  TableAffinity(Vd
2a820 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
2a830 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43  );.char sqlite3C
2a840 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45  ompareAffinity(E
2a850 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
2a860 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69   aff2);.int sqli
2a870 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
2a880 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  Ok(Expr *pExpr, 
2a890 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74  char idx_affinit
2a8a0 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  y);.char sqlite3
2a8b0 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e  TableColumnAffin
2a8c0 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b  ity(Table*,int);
2a8d0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
2a8e0 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
2a8f0 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
2a900 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
2a910 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
2a920 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2a930 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
2a940 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
2a950 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a960 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c  ErrorWithMsg(sql
2a970 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2a980 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
2a990 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
2a9a0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2a9b0 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65  oid sqlite3Syste
2a9c0 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  mError(sqlite3*,
2a9d0 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
2a9e0 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c  te3HexToBlob(sql
2a9f0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
2aa00 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38  r *z, int n);.u8
2aa10 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74   sqlite3HexToInt
2aa20 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c  (int h);.int sql
2aa30 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28  ite3TwoPartName(
2aa40 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
2aa50 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
2aa60 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e   **);..#if defin
2aa70 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ed(SQLITE_NEED_E
2aa80 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63  RR_NAME).const c
2aa90 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e  har *sqlite3ErrN
2aaa0 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ame(int);.#endif
2aab0 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
2aac0 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
2aad0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
2aae0 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
2aaf0 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
2ab00 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
2ab10 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
2ab20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
2ab30 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ,int);.CollSeq *
2ab40 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c  sqlite3LocateCol
2ab50 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
2ab60 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a  se, const char*z
2ab70 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Name);.CollSeq *
2ab80 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
2ab90 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2aba0 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
2abb0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2abc0 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28 50 61  ExprNNCollSeq(Pa
2abd0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2abe0 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
2abf0 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
2ac00 71 4d 61 74 63 68 28 50 61 72 73 65 2a 2c 45 78  qMatch(Parse*,Ex
2ac10 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
2ac20 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
2ac30 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
2ac40 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2ac50 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  *, const Token*,
2ac60 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
2ac70 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
2ac80 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c  teString(Parse*,
2ac90 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
2aca0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2acb0 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65  3ExprSkipCollate
2acc0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
2acd0 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71  ite3CheckCollSeq
2ace0 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65  (Parse *, CollSe
2acf0 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  q *);.int sqlite
2ad00 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65  3CheckObjectName
2ad10 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20  (Parse *, const 
2ad20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71  char *);.void sq
2ad30 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
2ad40 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  ges(sqlite3 *, i
2ad50 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2ad60 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  AddInt64(i64*,i6
2ad70 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  4);.int sqlite3S
2ad80 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ubInt64(i64*,i64
2ad90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  );.int sqlite3Mu
2ada0 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  lInt64(i64*,i64)
2adb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73  ;.int sqlite3Abs
2adc0 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64  Int32(int);.#ifd
2add0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2ade0 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20  _8_3_NAMES.void 
2adf0 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
2ae00 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  x3(const char*, 
2ae10 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
2ae20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69  define sqlite3Fi
2ae30 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23  leSuffix3(X,Y).#
2ae40 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33  endif.u8 sqlite3
2ae50 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
2ae60 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63   char *z,u8);..c
2ae70 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
2ae80 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69  e3ValueText(sqli
2ae90 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
2aea0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
2aeb0 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76  eBytes(sqlite3_v
2aec0 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64  alue*, u8);.void
2aed0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
2aee0 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  Str(sqlite3_valu
2aef0 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  e*, int, const v
2af00 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20  oid *,u8,.      
2af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
2af30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2af40 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69  alueSetNull(sqli
2af50 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69  te3_value*);.voi
2af60 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
2af70 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
2af80 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
2af90 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
2afa0 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23  ew(sqlite3 *);.#
2afb0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2afc0 49 54 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73  IT_UTF16.char *s
2afd0 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
2afe0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2aff0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
2b000 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2b010 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
2b020 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
2b030 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
2b040 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
2b050 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2b060 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
2b070 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
2b080 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
2b090 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
2b0a0 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
2b0b0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
2b0c0 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
2b0d0 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
2b0e0 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
2b0f0 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78  3StrBINARY[];.ex
2b100 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2b110 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2b120 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a  UpperToLower[];.
2b130 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2b140 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2b150 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78  e3CtypeMap[];.ex
2b160 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  tern const Token
2b170 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e   sqlite3IntToken
2b180 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  s[];.extern SQLI
2b190 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71  TE_WSD struct Sq
2b1a0 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69  lite3Config sqli
2b1b0 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72  te3Config;.exter
2b1c0 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  n FuncDefHash sq
2b1d0 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63  lite3BuiltinFunc
2b1e0 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
2b1f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
2b200 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
2b210 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
2b220 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ndif.#endif.void
2b230 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
2b240 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20  Moved(sqlite3*, 
2b250 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2b260 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e  void sqlite3Rein
2b270 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  dex(Parse*, Toke
2b280 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
2b290 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75  d sqlite3AlterFu
2b2a0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
2b2b0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2b2c0 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73  RenameTable(Pars
2b2d0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
2b2e0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2b2f0 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
2b300 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
2b310 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
2b320 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
2b330 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
2b340 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
2b350 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
2b360 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
2b370 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
2b380 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73   sqlite3CodeSubs
2b390 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78  elect(Parse*, Ex
2b3a0 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  pr *, int, int);
2b3b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
2b3c0 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20  ectPrep(Parse*, 
2b3d0 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
2b3e0 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  text*);.void sql
2b3f0 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e  ite3SelectWrongN
2b400 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72  umTermsError(Par
2b410 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65  se *pParse, Sele
2b420 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69  ct *p);.int sqli
2b430 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65  te3MatchSpanName
2b440 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  (const char*, co
2b450 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2b460 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2b470 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
2b480 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65  3ResolveExprName
2b490 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
2b4a0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2b4b0 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69  te3ResolveExprLi
2b4c0 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  stNames(NameCont
2b4d0 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ext*, ExprList*)
2b4e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2b4f0 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73  solveSelectNames
2b500 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
2b510 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
2b520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2b530 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63  olveSelfReferenc
2b540 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  e(Parse*,Table*,
2b550 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  int,Expr*,ExprLi
2b560 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2b570 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f  3ResolveOrderGro
2b580 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c  upBy(Parse*, Sel
2b590 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ect*, ExprList*,
2b5a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
2b5b0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
2b5c0 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c  nDefault(Vdbe *,
2b5d0 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
2b5e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b5f0 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43  3AlterFinishAddC
2b600 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54  olumn(Parse *, T
2b610 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
2b620 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41  lite3AlterBeginA
2b630 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
2b640 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f  , SrcList *);.Co
2b650 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
2b660 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
2b670 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
2b680 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
2b690 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
2b6a0 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
2b6b0 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  r*, u8*);.void s
2b6c0 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61  qlite3Analyze(Pa
2b6d0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2b6e0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2b6f0 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64  e3InvokeBusyHand
2b700 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a  ler(BusyHandler*
2b710 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2b720 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54  ndDb(sqlite3*, T
2b730 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2b740 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71  te3FindDbName(sq
2b750 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
2b760 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
2b770 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
2b780 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42  sqlite3*,int iDB
2b790 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2b7a0 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65  eleteIndexSample
2b7b0 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78  s(sqlite3*,Index
2b7c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b7d0 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e  DefaultRowEst(In
2b7e0 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2b7f0 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
2b800 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
2b810 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2b820 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69  ite3IsLikeFuncti
2b830 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  on(sqlite3*,Expr
2b840 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76  *,int*,char*);.v
2b850 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d  oid sqlite3Schem
2b860 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a  aClear(void *);.
2b870 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53  Schema *sqlite3S
2b880 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33  chemaGet(sqlite3
2b890 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e   *, Btree *);.in
2b8a0 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54  t sqlite3SchemaT
2b8b0 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a  oIndex(sqlite3 *
2b8c0 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b  db, Schema *);.K
2b8d0 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2b8e0 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69  eyInfoAlloc(sqli
2b8f0 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  te3*,int,int);.v
2b900 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  oid sqlite3KeyIn
2b910 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a  foUnref(KeyInfo*
2b920 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2b930 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65  te3KeyInfoRef(Ke
2b940 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
2b950 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2b960 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  OfIndex(Parse*, 
2b970 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20  Index*);.#ifdef 
2b980 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
2b990 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49   sqlite3KeyInfoI
2b9a0 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e  sWriteable(KeyIn
2b9b0 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  fo*);.#endif.int
2b9c0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75   sqlite3CreateFu
2b9d0 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  nc(sqlite3 *, co
2b9e0 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c  nst char *, int,
2b9f0 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20   int, void *,.  
2ba00 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2ba10 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2ba20 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2ba30 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2ba40 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2ba50 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
2ba60 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  *), void (*)(sql
2ba70 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
2ba80 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
2ba90 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b   *pDestructor.);
2baa0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d  .void sqlite3Oom
2bab0 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b  Fault(sqlite3*);
2bac0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d  .void sqlite3Oom
2bad0 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b  Clear(sqlite3*);
2bae0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45  .int sqlite3ApiE
2baf0 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  xit(sqlite3 *db,
2bb00 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2bb10 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
2bb20 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f  se(Parse *);..vo
2bb30 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
2bb40 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a  umInit(StrAccum*
2bb50 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  , sqlite3*, char
2bb60 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
2bb70 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
2bb80 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75  umAppend(StrAccu
2bb90 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  m*,const char*,i
2bba0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2bbb0 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41  3StrAccumAppendA
2bbc0 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  ll(StrAccum*,con
2bbd0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2bbe0 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61  sqlite3AppendCha
2bbf0 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c  r(StrAccum*,int,
2bc00 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c  char);.char *sql
2bc10 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69  ite3StrAccumFini
2bc20 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76  sh(StrAccum*);.v
2bc30 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2bc40 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75  cumReset(StrAccu
2bc50 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
2bc60 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28  3SelectDestInit(
2bc70 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c  SelectDest*,int,
2bc80 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
2bc90 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45  te3CreateColumnE
2bca0 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53  xpr(sqlite3 *, S
2bcb0 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69  rcList *, int, i
2bcc0 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  nt);..void sqlit
2bcd0 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28  e3BackupRestart(
2bce0 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
2bcf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
2bd00 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69  ackupUpdate(sqli
2bd10 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67  te3_backup *, Pg
2bd20 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b  no, const u8 *);
2bd30 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2bd40 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69  _OMIT_SUBQUERY.i
2bd50 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  nt sqlite3ExprCh
2bd60 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78  eckIN(Parse*, Ex
2bd70 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  pr*);.#else.# de
2bd80 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
2bd90 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c  CheckIN(x,y) SQL
2bda0 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23  ITE_OK.#endif..#
2bdb0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2bdc0 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
2bdd0 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  T4.void sqlite3A
2bde0 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28  nalyzeFunctions(
2bdf0 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
2be00 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56  e3Stat4ProbeSetV
2be10 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a  alue(.    Parse*
2be20 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64  ,Index*,Unpacked
2be30 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69  Record**,Expr*,i
2be40 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e  nt,int,int*);.in
2be50 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61  t sqlite3Stat4Va
2be60 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73  lueFromExpr(Pars
2be70 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73  e*, Expr*, u8, s
2be80 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
2be90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
2bea0 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61  t4ProbeFree(Unpa
2beb0 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e  ckedRecord*);.in
2bec0 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f  t sqlite3Stat4Co
2bed0 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63  lumn(sqlite3*, c
2bee0 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
2bef0 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61   int, sqlite3_va
2bf00 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c  lue**);.char sql
2bf10 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41  ite3IndexColumnA
2bf20 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a  ffinity(sqlite3*
2bf30 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a  , Index*, int);.
2bf40 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2bf50 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
2bf60 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74  he LEMON-generat
2bf70 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66  ed parser.*/.#if
2bf80 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
2bf90 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  GAMATION.  void 
2bfa0 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c  *sqlite3ParserAl
2bfb0 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34  loc(void*(*)(u64
2bfc0 29 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ));.  void sqlit
2bfd0 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69  e3ParserFree(voi
2bfe0 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64  d*, void(*)(void
2bff0 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  *));.#endif.void
2c000 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76   sqlite3Parser(v
2c010 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  oid*, int, Token
2c020 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  , Parse*);.#ifde
2c030 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43  f YYTRACKMAXSTAC
2c040 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c  KDEPTH.  int sql
2c050 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50  ite3ParserStackP
2c060 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64  eak(void*);.#end
2c070 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
2c080 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  AutoLoadExtensio
2c090 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69  ns(sqlite3*);.#i
2c0a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c0b0 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
2c0c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2c0d0 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73  loseExtensions(s
2c0e0 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a  qlite3*);.#else.
2c0f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2c100 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
2c110 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  X).#endif..#ifnd
2c120 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
2c130 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f  HARED_CACHE.  vo
2c140 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  id sqlite3TableL
2c150 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ock(Parse *, int
2c160 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74  , int, u8, const
2c170 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a   char *);.#else.
2c180 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2c190 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78  3TableLock(v,w,x
2c1a0 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ,y,z).#endif..#i
2c1b0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
2c1c0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74  .  int sqlite3Ut
2c1d0 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63  f8To8(unsigned c
2c1e0 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
2c1f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
2c200 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
2c210 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2c220 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20  VtabClear(Y).#  
2c230 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2c240 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49  abSync(X,Y) SQLI
2c250 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
2c260 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
2c270 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ack(X).#  define
2c280 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
2c290 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  it(X).#  define 
2c2a0 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
2c2b0 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e  c(db) 0.#  defin
2c2c0 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  e sqlite3VtabLoc
2c2d0 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2c2e0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2c2f0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2c300 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
2c310 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ist(X).#  define
2c320 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
2c330 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53  point(X, Y, Z) S
2c340 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
2c350 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61  ne sqlite3GetVTa
2c360 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62  ble(X,Y)  ((VTab
2c370 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20  le*)0).#else.   
2c380 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c390 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64  Clear(sqlite3 *d
2c3a0 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76  b, Table*);.   v
2c3b0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44  oid sqlite3VtabD
2c3c0 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65  isconnect(sqlite
2c3d0 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29  3 *db, Table *p)
2c3e0 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
2c3f0 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33  VtabSync(sqlite3
2c400 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20   *db, Vdbe*);.  
2c410 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2c420 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33  Rollback(sqlite3
2c430 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71   *db);.   int sq
2c440 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
2c450 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
2c460 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2c470 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  bLock(VTable *);
2c480 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2c490 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c  VtabUnlock(VTabl
2c4a0 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
2c4b0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
2c4c0 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20  ist(sqlite3*);. 
2c4d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2c4e0 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74  bSavepoint(sqlit
2c4f0 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  e3 *, int, int);
2c500 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2c510 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
2c520 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f  (Vdbe*, sqlite3_
2c530 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c  vtab*);.   VTabl
2c540 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61  e *sqlite3GetVTa
2c550 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
2c560 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65  ble*);.   Module
2c570 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72 65   *sqlite3VtabCre
2c580 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20  ateModule(.     
2c590 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63  sqlite3*,.     c
2c5a0 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
2c5b0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2c5c0 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69  odule*,.     voi
2c5d0 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29  d*,.     void(*)
2c5e0 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20  (void*).   );.# 
2c5f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2c600 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
2c610 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
2c620 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
2c630 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  =0).#endif.int s
2c640 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
2c650 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72  ousTableInit(Par
2c660 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f  se*,Module*);.vo
2c670 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70  id sqlite3VtabEp
2c680 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61  onymousTableClea
2c690 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c  r(sqlite3*,Modul
2c6a0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2c6b0 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c  3VtabMakeWritabl
2c6c0 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  e(Parse*,Table*)
2c6d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2c6e0 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
2c6f0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
2c700 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  en*, Token*, int
2c710 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2c720 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
2c730 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
2c740 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c750 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
2c760 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2c770 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
2c780 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
2c790 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2c7a0 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
2c7b0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
2c7c0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
2c7d0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2c7e0 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
2c7f0 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
2c800 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
2c810 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
2c820 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
2c830 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2c840 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
2c850 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
2c860 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
2c870 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
2c880 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
2c890 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
2c8a0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2c8b0 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
2c8c0 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ion(sqlite3_cont
2c8d0 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
2c8e0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74  _value**);.sqlit
2c8f0 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
2c900 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28  StmtCurrentTime(
2c910 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2c920 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
2c930 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78  beParameterIndex
2c940 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
2c950 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
2c960 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69  qlite3TransferBi
2c970 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73  ndings(sqlite3_s
2c980 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73  tmt *, sqlite3_s
2c990 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tmt *);.void sql
2c9a0 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28  ite3ParserReset(
2c9b0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
2c9c0 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64  ite3Reprepare(Vd
2c9d0 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  be*);.void sqlit
2c9e0 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c  e3ExprListCheckL
2c9f0 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78  ength(Parse*, Ex
2ca00 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
2ca10 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  har*);.CollSeq *
2ca20 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d  sqlite3BinaryCom
2ca30 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  pareCollSeq(Pars
2ca40 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70  e *, Expr *, Exp
2ca50 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
2ca60 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f  3TempInMemory(co
2ca70 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  nst sqlite3*);.c
2ca80 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2ca90 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
2caa0 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  e(int);.#ifndef 
2cab0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2cac0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65    int sqlite3Che
2cad0 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a  ckpoint(sqlite3*
2cae0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
2caf0 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73  , int*);.  int s
2cb00 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
2cb10 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74  Hook(void*,sqlit
2cb20 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
2cb30 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  int);.#endif.#if
2cb40 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2cb50 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c  _CTE.  With *sql
2cb60 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73  ite3WithAdd(Pars
2cb70 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c  e*,With*,Token*,
2cb80 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
2cb90 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2cba0 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c  e3WithDelete(sql
2cbb0 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20  ite3*,With*);.  
2cbc0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
2cbd0 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74  Push(Parse*, Wit
2cbe0 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23  h*, u8);.#else.#
2cbf0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
2cc00 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64  thPush(x,y,z).#d
2cc10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
2cc20 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e  hDelete(x,y).#en
2cc30 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  dif../* Declarat
2cc40 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
2cc50 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
2cc60 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
2cc70 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
2cc80 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
2cc90 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
2cca0 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
2ccb0 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
2ccc0 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
2ccd0 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
2cce0 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
2ccf0 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
2cd00 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
2cd10 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
2cd20 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
2cd30 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
2cd40 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
2cd50 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
2cd60 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
2cd70 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
2cd80 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a  unctionality is.
2cd90 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66  ** provided (enf
2cda0 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63  orcement of FK c
2cdb0 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69  onstraints requi
2cdc0 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73  res the triggers
2cdd0 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f   sub-system)..*/
2cde0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2cdf0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2ce00 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
2ce10 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
2ce20 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73  RIGGER).  void s
2ce30 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61  qlite3FkCheck(Pa
2ce40 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2ce50 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2ce60 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2ce70 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61  e3FkDropTable(Pa
2ce80 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  rse*, SrcList *,
2ce90 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64   Table*);.  void
2cea0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
2ceb0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
2cec0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2ced0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
2cee0 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71  int sqlite3FkReq
2cef0 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61  uired(Parse*, Ta
2cf00 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29  ble*, int*, int)
2cf10 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46  ;.  u32 sqlite3F
2cf20 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c  kOldmask(Parse*,
2cf30 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79   Table*);.  FKey
2cf40 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72   *sqlite3FkRefer
2cf50 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a  ences(Table *);.
2cf60 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2cf70 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
2cf80 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
2cf90 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2cfa0 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  kCheck(a,b,c,d,e
2cfb0 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
2cfc0 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
2cfd0 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e  (a,b,c).  #defin
2cfe0 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  e sqlite3FkOldma
2cff0 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20  sk(a,b)         
2d000 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
2d010 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
2d020 62 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64  b,c,d)    0.  #d
2d030 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
2d040 65 66 65 72 65 6e 63 65 73 28 61 29 20 20 20 20  eferences(a)    
2d050 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66      0.#endif.#if
2d060 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2d070 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76  _FOREIGN_KEY.  v
2d080 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  oid sqlite3FkDel
2d090 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54  ete(sqlite3 *, T
2d0a0 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71  able*);.  int sq
2d0b0 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
2d0c0 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ex(Parse*,Table*
2d0d0 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69  ,FKey*,Index**,i
2d0e0 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt**);.#else.  #
2d0f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2d100 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64  Delete(a,b).  #d
2d110 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c  efine sqlite3FkL
2d120 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63  ocateIndex(a,b,c
2d130 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ,d,e).#endif.../
2d140 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66  *.** Available f
2d150 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20  ault injectors. 
2d160 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65   Should be numbe
2d170 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  red beginning wi
2d180 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  th 0..*/.#define
2d190 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
2d1a0 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20  ECTOR_MALLOC    
2d1b0 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   0.#define SQLIT
2d1c0 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
2d1d0 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a  COUNT      1../*
2d1e0 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
2d1f0 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e  e to the code in
2d200 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f   fault.c used fo
2d210 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62  r identifying "b
2d220 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63  enign".** malloc
2d230 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20   failures. This 
2d240 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20  is only present 
2d250 69 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  if SQLITE_UNTEST
2d260 41 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64  ABLE.** is not d
2d270 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  efined..*/.#ifnd
2d280 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
2d290 41 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ABLE.  void sqli
2d2a0 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
2d2b0 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
2d2c0 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
2d2d0 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
2d2e0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2d2f0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
2d300 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
2d310 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
2d320 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
2d330 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
2d340 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
2d350 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
2d360 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
2d370 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2d380 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
2d390 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
2d3a0 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
2d3b0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
2d3c0 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
2d3d0 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
2d3e0 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
2d3f0 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
2d400 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
2d410 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
2d420 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
2d430 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
2d440 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
2d450 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
2d460 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
2d470 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
2d480 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
2d490 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
2d4a0 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
2d4b0 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
2d4c0 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
2d4d0 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
2d4e0 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
2d4f0 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
2d500 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
2d510 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
2d520 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
2d530 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
2d540 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
2d550 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2d560 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
2d570 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
2d580 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
2d590 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
2d5a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2d5b0 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
2d5c0 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
2d5d0 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
2d5e0 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
2d5f0 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
2d600 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
2d610 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u32, int*, int
2d620 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  *);..int sqlite3
2d630 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
2d640 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74  te3_vfs *, const
2d650 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33   char *, sqlite3
2d660 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  _file *, int, in
2d670 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  t);.int sqlite3J
2d680 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74  ournalSize(sqlit
2d690 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20 64  e3_vfs *);.#if d
2d6a0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
2d6b0 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54  ABLE_ATOMIC_WRIT
2d6c0 45 29 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64  E) \. || defined
2d6d0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42  (SQLITE_ENABLE_B
2d6e0 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54  ATCH_ATOMIC_WRIT
2d6f0 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  E).  int sqlite3
2d700 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
2d710 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23  lite3_file *);.#
2d720 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
2d730 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d  e3JournalIsInMem
2d740 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ory(sqlite3_file
2d750 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   *p);.void sqlit
2d760 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e  e3MemJournalOpen
2d770 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
2d780 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  ;..void sqlite3E
2d790 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46  xprSetHeightAndF
2d7a0 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72  lags(Parse *pPar
2d7b0 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69  se, Expr *p);.#i
2d7c0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
2d7d0 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
2d7e0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
2d7f0 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
2d800 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2d810 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
2d820 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
2d830 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2d840 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
2d850 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
2d860 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
2d870 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
2d880 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
2d890 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
2d8a0 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
2d8b0 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
2d8c0 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
2d8d0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
2d8e0 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
2d8f0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2d900 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
2d910 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
2d920 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2d930 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
2d940 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
2d950 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2d960 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
2d970 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
2d980 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2d990 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2d9a0 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
2d9b0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2d9c0 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
2d9d0 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
2d9e0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2d9f0 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
2da00 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2da10 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
2da20 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
2da30 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
2da40 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
2da50 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
2da60 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
2da70 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
2da80 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
2da90 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
2daa0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
2dab0 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
2dac0 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
2dad0 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
2dae0 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66  messages..*/.#if
2daf0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2db00 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
2db10 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
2db20 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
2db30 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
2db40 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
2db50 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
2db60 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
2db70 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f  LITE_API SQLITE_
2db80 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c  EXTERN void (SQL
2db90 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74  ITE_CDECL *sqlit
2dba0 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74  e3IoTrace)(const
2dbb0 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c   char*,...);.#el
2dbc0 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  se.# define IOTR
2dbd0 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20  ACE(A).# define 
2dbe0 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
2dbf0 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a  ceSql(X).#endif.
2dc00 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75  ./*.** These rou
2dc10 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61  tines are availa
2dc20 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32  ble for the mem2
2dc30 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d  .c debugging mem
2dc40 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a  ory allocator.**
2dc50 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65   only.  They are
2dc60 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
2dc70 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22  that different "
2dc80 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79  types" of memory
2dc90 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  .** allocations 
2dca0 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61  are properly tra
2dcb0 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74  cked by the syst
2dcc0 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  em..**.** sqlite
2dcd0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2dce0 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70  () sets the "typ
2dcf0 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74  e" of an allocat
2dd00 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a  ion to one of.**
2dd10 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d   the MEMTYPE_* m
2dd20 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65  acros defined be
2dd30 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d  low.  The type m
2dd40 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b  ust be a bitmask
2dd50 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c   with.** a singl
2dd60 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  e bit set..**.**
2dd70 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2dd80 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e  HasType() return
2dd90 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66  s true if any of
2dda0 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
2ddb0 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
2ddc0 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
2ddd0 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
2dde0 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
2ddf0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
2de00 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2de10 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20  bugHasType() is 
2de20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
2de30 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29   inside assert()
2de40 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
2de50 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2de60 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72  ugNoType() retur
2de70 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20  ns true if none 
2de80 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2de90 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2dea0 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2deb0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2dec0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2ded0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2dee0 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73  )..**.** Perhaps
2def0 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74   the most import
2df00 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65  ant point is the
2df10 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
2df20 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  een MEMTYPE_HEAP
2df30 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f  .** and MEMTYPE_
2df40 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61  LOOKASIDE.  If a
2df50 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20  n allocation is 
2df60 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2df70 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a  E, that means.**
2df80 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62   it might have b
2df90 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  een allocated by
2dfa0 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65   lookaside, exce
2dfb0 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f  pt the allocatio
2dfc0 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72  n was.** too lar
2dfd0 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  ge or lookaside 
2dfe0 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c  was already full
2dff0 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  .  It is importa
2e000 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  nt to verify.** 
2e010 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  that allocations
2e020 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
2e030 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20   been satisfied 
2e040 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65  by lookaside are
2e050 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62   not.** passed b
2e060 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61  ack to non-looka
2e070 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
2e080 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73  ines.  Asserts s
2e090 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78  uch as the.** ex
2e0a0 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20  ample above are 
2e0b0 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f  placed on the no
2e0c0 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
2e0d0 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76  () routines to v
2e0e0 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f  erify.** this co
2e0f0 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nstraint..**.** 
2e100 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
2e110 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
2e120 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
2e130 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
2e140 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
2e150 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
2e160 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
2e170 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
2e180 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2e190 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
2e1a0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2e1b0 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
2e1c0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
2e1d0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
2e1e0 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
2e1f0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
2e200 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
2e210 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2e220 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2e230 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
2e240 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
2e250 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2e260 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
2e270 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2e280 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2e290 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
2e2a0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2e2b0 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
2e2c0 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
2e2d0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2e2e0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2e2f0 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
2e300 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69   /* Heap that mi
2e310 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
2e320 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69  okaside */.#defi
2e330 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48  ne MEMTYPE_PCACH
2e340 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 50  E     0x04  /* P
2e350 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61  age cache alloca
2e360 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
2e370 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66  Threading interf
2e380 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  ace.*/.#if SQLIT
2e390 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
2e3a0 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74  EADS>0.int sqlit
2e3b0 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53  e3ThreadCreate(S
2e3c0 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f  QLiteThread**,vo
2e3d0 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f  id*(*)(void*),vo
2e3e0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
2e3f0 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69  3ThreadJoin(SQLi
2e400 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a  teThread*, void*
2e410 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
2e420 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2e430 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56 54 41  NABLE_DBPAGE_VTA
2e440 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  B) || defined(SQ
2e450 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73  LITE_TEST).int s
2e460 71 6c 69 74 65 33 44 62 70 61 67 65 52 65 67 69  qlite3DbpageRegi
2e470 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ster(sqlite3*);.
2e480 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
2e490 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2e4a0 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c  _DBSTAT_VTAB) ||
2e4b0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2e4c0 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
2e4d0 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28  3DbstatRegister(
2e4e0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
2e4f0 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  f..int sqlite3Ex
2e500 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45 78 70  prVectorSize(Exp
2e510 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
2e520 71 6c 69 74 65 33 45 78 70 72 49 73 56 65 63 74  qlite3ExprIsVect
2e530 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  or(Expr *pExpr);
2e540 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 56 65  .Expr *sqlite3Ve
2e550 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78 70 72  ctorFieldSubexpr
2e560 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45 78  (Expr*, int);.Ex
2e570 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
2e580 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28 50 61  orVectorField(Pa
2e590 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  rse*,Expr*,int);
2e5a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 65 63  .void sqlite3Vec
2e5b0 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61 72 73  torErrorMsg(Pars
2e5c0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23 69 66  e*, Expr*);..#if
2e5d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e5e0 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
2e5f0 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61 72 20  IAGS.const char 
2e600 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c 65  **sqlite3Compile
2e610 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f  Options(int *pnO
2e620 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e  pt);.#endif..#en
2e630 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54  dif /* SQLITEINT
2e640 5f 48 20 2a 2f 0a                                _H */.